summaryrefslogtreecommitdiffstats
path: root/xbmc/guilib/guiinfo/LibraryGUIInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/guilib/guiinfo/LibraryGUIInfo.cpp')
-rw-r--r--xbmc/guilib/guiinfo/LibraryGUIInfo.cpp290
1 files changed, 290 insertions, 0 deletions
diff --git a/xbmc/guilib/guiinfo/LibraryGUIInfo.cpp b/xbmc/guilib/guiinfo/LibraryGUIInfo.cpp
new file mode 100644
index 0000000..fc0f471
--- /dev/null
+++ b/xbmc/guilib/guiinfo/LibraryGUIInfo.cpp
@@ -0,0 +1,290 @@
+/*
+ * Copyright (C) 2012-2018 Team Kodi
+ * This file is part of Kodi - https://kodi.tv
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ * See LICENSES/README.md for more information.
+ */
+
+#include "guilib/guiinfo/LibraryGUIInfo.h"
+
+#include "FileItem.h"
+#include "ServiceBroker.h"
+#include "URL.h"
+#include "filesystem/Directory.h"
+#include "guilib/guiinfo/GUIInfo.h"
+#include "guilib/guiinfo/GUIInfoLabels.h"
+#include "music/MusicDatabase.h"
+#include "music/MusicLibraryQueue.h"
+#include "profiles/ProfileManager.h"
+#include "settings/SettingsComponent.h"
+#include "utils/FileUtils.h"
+#include "utils/StringUtils.h"
+#include "utils/URIUtils.h"
+#include "video/VideoDatabase.h"
+#include "video/VideoLibraryQueue.h"
+
+using namespace KODI::GUILIB::GUIINFO;
+
+CLibraryGUIInfo::CLibraryGUIInfo()
+{
+ ResetLibraryBools();
+}
+
+bool CLibraryGUIInfo::GetLibraryBool(int condition) const
+{
+ bool value = false;
+ GetBool(value, nullptr, 0, CGUIInfo(condition));
+ return value;
+}
+
+void CLibraryGUIInfo::SetLibraryBool(int condition, bool value)
+{
+ switch (condition)
+ {
+ case LIBRARY_HAS_MUSIC:
+ m_libraryHasMusic = value ? 1 : 0;
+ break;
+ case LIBRARY_HAS_MOVIES:
+ m_libraryHasMovies = value ? 1 : 0;
+ break;
+ case LIBRARY_HAS_MOVIE_SETS:
+ m_libraryHasMovieSets = value ? 1 : 0;
+ break;
+ case LIBRARY_HAS_TVSHOWS:
+ m_libraryHasTVShows = value ? 1 : 0;
+ break;
+ case LIBRARY_HAS_MUSICVIDEOS:
+ m_libraryHasMusicVideos = value ? 1 : 0;
+ break;
+ case LIBRARY_HAS_SINGLES:
+ m_libraryHasSingles = value ? 1 : 0;
+ break;
+ case LIBRARY_HAS_COMPILATIONS:
+ m_libraryHasCompilations = value ? 1 : 0;
+ break;
+ case LIBRARY_HAS_BOXSETS:
+ m_libraryHasBoxsets = value ? 1 : 0;
+ break;
+ default:
+ break;
+ }
+}
+
+void CLibraryGUIInfo::ResetLibraryBools()
+{
+ m_libraryHasMusic = -1;
+ m_libraryHasMovies = -1;
+ m_libraryHasTVShows = -1;
+ m_libraryHasMusicVideos = -1;
+ m_libraryHasMovieSets = -1;
+ m_libraryHasSingles = -1;
+ m_libraryHasCompilations = -1;
+ m_libraryHasBoxsets = -1;
+ m_libraryRoleCounts.clear();
+}
+
+bool CLibraryGUIInfo::InitCurrentItem(CFileItem *item)
+{
+ return false;
+}
+
+bool CLibraryGUIInfo::GetLabel(std::string& value, const CFileItem *item, int contextWindow, const CGUIInfo &info, std::string *fallback) const
+{
+ return false;
+}
+
+bool CLibraryGUIInfo::GetInt(int& value, const CGUIListItem *gitem, int contextWindow, const CGUIInfo &info) const
+{
+ return false;
+}
+
+bool CLibraryGUIInfo::GetBool(bool& value, const CGUIListItem *gitem, int contextWindow, const CGUIInfo &info) const
+{
+ switch (info.m_info)
+ {
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ // LIBRARY_*
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ case LIBRARY_HAS_MUSIC:
+ {
+ if (m_libraryHasMusic < 0)
+ { // query
+ CMusicDatabase db;
+ if (db.Open())
+ {
+ m_libraryHasMusic = (db.GetSongsCount() > 0) ? 1 : 0;
+ db.Close();
+ }
+ }
+ value = m_libraryHasMusic > 0;
+ return true;
+ }
+ case LIBRARY_HAS_MOVIES:
+ {
+ if (m_libraryHasMovies < 0)
+ {
+ CVideoDatabase db;
+ if (db.Open())
+ {
+ m_libraryHasMovies = db.HasContent(VideoDbContentType::MOVIES) ? 1 : 0;
+ db.Close();
+ }
+ }
+ value = m_libraryHasMovies > 0;
+ return true;
+ }
+ case LIBRARY_HAS_MOVIE_SETS:
+ {
+ if (m_libraryHasMovieSets < 0)
+ {
+ CVideoDatabase db;
+ if (db.Open())
+ {
+ m_libraryHasMovieSets = db.HasSets() ? 1 : 0;
+ db.Close();
+ }
+ }
+ value = m_libraryHasMovieSets > 0;
+ return true;
+ }
+ case LIBRARY_HAS_TVSHOWS:
+ {
+ if (m_libraryHasTVShows < 0)
+ {
+ CVideoDatabase db;
+ if (db.Open())
+ {
+ m_libraryHasTVShows = db.HasContent(VideoDbContentType::TVSHOWS) ? 1 : 0;
+ db.Close();
+ }
+ }
+ value = m_libraryHasTVShows > 0;
+ return true;
+ }
+ case LIBRARY_HAS_MUSICVIDEOS:
+ {
+ if (m_libraryHasMusicVideos < 0)
+ {
+ CVideoDatabase db;
+ if (db.Open())
+ {
+ m_libraryHasMusicVideos = db.HasContent(VideoDbContentType::MUSICVIDEOS) ? 1 : 0;
+ db.Close();
+ }
+ }
+ value = m_libraryHasMusicVideos > 0;
+ return true;
+ }
+ case LIBRARY_HAS_SINGLES:
+ {
+ if (m_libraryHasSingles < 0)
+ {
+ CMusicDatabase db;
+ if (db.Open())
+ {
+ m_libraryHasSingles = (db.GetSinglesCount() > 0) ? 1 : 0;
+ db.Close();
+ }
+ }
+ value = m_libraryHasSingles > 0;
+ return true;
+ }
+ case LIBRARY_HAS_COMPILATIONS:
+ {
+ if (m_libraryHasCompilations < 0)
+ {
+ CMusicDatabase db;
+ if (db.Open())
+ {
+ m_libraryHasCompilations = (db.GetCompilationAlbumsCount() > 0) ? 1 : 0;
+ db.Close();
+ }
+ }
+ value = m_libraryHasCompilations > 0;
+ return true;
+ }
+ case LIBRARY_HAS_BOXSETS:
+ {
+ if (m_libraryHasBoxsets < 0)
+ {
+ CMusicDatabase db;
+ if (db.Open())
+ {
+ m_libraryHasBoxsets = (db.GetBoxsetsCount() > 0) ? 1 : 0;
+ db.Close();
+ }
+ }
+ value = m_libraryHasBoxsets > 0;
+ return true;
+ }
+ case LIBRARY_HAS_VIDEO:
+ {
+ return (GetBool(value, gitem, contextWindow, CGUIInfo(LIBRARY_HAS_MOVIES)) ||
+ GetBool(value, gitem, contextWindow, CGUIInfo(LIBRARY_HAS_TVSHOWS)) ||
+ GetBool(value, gitem, contextWindow, CGUIInfo(LIBRARY_HAS_MUSICVIDEOS)));
+ }
+ case LIBRARY_HAS_ROLE:
+ {
+ std::string strRole = info.GetData3();
+ // Find value for role if already stored
+ int artistcount = -1;
+ for (const auto &role : m_libraryRoleCounts)
+ {
+ if (StringUtils::EqualsNoCase(strRole, role.first))
+ {
+ artistcount = role.second;
+ break;
+ }
+ }
+ // Otherwise get from DB and store
+ if (artistcount < 0)
+ {
+ CMusicDatabase db;
+ if (db.Open())
+ {
+ artistcount = db.GetArtistCountForRole(strRole);
+ db.Close();
+ m_libraryRoleCounts.emplace_back(std::make_pair(strRole, artistcount));
+ }
+ }
+ value = artistcount > 0;
+ return true;
+ }
+ case LIBRARY_HAS_NODE:
+ {
+ const CURL url(info.GetData3());
+ const std::shared_ptr<CProfileManager> profileManager =
+ CServiceBroker::GetSettingsComponent()->GetProfileManager();
+ CFileItemList items;
+
+ std::string libDir = profileManager->GetLibraryFolder();
+ XFILE::CDirectory::GetDirectory(libDir, items, "", XFILE::DIR_FLAG_NO_FILE_DIRS);
+ if (items.Size() == 0)
+ libDir = "special://xbmc/system/library/";
+
+ std::string nodePath = URIUtils::AddFileToFolder(libDir, url.GetHostName() + "/");
+ nodePath = URIUtils::AddFileToFolder(nodePath, url.GetFileName());
+ value = CFileUtils::Exists(nodePath);
+ return true;
+ }
+ case LIBRARY_IS_SCANNING:
+ {
+ value = (CMusicLibraryQueue::GetInstance().IsScanningLibrary() ||
+ CVideoLibraryQueue::GetInstance().IsScanningLibrary());
+ return true;
+ }
+ case LIBRARY_IS_SCANNING_VIDEO:
+ {
+ value = CVideoLibraryQueue::GetInstance().IsScanningLibrary();
+ return true;
+ }
+ case LIBRARY_IS_SCANNING_MUSIC:
+ {
+ value = CMusicLibraryQueue::GetInstance().IsScanningLibrary();
+ return true;
+ }
+ }
+
+ return false;
+}