Skip to content

Commit

Permalink
Merge pull request #25185 from notspiff/simplify_network_fileitem_cla…
Browse files Browse the repository at this point in the history
…ssifiers

Simplify network FileItem classifiers
  • Loading branch information
notspiff committed May 12, 2024
2 parents 5f8d504 + 9941c6c commit a43c9b9
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 139 deletions.
14 changes: 4 additions & 10 deletions xbmc/network/NetworkFileItemClassify.cpp
Expand Up @@ -14,15 +14,12 @@
namespace KODI::NETWORK
{

bool IsInternetStream(const CFileItem& item, const bool bStrictCheck /* = false */)
bool IsInternetStream(const CFileItem& item)
{
if (item.HasProperty("IsHTTPDirectory"))
return bStrictCheck;
return false;

if (!item.GetDynPath().empty())
return URIUtils::IsInternetStream(item.GetDynPath(), bStrictCheck);

return URIUtils::IsInternetStream(item.GetPath(), bStrictCheck);
return URIUtils::IsInternetStream(item.GetDynPath());
}

bool IsRemote(const CFileItem& item)
Expand All @@ -32,10 +29,7 @@ bool IsRemote(const CFileItem& item)

bool IsStreamedFilesystem(const CFileItem& item)
{
if (!item.GetDynPath().empty())
return URIUtils::IsStreamedFilesystem(item.GetDynPath());

return URIUtils::IsStreamedFilesystem(item.GetPath());
return URIUtils::IsStreamedFilesystem(item.GetDynPath());
}

} // namespace KODI::NETWORK
2 changes: 1 addition & 1 deletion xbmc/network/NetworkFileItemClassify.h
Expand Up @@ -14,7 +14,7 @@ namespace KODI::NETWORK
{

//! \brief Check whether an item is a an internet stream.
bool IsInternetStream(const CFileItem& item, const bool bStrictCheck = false);
bool IsInternetStream(const CFileItem& item);

//! \brief Check whether an item is on a remote location.
bool IsRemote(const CFileItem& item);
Expand Down
183 changes: 55 additions & 128 deletions xbmc/network/test/TestNetworkFileItemClassify.cpp
Expand Up @@ -33,120 +33,58 @@ struct SimpleDefinition

} // namespace

struct InternetStreamDefinition
{
InternetStreamDefinition(const std::string& path, bool folder, bool strict, bool res)
: item(path, folder), strictCheck(strict), result(res)
{
}

CFileItem item;
bool strictCheck;
bool result;
};

class InternetStreamTest : public testing::WithParamInterface<InternetStreamDefinition>,
class InternetStreamTest : public testing::WithParamInterface<SimpleDefinition>,
public testing::Test
{
};

TEST_P(InternetStreamTest, IsInternetStream)
{
EXPECT_EQ(NETWORK::IsInternetStream(GetParam().item, GetParam().strictCheck), GetParam().result);
EXPECT_EQ(NETWORK::IsInternetStream(GetParam().item), GetParam().result);
}

