aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfuzzard <fuzzard@users.noreply.github.com>2023-01-09 19:56:40 +1000
committerGitHub <noreply@github.com>2023-01-09 19:56:40 +1000
commit8cb0d91d67a2edd936be45150c50c57f6468b498 (patch)
tree0157e626aca328855ca7c79054afb5e2f22a060c
parent54e13ac5849fd1e9c17167c8d9b939b1f0f828b5 (diff)
parentec9827b2668dd36822fe27eda17e44e3c2103d35 (diff)
downloadxbmc-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.cpp43
-rw-r--r--xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.h7
-rw-r--r--xbmc/video/VideoDatabase.cpp6
-rw-r--r--xbmc/video/VideoDatabase.h9
-rw-r--r--xbmc/video/dialogs/GUIDialogVideoInfo.cpp2
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)
{