diff options
author | fuzzard <fuzzard@users.noreply.github.com> | 2023-01-09 19:56:40 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-09 19:56:40 +1000 |
commit | 8cb0d91d67a2edd936be45150c50c57f6468b498 (patch) | |
tree | 0157e626aca328855ca7c79054afb5e2f22a060c | |
parent | 54e13ac5849fd1e9c17167c8d9b939b1f0f828b5 (diff) | |
parent | ec9827b2668dd36822fe27eda17e44e3c2103d35 (diff) | |
download | xbmc-8cb0d91d67a2edd936be45150c50c57f6468b498.tar.xz |
Merge pull request #22401 from CastagnaIT/season_title_fix_nexus
[backport][Video][Directory] Allow get the custom named season with GetLocalizedName
-rw-r--r-- | xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.cpp | 43 | ||||
-rw-r--r-- | xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.h | 7 | ||||
-rw-r--r-- | xbmc/video/VideoDatabase.cpp | 6 | ||||
-rw-r--r-- | xbmc/video/VideoDatabase.h | 9 | ||||
-rw-r--r-- | xbmc/video/dialogs/GUIDialogVideoInfo.cpp | 2 |
5 files changed, 52 insertions, 15 deletions
diff --git a/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.cpp b/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.cpp index 5da6c9fce2..25b8b09b2f 100644 --- a/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.cpp +++ b/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.cpp @@ -31,22 +31,37 @@ std::string CDirectoryNodeSeasons::GetLocalizedName() const { switch (GetID()) { - case 0: - return g_localizeStrings.Get(20381); // Specials - case -1: - return g_localizeStrings.Get(20366); // All Seasons - case -2: - { - CDirectoryNode *pParent = GetParent(); - if (pParent) - return pParent->GetLocalizedName(); - return ""; + case 0: + return g_localizeStrings.Get(20381); // Specials + case -1: + return g_localizeStrings.Get(20366); // All Seasons + case -2: + { + CDirectoryNode* pParent = GetParent(); + if (pParent) + return pParent->GetLocalizedName(); + return ""; + } + default: + return GetSeasonTitle(); } - default: - std::string season = - StringUtils::Format(g_localizeStrings.Get(20358), GetID()); // Season <season> - return season; +} + +std::string CDirectoryNodeSeasons::GetSeasonTitle() const +{ + std::string season; + CVideoDatabase db; + if (db.Open()) + { + CQueryParams params; + CollectQueryParams(params); + + season = db.GetTvShowNamedSeasonById(params.GetTvShowId(), params.GetSeason()); } + if (season.empty()) + season = StringUtils::Format(g_localizeStrings.Get(20358), GetID()); // Season <n> + + return season; } bool CDirectoryNodeSeasons::GetContent(CFileItemList& items) const diff --git a/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.h b/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.h index 9d367c150d..d5dd3a1696 100644 --- a/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.h +++ b/xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.h @@ -22,6 +22,13 @@ namespace XFILE NODE_TYPE GetChildType() const override; bool GetContent(CFileItemList& items) const override; std::string GetLocalizedName() const override; + + private: + /*! + * \brief Get the title of choosen season. + * \return The season title. + */ + std::string GetSeasonTitle() const; }; } } diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp index eb5285b402..568fbd7b04 100644 --- a/xbmc/video/VideoDatabase.cpp +++ b/xbmc/video/VideoDatabase.cpp @@ -4758,6 +4758,12 @@ bool CVideoDatabase::GetTvShowNamedSeasons(int showId, std::map<int, std::string return false; } +std::string CVideoDatabase::GetTvShowNamedSeasonById(int tvshowId, int seasonId) +{ + return GetSingleValue("seasons", "name", + PrepareSQL("season=%i AND idShow=%i", seasonId, tvshowId)); +} + bool CVideoDatabase::GetTvShowSeasonArt(int showId, std::map<int, std::map<std::string, std::string> > &seasonArt) { try diff --git a/xbmc/video/VideoDatabase.h b/xbmc/video/VideoDatabase.h index 6c7344567b..af04052cf1 100644 --- a/xbmc/video/VideoDatabase.h +++ b/xbmc/video/VideoDatabase.h @@ -933,6 +933,15 @@ public: bool RemoveArtForItem(int mediaId, const MediaType &mediaType, const std::set<std::string> &artTypes); bool GetTvShowSeasons(int showId, std::map<int, int> &seasons); bool GetTvShowNamedSeasons(int showId, std::map<int, std::string> &seasons); + + /*! + * \brief Get the custom named season. + * \param tvshowId The tv show id relative to the season. + * \param seasonId The season id for which to search the named title. + * \return The named title if found, otherwise empty. + */ + std::string GetTvShowNamedSeasonById(int tvshowId, int seasonId); + bool GetTvShowSeasonArt(int mediaId, std::map<int, std::map<std::string, std::string> > &seasonArt); bool GetArtTypes(const MediaType &mediaType, std::vector<std::string> &artTypes); diff --git a/xbmc/video/dialogs/GUIDialogVideoInfo.cpp b/xbmc/video/dialogs/GUIDialogVideoInfo.cpp index 083b416ac3..240d672744 100644 --- a/xbmc/video/dialogs/GUIDialogVideoInfo.cpp +++ b/xbmc/video/dialogs/GUIDialogVideoInfo.cpp @@ -1422,7 +1422,7 @@ bool CGUIDialogVideoInfo::UpdateVideoItemTitle(const std::shared_ptr<CFileItem>& else if (mediaType == MediaTypeSeason) { database.GetSeasonInfo(iDbId, detail); - title = detail.m_strSortTitle; + title = detail.m_strSortTitle.empty() ? detail.m_strTitle : detail.m_strSortTitle; } else if (mediaType == MediaTypeTvShow) { |