const auto inetstream_tests = std::array{
InternetStreamDefinition{"/home/user/test.disc", false, false, false},
InternetStreamDefinition{"/home/user/test.disc", true, true, false},
InternetStreamDefinition{"http://some.where/foo", false, false, true},
InternetStreamDefinition{"http://some.where/foo", false, true, true},
InternetStreamDefinition{"http://some.where/foo", true, false, true},
InternetStreamDefinition{"http://some.where/foo", true, true, true},
InternetStreamDefinition{"https://some.where/foo", false, false, true},
InternetStreamDefinition{"https://some.where/foo", false, true, true},
InternetStreamDefinition{"https://some.where/foo", true, false, true},
InternetStreamDefinition{"https://some.where/foo", true, true, true},
InternetStreamDefinition{"tcp://some.where/foo", false, false, true},
InternetStreamDefinition{"tcp://some.where/foo", false, true, true},
InternetStreamDefinition{"tcp://some.where/foo", true, false, true},
InternetStreamDefinition{"tcp://some.where/foo", true, true, true},
InternetStreamDefinition{"udp://some.where/foo", false, false, true},
InternetStreamDefinition{"udp://some.where/foo", false, true, true},
InternetStreamDefinition{"udp://some.where/foo", true, false, true},
InternetStreamDefinition{"udp://some.where/foo", true, true, true},
InternetStreamDefinition{"rtp://some.where/foo", false, false, true},
InternetStreamDefinition{"rtp://some.where/foo", false, false, true},
InternetStreamDefinition{"rtp://some.where/foo", true, false, true},
InternetStreamDefinition{"rtp://some.where/foo", true, true, true},
InternetStreamDefinition{"sdp://some.where/foo", false, false, true},
InternetStreamDefinition{"sdp://some.where/foo", false, true, true},
InternetStreamDefinition{"sdp://some.where/foo", true, false, true},
InternetStreamDefinition{"sdp://some.where/foo", true, true, true},
InternetStreamDefinition{"mms://some.where/foo", false, false, true},
InternetStreamDefinition{"mms://some.where/foo", false, true, true},
InternetStreamDefinition{"mms://some.where/foo", true, false, true},
InternetStreamDefinition{"mms://some.where/foo", true, true, true},
InternetStreamDefinition{"mmst://some.where/foo", false, false, true},
InternetStreamDefinition{"mmst://some.where/foo", false, true, true},
InternetStreamDefinition{"mmst://some.where/foo", true, false, true},
InternetStreamDefinition{"mmst://some.where/foo", true, true, true},
InternetStreamDefinition{"mmsh://some.where/foo", false, false, true},
InternetStreamDefinition{"mmsh://some.where/foo", false, true, true},
InternetStreamDefinition{"mmsh://some.where/foo", true, false, true},
InternetStreamDefinition{"mmsh://some.where/foo", true, true, true},
InternetStreamDefinition{"rtsp://some.where/foo", false, false, true},
InternetStreamDefinition{"rtsp://some.where/foo", false, true, true},
InternetStreamDefinition{"rtsp://some.where/foo", true, false, true},
InternetStreamDefinition{"rtsp://some.where/foo", true, true, true},
InternetStreamDefinition{"rtmp://some.where/foo", false, false, true},
InternetStreamDefinition{"rtmp://some.where/foo", false, true, true},
InternetStreamDefinition{"rtmp://some.where/foo", true, false, true},
InternetStreamDefinition{"rtmp://some.where/foo", true, true, true},
InternetStreamDefinition{"rtmpt://some.where/foo", false, false, true},
InternetStreamDefinition{"rtmpt://some.where/foo", false, true, true},
InternetStreamDefinition{"rtmpt://some.where/foo", true, false, true},
InternetStreamDefinition{"rtmpt://some.where/foo", true, true, true},
InternetStreamDefinition{"rtmpe://some.where/foo", false, false, true},
InternetStreamDefinition{"rtmpe://some.where/foo", false, true, true},
InternetStreamDefinition{"rtmpe://some.where/foo", true, false, true},
InternetStreamDefinition{"rtmpe://some.where/foo", true, true, true},
InternetStreamDefinition{"rtmpte://some.where/foo", false, false, true},
InternetStreamDefinition{"rtmpte://some.where/foo", false, true, true},
InternetStreamDefinition{"rtmpte://some.where/foo", true, false, true},
InternetStreamDefinition{"rtmpte://some.where/foo", true, true, true},
InternetStreamDefinition{"rtmps://some.where/foo", false, false, true},
InternetStreamDefinition{"rtmps://some.where/foo", false, true, true},
InternetStreamDefinition{"rtmps://some.where/foo", true, false, true},
InternetStreamDefinition{"rtmps://some.where/foo", true, true, true},
InternetStreamDefinition{"shout://some.where/foo", false, false, true},
InternetStreamDefinition{"shout://some.where/foo", false, true, true},
InternetStreamDefinition{"shout://some.where/foo", true, false, true},
InternetStreamDefinition{"shout://some.where/foo", true, true, true},
InternetStreamDefinition{"rss://some.where/foo", false, false, true},
InternetStreamDefinition{"rss://some.where/foo", false, true, true},
InternetStreamDefinition{"rss://some.where/foo", true, false, true},
InternetStreamDefinition{"rss://some.where/foo", true, true, true},
InternetStreamDefinition{"rsss://some.where/foo", false, false, true},
InternetStreamDefinition{"rsss://some.where/foo", false, true, true},
InternetStreamDefinition{"rsss://some.where/foo", true, false, true},
InternetStreamDefinition{"rsss://some.where/foo", true, true, true},
InternetStreamDefinition{"upnp://some.where/foo", false, false, false},
InternetStreamDefinition{"upnp://some.where/foo", true, false, false},
InternetStreamDefinition{"upnp://some.where/foo", false, true, true},
InternetStreamDefinition{"upnp://some.where/foo", true, true, true},
InternetStreamDefinition{"ftp://some.where/foo", false, false, false},
InternetStreamDefinition{"ftp://some.where/foo", true, false, false},
InternetStreamDefinition{"ftp://some.where/foo", false, true, true},
InternetStreamDefinition{"ftp://some.where/foo", true, true, true},
InternetStreamDefinition{"sftp://some.where/foo", false, false, false},
InternetStreamDefinition{"sftp://some.where/foo", true, false, false},
InternetStreamDefinition{"sftp://some.where/foo", false, true, true},
InternetStreamDefinition{"sftp://some.where/foo", true, true, true},
InternetStreamDefinition{"ssh://some.where/foo", false, false, false},
InternetStreamDefinition{"ssh://some.where/foo", true, false, false},
InternetStreamDefinition{"ssh://some.where/foo", false, true, true},
InternetStreamDefinition{"ssh://some.where/foo", true, true, true},
InternetStreamDefinition{"ssh://some.where/foo", true, true, true},
SimpleDefinition{"/home/user/test.disc", false, false},
SimpleDefinition{"http://some.where/foo", false, true},
SimpleDefinition{"http://some.where/foo", true, true},
SimpleDefinition{"https://some.where/foo", false, true},
SimpleDefinition{"https://some.where/foo", true, true},
SimpleDefinition{"tcp://some.where/foo", false, true},
SimpleDefinition{"tcp://some.where/foo", true, true},
SimpleDefinition{"udp://some.where/foo", false, true},
SimpleDefinition{"udp://some.where/foo", true, true},
SimpleDefinition{"rtp://some.where/foo", false, true},
SimpleDefinition{"rtp://some.where/foo", true, true},
SimpleDefinition{"sdp://some.where/foo", false, true},
SimpleDefinition{"sdp://some.where/foo", true, true},
SimpleDefinition{"mms://some.where/foo", false, true},
SimpleDefinition{"mms://some.where/foo", true, true},
SimpleDefinition{"mmst://some.where/foo", false, true},
SimpleDefinition{"mmst://some.where/foo", true, true},
SimpleDefinition{"mmsh://some.where/foo", false, true},
SimpleDefinition{"mmsh://some.where/foo", true, true},
SimpleDefinition{"rtsp://some.where/foo", false, true},
SimpleDefinition{"rtsp://some.where/foo", true, true},
SimpleDefinition{"rtmp://some.where/foo", false, true},
SimpleDefinition{"rtmp://some.where/foo", true, true},
SimpleDefinition{"rtmpt://some.where/foo", false, true},
SimpleDefinition{"rtmpt://some.where/foo", true, true},
SimpleDefinition{"rtmpe://some.where/foo", false, true},
SimpleDefinition{"rtmpe://some.where/foo", true, true},
SimpleDefinition{"rtmpte://some.where/foo", false, true},
SimpleDefinition{"rtmpte://some.where/foo", true, true},
SimpleDefinition{"rtmps://some.where/foo", false, true},
SimpleDefinition{"rtmps://some.where/foo", true, true},
SimpleDefinition{"shout://some.where/foo", false, true},
SimpleDefinition{"shout://some.where/foo", true, true},
SimpleDefinition{"rss://some.where/foo", false, true},
SimpleDefinition{"rss://some.where/foo", true, true},
SimpleDefinition{"rsss://some.where/foo", false, true},
SimpleDefinition{"rsss://some.where/foo", true, true},
SimpleDefinition{"upnp://some.where/foo", false, false},
SimpleDefinition{"ftp://some.where/foo", false, false},
SimpleDefinition{"sftp://some.where/foo", false, false},
SimpleDefinition{"ssh://some.where/foo", false, false},
};

