aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArne Morten Kvarving <spiff@kodi.tv>2024-09-10 18:57:43 +0200
committerGitHub <noreply@github.com>2024-09-10 18:57:43 +0200
commitc95b578a2b18c7736b2489954b6cc0a764e50a89 (patch)
treea92aa7cfa294e7d2c6098cb3b7b6539fb2d4f58c
parentb1b910e38d695bf0731a2e022ad383ea4349d6fc (diff)
parent1b670617cff60bce2fd75ec520d7c96b008ffa45 (diff)
Merge pull request #25721 from notspiff/move_get_folder_thumb_artutils
changed: move CFileItem::GetFolderThumb to ArtUtils
-rw-r--r--xbmc/FileItem.cpp22
-rw-r--r--xbmc/FileItem.h2
-rw-r--r--xbmc/ThumbLoader.cpp2
-rw-r--r--xbmc/dialogs/GUIDialogContextMenu.cpp3
-rw-r--r--xbmc/utils/ArtUtils.cpp19
-rw-r--r--xbmc/utils/ArtUtils.h10
-rw-r--r--xbmc/utils/test/TestArtUtils.cpp36
7 files changed, 68 insertions, 26 deletions
diff --git a/xbmc/FileItem.cpp b/xbmc/FileItem.cpp
index bf3a4d6f6a..9efa598f82 100644
--- a/xbmc/FileItem.cpp
+++ b/xbmc/FileItem.cpp
@@ -1868,7 +1868,7 @@ std::string CFileItem::GetUserMusicThumb(bool alwaysCheckRemote /* = false */, b
for (const auto& i : thumbs)
{
std::string strFileName = i.asString();
- std::string folderThumb(GetFolderThumb(strFileName));
+ std::string folderThumb(ART::GetFolderThumb(*this, strFileName));
if (CFile::Exists(folderThumb)) // folder.jpg
return folderThumb;
size_t period = strFileName.find_last_of('.');
@@ -2028,26 +2028,6 @@ std::string CFileItem::GetLocalArt(const std::string& artFile, bool useFolder) c
return "";
}
-std::string CFileItem::GetFolderThumb(const std::string &folderJPG /* = "folder.jpg" */) const
-{
- std::string strFolder = m_strPath;
-
- if (IsStack() ||
- URIUtils::IsInRAR(strFolder) ||
- URIUtils::IsInZIP(strFolder))
- {
- URIUtils::GetParentPath(m_strPath,strFolder);
- }
-
- if (IsMultiPath())
- strFolder = CMultiPathDirectory::GetFirstPath(m_strPath);
-
- if (IsPlugin())
- return "";
-
- return URIUtils::AddFileToFolder(strFolder, folderJPG);
-}
-
std::string CFileItem::GetMovieName(bool bUseFolderNames /* = false */) const
{
if (IsPlugin() && HasVideoInfoTag() && !GetVideoInfoTag()->m_strTitle.empty())
diff --git a/xbmc/FileItem.h b/xbmc/FileItem.h
index 239f6ffe23..afaaf47c6a 100644
--- a/xbmc/FileItem.h
+++ b/xbmc/FileItem.h
@@ -445,8 +445,6 @@ public:
*/
std::string GetThumbHideIfUnwatched(const CFileItem* item) const;
- // Gets the folder image associated with this item (defaults to folder.jpg)
- std::string GetFolderThumb(const std::string &folderJPG = "folder.jpg") const;
// Gets the correct movie title
std::string GetMovieName(bool bUseFolderNames = false) const;
diff --git a/xbmc/ThumbLoader.cpp b/xbmc/ThumbLoader.cpp
index 40db919d52..1dfce68659 100644
--- a/xbmc/ThumbLoader.cpp
+++ b/xbmc/ThumbLoader.cpp
@@ -114,7 +114,7 @@ std::string CProgramThumbLoader::GetLocalThumb(const CFileItem &item)
// look for the thumb
if (item.m_bIsFolder)
{
- std::string folderThumb = item.GetFolderThumb();
+ const std::string folderThumb = ART::GetFolderThumb(item);
if (CFileUtils::Exists(folderThumb))
return folderThumb;
}
diff --git a/xbmc/dialogs/GUIDialogContextMenu.cpp b/xbmc/dialogs/GUIDialogContextMenu.cpp
index 6ecf3d1195..48c3aafc1b 100644
--- a/xbmc/dialogs/GUIDialogContextMenu.cpp
+++ b/xbmc/dialogs/GUIDialogContextMenu.cpp
@@ -35,6 +35,7 @@
#include "settings/Settings.h"
#include "settings/SettingsComponent.h"
#include "storage/MediaManager.h"
+#include "utils/ArtUtils.h"
#include "utils/FileUtils.h"
#include "utils/StringUtils.h"
#include "utils/URIUtils.h"
@@ -387,7 +388,7 @@ bool CGUIDialogContextMenu::OnContextButton(const std::string &type, const CFile
items.Add(current);
}
// see if there's a local thumb for this item
- std::string folderThumb = item->GetFolderThumb();
+ std::string folderThumb = ART::GetFolderThumb(*item);
if (CFileUtils::Exists(folderThumb))
{
CFileItemPtr local(new CFileItem("thumb://Local", false));
diff --git a/xbmc/utils/ArtUtils.cpp b/xbmc/utils/ArtUtils.cpp
index b1b6bb306d..06de8f4bdf 100644
--- a/xbmc/utils/ArtUtils.cpp
+++ b/xbmc/utils/ArtUtils.cpp
@@ -13,6 +13,7 @@
#include "ServiceBroker.h"
#include "filesystem/Directory.h"
#include "filesystem/File.h"
+#include "filesystem/MultiPathDirectory.h"
#include "filesystem/StackDirectory.h"
#include "music/MusicFileItemClassify.h"
#include "network/NetworkFileItemClassify.h"
@@ -153,6 +154,24 @@ void FillInDefaultIcon(CFileItem& item)
}
}
+std::string GetFolderThumb(const CFileItem& item, const std::string& folderJPG /* = "folder.jpg" */)
+{
+ std::string strFolder = item.GetPath();
+
+ if (item.IsStack() || URIUtils::IsInRAR(strFolder) || URIUtils::IsInZIP(strFolder))
+ {
+ URIUtils::GetParentPath(item.GetPath(), strFolder);
+ }
+
+ if (item.IsMultiPath())
+ strFolder = CMultiPathDirectory::GetFirstPath(item.GetPath());
+
+ if (item.IsPlugin())
+ return "";
+
+ return URIUtils::AddFileToFolder(strFolder, folderJPG);
+}
+
std::string GetLocalFanart(const CFileItem& item)
{
if (VIDEO::IsVideoDb(item))
diff --git a/xbmc/utils/ArtUtils.h b/xbmc/utils/ArtUtils.h
index 8ae0575e0c..07671d28dd 100644
--- a/xbmc/utils/ArtUtils.h
+++ b/xbmc/utils/ArtUtils.h
@@ -19,13 +19,21 @@ namespace KODI::ART
void FillInDefaultIcon(CFileItem& item);
/*!
+ * \brief Get the folder image associated with item.
+ * \param item Item to get folder image for
+ * \param folderJPG Thumb file to use
+ * \return Folder thumb file appropriate for item
+ */
+std::string GetFolderThumb(const CFileItem& item, const std::string& folderJPG = "folder.jpg");
+
+/*!
\brief Get the local fanart for item if it exists
\return path to the local fanart for this item, or empty if none exists
\sa GetFolderThumb, GetTBNFile
*/
std::string GetLocalFanart(const CFileItem& item);
-// Gets the .tbn file associated with an item
+//! \brief Get the .tbn file associated with an item
std::string GetTBNFile(const CFileItem& item);
} // namespace KODI::ART
diff --git a/xbmc/utils/test/TestArtUtils.cpp b/xbmc/utils/test/TestArtUtils.cpp
index 99b9b4fbc2..b2d850ce80 100644
--- a/xbmc/utils/test/TestArtUtils.cpp
+++ b/xbmc/utils/test/TestArtUtils.cpp
@@ -123,6 +123,33 @@ class GetTbnTest : public testing::WithParamInterface<TbnTest>, public testing::
{
};
+struct FolderTest
+{
+ std::string path;
+ std::string thumb;
+ std::string result;
+};
+
+const auto folder_thumb_tests = std::array{
+ FolderTest{"c:\\dir\\", "art.jpg", "c:\\dir\\art.jpg"},
+ FolderTest{"/home/user/", "folder.jpg", "/home/user/folder.jpg"},
+ FolderTest{"plugin://plugin.video.foo/", "folder.jpg", ""},
+ FolderTest{"stack:///home/user/bar/foo-cd1.avi , /home/user/bar/foo-cd2.avi", "folder.jpg",
+ "/home/user/bar/folder.jpg"},
+ FolderTest{"stack:///home/user/cd1/foo-cd1.avi , /home/user/cd2/foo-cd2.avi", "artist.jpg",
+ "/home/user/artist.jpg"},
+ FolderTest{"zip://%2fhome%2fuser%2fbar.zip/foo.avi", "cover.png",
+ "zip://%2fhome%2fuser%2fbar.zip/cover.png"},
+ FolderTest{"rar://%2fhome%2fuser%2fbar.rar/foo.avi", "cover.png",
+ "rar://%2fhome%2fuser%2fbar.rar/cover.png"},
+ FolderTest{"multipath://%2fhome%2fuser%2fbar%2f/%2fhome%2fuser%2ffoo%2f", "folder.jpg",
+ "/home/user/bar/folder.jpg"},
+};
+
+class FolderThumbTest : public testing::WithParamInterface<FolderTest>, public testing::Test
+{
+};
+
} // namespace
TEST_P(FillInDefaultIconTest, FillInDefaultIcon)
@@ -140,6 +167,15 @@ TEST_P(FillInDefaultIconTest, FillInDefaultIcon)
INSTANTIATE_TEST_SUITE_P(TestArtUtils, FillInDefaultIconTest, testing::ValuesIn(icon_tests));
+TEST_P(FolderThumbTest, GetFolderThumb)
+{
+ CFileItem item(GetParam().path, true);
+ const std::string thumb = ART::GetFolderThumb(item, GetParam().thumb);
+ EXPECT_EQ(thumb, GetParam().result);
+}
+
+INSTANTIATE_TEST_SUITE_P(TestArtUtils, FolderThumbTest, testing::ValuesIn(folder_thumb_tests));
+
TEST_P(GetLocalFanartTest, GetLocalFanart)
{
std::string path, file_path, uniq;