diff options
author | Arne Morten Kvarving <spiff@kodi.tv> | 2024-09-10 18:57:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-10 18:57:43 +0200 |
commit | c95b578a2b18c7736b2489954b6cc0a764e50a89 (patch) | |
tree | a92aa7cfa294e7d2c6098cb3b7b6539fb2d4f58c | |
parent | b1b910e38d695bf0731a2e022ad383ea4349d6fc (diff) | |
parent | 1b670617cff60bce2fd75ec520d7c96b008ffa45 (diff) |
Merge pull request #25721 from notspiff/move_get_folder_thumb_artutils
changed: move CFileItem::GetFolderThumb to ArtUtils
-rw-r--r-- | xbmc/FileItem.cpp | 22 | ||||
-rw-r--r-- | xbmc/FileItem.h | 2 | ||||
-rw-r--r-- | xbmc/ThumbLoader.cpp | 2 | ||||
-rw-r--r-- | xbmc/dialogs/GUIDialogContextMenu.cpp | 3 | ||||
-rw-r--r-- | xbmc/utils/ArtUtils.cpp | 19 | ||||
-rw-r--r-- | xbmc/utils/ArtUtils.h | 10 | ||||
-rw-r--r-- | xbmc/utils/test/TestArtUtils.cpp | 36 |
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; |