INSTANTIATE_TEST_SUITE_P(TestNetworkFileItemClassify,
Expand All @@ -158,38 +96,27 @@ TEST(TestNetworkWorkFileItemClassify, InternetStreamStacks)
std::string stackPath;
EXPECT_TRUE(XFILE::CStackDirectory::ConstructStackPath(
{"/home/foo/somthing.avi", "/home/bar/else.mkv"}, stackPath));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, false), false));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, true), false));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, false), true));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, true), true));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, false)));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, true)));

EXPECT_TRUE(XFILE::CStackDirectory::ConstructStackPath(
{"https://home/foo/somthing.avi", "https://home/bar/else.mkv"}, stackPath));
EXPECT_TRUE(NETWORK::IsInternetStream(CFileItem(stackPath, false), false));
EXPECT_TRUE(NETWORK::IsInternetStream(CFileItem(stackPath, true), false));
EXPECT_TRUE(NETWORK::IsInternetStream(CFileItem(stackPath, false), true));
EXPECT_TRUE(NETWORK::IsInternetStream(CFileItem(stackPath, true), true));
EXPECT_TRUE(NETWORK::IsInternetStream(CFileItem(stackPath, false)));
EXPECT_TRUE(NETWORK::IsInternetStream(CFileItem(stackPath, true)));

EXPECT_TRUE(XFILE::CStackDirectory::ConstructStackPath(
{"ftp://home/foo/somthing.avi", "ftp://home/bar/else.mkv"}, stackPath));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, false), false));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, true), false));
EXPECT_TRUE(NETWORK::IsInternetStream(CFileItem(stackPath, false), true));
EXPECT_TRUE(NETWORK::IsInternetStream(CFileItem(stackPath, true), true));

EXPECT_TRUE(XFILE::CStackDirectory::ConstructStackPath(
{"ftp://home/foo/somthing.avi", "/home/bar/else.mkv"}, stackPath));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, false), false));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, true), false));
EXPECT_TRUE(NETWORK::IsInternetStream(CFileItem(stackPath, false), true));
EXPECT_TRUE(NETWORK::IsInternetStream(CFileItem(stackPath, true), true));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, false)));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, true)));

EXPECT_TRUE(XFILE::CStackDirectory::ConstructStackPath(
{"/home/foo/somthing.avi", "ftp://home/bar/else.mkv"}, stackPath));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, false), false));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, true), false));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, false), true));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, true), true));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, false)));
EXPECT_FALSE(NETWORK::IsInternetStream(CFileItem(stackPath, true)));

CFileItem item("https://some.where/", true);
item.SetProperty("IsHTTPDirectory", true);
EXPECT_FALSE(NETWORK::IsInternetStream(item));
}

class RemoteTest : public testing::WithParamInterface<SimpleDefinition>, public testing::Test
Expand Down

0 comments on commit a43c9b9

Please sign in to comment.