Merge branch 'container_foldername'
authorJonathan Marshall <jmarshall@never.you.mind>
Tue, 22 Mar 2011 19:43:27 +0000 (08:43 +1300)
committerJonathan Marshall <jmarshall@never.you.mind>
Tue, 22 Mar 2011 20:11:23 +0000 (09:11 +1300)
This patch set addresses #10313, providing localizable names of the current container foldername via the Container.Foldername infolabel.

I've done this by utilizing the label of the CFileItemList, setting it either in the directory classes (addons, videodb, musicdb) or directly by looking up the source name (files nodes) or by using GetTitleForPath.

105 files changed:
xbmc/GUIInfoManager.cpp
xbmc/Util.cpp
xbmc/filesystem/AddonsDirectory.cpp
xbmc/filesystem/MusicDatabaseDirectory.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNode.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbum.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbum.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumCompilations.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumCompilations.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumCompilationsSongs.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumCompilationsSongs.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyAdded.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyAdded.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyAddedSong.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyAddedSong.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyPlayed.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyPlayed.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyPlayedSong.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumRecentlyPlayedSong.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumTop100.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumTop100.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumTop100Song.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeAlbumTop100Song.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeArtist.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeArtist.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeGenre.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeGenre.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeOverview.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeOverview.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeRoot.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeRoot.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeSingles.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeSingles.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeSong.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeSong.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeSongTop100.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeSongTop100.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeTop100.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeTop100.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeYear.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeYear.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeYearAlbum.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeYearAlbum.h
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeYearSong.cpp
xbmc/filesystem/MusicDatabaseDirectory/DirectoryNodeYearSong.h
xbmc/filesystem/MusicSearchDirectory.cpp
xbmc/filesystem/SmartPlaylistDirectory.cpp
xbmc/filesystem/VideoDatabaseDirectory.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNode.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeActor.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeActor.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeCountry.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeCountry.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeDirector.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeDirector.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeEpisodes.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeEpisodes.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeGenre.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeGenre.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeMoviesOverview.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeMoviesOverview.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeMusicVideoAlbum.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeMusicVideoAlbum.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeMusicVideosOverview.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeMusicVideosOverview.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeOverview.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeOverview.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeRecentlyAddedEpisodes.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeRecentlyAddedEpisodes.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeRecentlyAddedMovies.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeRecentlyAddedMovies.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeRecentlyAddedMusicVideos.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeRecentlyAddedMusicVideos.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeRoot.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeRoot.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSeasons.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSets.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeSets.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeStudio.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeStudio.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeTitleMovies.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeTitleMovies.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeTitleMusicVideos.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeTitleMusicVideos.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeTitleTvShows.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeTitleTvShows.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeTvShowsOverview.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeTvShowsOverview.h
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeYear.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeYear.h
xbmc/filesystem/VirtualDirectory.cpp
xbmc/filesystem/VirtualDirectory.h
xbmc/music/MusicDatabase.cpp
xbmc/music/MusicDatabase.h
xbmc/music/windows/GUIWindowMusicSongs.cpp
xbmc/pictures/GUIWindowPictures.cpp
xbmc/pictures/GUIWindowPictures.h
xbmc/video/VideoDatabase.cpp
xbmc/video/VideoDatabase.h
xbmc/video/windows/GUIWindowVideoBase.cpp
xbmc/video/windows/GUIWindowVideoNav.cpp
xbmc/windows/GUIMediaWindow.cpp

index b196cff..05b9b6d 100644 (file)
@@ -1290,12 +1290,10 @@ CStdString CGUIInfoManager::GetLabel(int info, int contextWindow)
       CGUIWindow *window = GetWindowWithCondition(contextWindow, WINDOW_CONDITION_IS_MEDIA_WINDOW);
       if (window)
       {
-        strLabel = CURL(((CGUIMediaWindow*)window)->CurrentDirectory().m_strPath).GetWithoutUserDetails();
         if (info==CONTAINER_FOLDERNAME)
-        {
-          URIUtils::RemoveSlashAtEnd(strLabel);
-          strLabel=URIUtils::GetFileName(strLabel);
-        }
+          strLabel = ((CGUIMediaWindow*)window)->CurrentDirectory().GetLabel();
+        else
+          strLabel = CURL(((CGUIMediaWindow*)window)->CurrentDirectory().m_strPath).GetWithoutUserDetails();
       }
       break;
     }
index d421307..59c5868 100644 (file)
@@ -208,13 +208,20 @@ CStdString CUtil::GetTitleFromPath(const CStdString& strFileNameAndPath, bool bI
   else if (url.GetProtocol() == "sap" && strFilename.IsEmpty())
     strFilename = "SAP Streams";
 
+  // Root file views
+  else if (url.GetProtocol() == "sources")
+    strFilename = g_localizeStrings.Get(744);
+
   // Music Playlists
   else if (path.Left(24).Equals("special://musicplaylists"))
-    strFilename = g_localizeStrings.Get(20011);
+    strFilename = g_localizeStrings.Get(136);
 
   // Video Playlists
   else if (path.Left(24).Equals("special://videoplaylists"))
-    strFilename = g_localizeStrings.Get(20012);
+    strFilename = g_localizeStrings.Get(136);
+
+  else if ((url.GetProtocol() == "rar" || url.GetProtocol() == "zip") && strFilename.IsEmpty())
+    strFilename = URIUtils::GetFileName(url.GetHostName());
 
   // now remove the extension if needed
   if (!g_guiSettings.GetBool("filelists.showextensions") && !bIsFolder)
index cbca28d..9f07a2c 100644 (file)
@@ -63,22 +63,26 @@ bool CAddonsDirectory::GetDirectory(const CStdString& strPath, CFileItemList &it
   {
     CAddonMgr::Get().GetAllAddons(addons, true);
     items.SetProperty("reponame",g_localizeStrings.Get(24062));
+    items.SetLabel(g_localizeStrings.Get(24062));
   }
   else if (path.GetHostName().Equals("disabled"))
   { // grab all disabled addons, including disabled repositories
     reposAsFolders = false;
     CAddonMgr::Get().GetAllAddons(addons, false, true);
     items.SetProperty("reponame",g_localizeStrings.Get(24039));
+    items.SetLabel(g_localizeStrings.Get(24039));
   }
   else if (path.GetHostName().Equals("outdated"))
   {
     reposAsFolders = false;
     CAddonMgr::Get().GetAllOutdatedAddons(addons);
     items.SetProperty("reponame",g_localizeStrings.Get(24043));
+    items.SetLabel(g_localizeStrings.Get(24043));
   }
   else if (path.GetHostName().Equals("repos"))
   {
     CAddonMgr::Get().GetAddons(ADDON_REPOSITORY,addons,true);
+    items.SetLabel(g_localizeStrings.Get(24033)); // Get Add-ons
   }
   else if (path.GetHostName().Equals("sources"))
   {
@@ -90,6 +94,7 @@ bool CAddonsDirectory::GetDirectory(const CStdString& strPath, CFileItemList &it
     database.Open();
     database.GetAddons(addons);
     items.SetProperty("reponame",g_localizeStrings.Get(24032));
+    items.SetLabel(g_localizeStrings.Get(24032));
   }
   else
   {
@@ -105,6 +110,7 @@ bool CAddonsDirectory::GetDirectory(const CStdString& strPath, CFileItemList &it
     database.Open();
     database.GetRepository(addon->ID(),addons);
     items.SetProperty("reponame",addon->Name());
+    items.SetLabel(addon->Name());
   }
 
   if (path.GetFileName().IsEmpty())
@@ -136,6 +142,7 @@ bool CAddonsDirectory::GetDirectory(const CStdString& strPath, CFileItemList &it
   {
     TYPE type = TranslateType(path.GetFileName());
     items.SetProperty("addoncategory",TranslateType(type, true));
+    items.SetLabel(TranslateType(type, true));
     items.m_strPath = strPath;
 
     // FIXME: Categorisation of addons needs adding here
@@ -273,6 +280,7 @@ bool CAddonsDirectory::GetScriptsAndPlugins(const CStdString &content, CFileItem
   items.Add(GetMoreItem(content));
 
   items.SetContent("addons");
+  items.SetLabel(g_localizeStrings.Get(24001)); // Add-ons
 
   return items.Size() > 0;
 }
index 1defcc7..edb3b1e 100644 (file)
@@ -60,6 +60,7 @@ bool CMusicDatabaseDirectory::GetDirectory(const CStdString& strPath, CFileItemL
         item->SetIconImage(strImage);
     }
   }
+  items.SetLabel(pNode->GetLocalizedName());
 
   return bResult;
 }
@@ -149,32 +150,23 @@ bool CMusicDatabaseDirectory::GetLabel(const CStdString& strDirectory, CStdStrin
     return false;
 
   // get genre
-  CStdString strTemp;
   if (params.GetGenreId() >= 0)
-  {
-    strTemp = "";
-    musicdatabase.GetGenreById(params.GetGenreId(), strTemp);
-    strLabel += strTemp;
-  }
+    strLabel += musicdatabase.GetGenreById(params.GetGenreId());
 
   // get artist
   if (params.GetArtistId() >= 0)
   {
-    strTemp = "";
-    musicdatabase.GetArtistById(params.GetArtistId(), strTemp);
     if (!strLabel.IsEmpty())
       strLabel += " / ";
-    strLabel += strTemp;
+    strLabel += musicdatabase.GetArtistById(params.GetArtistId());
   }
 
   // get album
   if (params.GetAlbumId() >= 0)
   {
-    strTemp = "";
-    musicdatabase.GetAlbumById(params.GetAlbumId(), strTemp);
     if (!strLabel.IsEmpty())
       strLabel += " / ";
-    strLabel += strTemp;
+    strLabel += musicdatabase.GetAlbumById(params.GetAlbumId());
   }
 
   if (strLabel.IsEmpty())
index 183896c..f6cd550 100644 (file)
@@ -155,19 +155,29 @@ CDirectoryNode* CDirectoryNode::CreateNode(NODE_TYPE Type, const CStdString& str
 }
 
 //  Current node name
-const CStdString& CDirectoryNode::GetName()
+const CStdString& CDirectoryNode::GetName() const
 {
   return m_strName;
 }
 
+int CDirectoryNode::GetID() const
+{
+  return atoi(m_strName.c_str());
+}
+
+CStdString CDirectoryNode::GetLocalizedName() const
+{
+  return "";
+}
+
 //  Current node type
-NODE_TYPE CDirectoryNode::GetType()
+NODE_TYPE CDirectoryNode::GetType() const
 {
   return m_Type;
 }
 
 //  Return the parent directory node or NULL, if there is no
-CDirectoryNode* CDirectoryNode::GetParent()
+CDirectoryNode* CDirectoryNode::GetParent() const
 {
   return m_pParent;
 }
@@ -180,13 +190,13 @@ void CDirectoryNode::RemoveParent()
 //  should be overloaded by a derived class
 //  to get the content of a node. Will be called
 //  by GetChilds() of a parent node
-bool CDirectoryNode::GetContent(CFileItemList& items)
+bool CDirectoryNode::GetContent(CFileItemList& items) const
 {
   return false;
 }
 
 //  Creates a musicdb url
-CStdString CDirectoryNode::BuildPath()
+CStdString CDirectoryNode::BuildPath() const
 {
   CStdStringArray array;
 
@@ -213,7 +223,7 @@ CStdString CDirectoryNode::BuildPath()
 //  Collects Query params from this and all parent nodes. If a NODE_TYPE can
 //  be used as a database parameter, it will be added to the
 //  params object.
-void CDirectoryNode::CollectQueryParams(CQueryParams& params)
+void CDirectoryNode::CollectQueryParams(CQueryParams& params) const
 {
   params.SetQueryParam(m_Type, m_strName);
 
@@ -227,7 +237,7 @@ void CDirectoryNode::CollectQueryParams(CQueryParams& params)
 
 //  Should be overloaded by a derived class.
 //  Returns the NODE_TYPE of the child nodes.
-NODE_TYPE CDirectoryNode::GetChildType()
+NODE_TYPE CDirectoryNode::GetChildType() const
 {
   return NODE_TYPE_NONE;
 }
@@ -261,7 +271,7 @@ bool CDirectoryNode::GetChilds(CFileItemList& items)
 
 //  Add an "* All ..." folder to the CFileItemList
 //  depending on the child node
-void CDirectoryNode::AddQueuingFolder(CFileItemList& items)
+void CDirectoryNode::AddQueuingFolder(CFileItemList& items) const
 {
   CFileItemPtr pItem;
 
@@ -333,7 +343,7 @@ void CDirectoryNode::AddQueuingFolder(CFileItemList& items)
   }
 }
 
-bool CDirectoryNode::CanCache()
+bool CDirectoryNode::CanCache() const
 {
   // JM: No need to cache these views, as caching is added in the mediawindow baseclass for anything that takes
   //     longer than a second
index 08c3259..b659d0e 100644 (file)
@@ -56,6 +56,12 @@ namespace XFILE
       NODE_TYPE_SINGLES
     } NODE_TYPE;
 
+    typedef struct {
+      NODE_TYPE node;
+      int       id;
+      int       label;
+    } Node;
+
     class CDirectoryNode
     {
     public:
@@ -63,29 +69,31 @@ namespace XFILE
       static void GetDatabaseInfo(const CStdString& strPath, CQueryParams& params);
       virtual ~CDirectoryNode();
 
-      NODE_TYPE GetType();
+      NODE_TYPE GetType() const;
 
       bool GetChilds(CFileItemList& items);
-      virtual NODE_TYPE GetChildType();
+      virtual NODE_TYPE GetChildType() const;
+      virtual CStdString GetLocalizedName() const;
 
-      CDirectoryNode* GetParent();
-      bool CanCache();
+      CDirectoryNode* GetParent() const;
+      bool CanCache() const;
 
     protected:
       CDirectoryNode(NODE_TYPE Type, const CStdString& strName, CDirectoryNode* pParent);
       static CDirectoryNode* CreateNode(NODE_TYPE Type, const CStdString& strName, CDirectoryNode* pParent);
 
-      void CollectQueryParams(CQueryParams& params);
+      void CollectQueryParams(CQueryParams& params) const;
 
-      const CStdString& GetName();
+      const CStdString& GetName() const;
+      int GetID() const;
       void RemoveParent();
 
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
 
-      CStdString BuildPath();
+      CStdString BuildPath() const;
 
     private:
-      void AddQueuingFolder(CFileItemList& items);
+      void AddQueuingFolder(CFileItemList& items) const;
 
     private:
       NODE_TYPE m_Type;
index f1f2ea6..fdc6d32 100644 (file)
@@ -31,12 +31,22 @@ CDirectoryNodeAlbum::CDirectoryNodeAlbum(const CStdString& strName, CDirectoryNo
 
 }
 
-NODE_TYPE CDirectoryNodeAlbum::GetChildType()
+NODE_TYPE CDirectoryNodeAlbum::GetChildType() const
 {
   return NODE_TYPE_SONG;
 }
 
-bool CDirectoryNodeAlbum::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeAlbum::GetLocalizedName() const
+{
+  if (GetID() == -1)
+    return g_localizeStrings.Get(15102); // All Albums
+  CMusicDatabase db;
+  if (db.Open())
+    return db.GetAlbumById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeAlbum::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index 8027ddf..d0746bf 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeAlbum(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index cce4738..6917f7d 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeAlbumCompilations::CDirectoryNodeAlbumCompilations(const CStdStrin
 
 }
 
-NODE_TYPE CDirectoryNodeAlbumCompilations::GetChildType()
+NODE_TYPE CDirectoryNodeAlbumCompilations::GetChildType() const
 {
   if (GetName()=="-1")
     return NODE_TYPE_ALBUM_COMPILATIONS_SONGS;
@@ -39,7 +39,17 @@ NODE_TYPE CDirectoryNodeAlbumCompilations::GetChildType()
   return NODE_TYPE_SONG;
 }
 
-bool CDirectoryNodeAlbumCompilations::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeAlbumCompilations::GetLocalizedName() const
+{
+  if (GetID() == -1)
+    return g_localizeStrings.Get(15102); // All Albums
+  CMusicDatabase db;
+  if (db.Open())
+    return db.GetAlbumById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeAlbumCompilations::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index 185fc3f..af7592d 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeAlbumCompilations(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 54eeefc..0106684 100644 (file)
@@ -32,7 +32,7 @@ CDirectoryNodeAlbumCompilationsSongs::CDirectoryNodeAlbumCompilationsSongs(const
 }
 
 
-bool CDirectoryNodeAlbumCompilationsSongs::GetContent(CFileItemList& items)
+bool CDirectoryNodeAlbumCompilationsSongs::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index 324a008..c1f5648 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeAlbumCompilationsSongs(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
     };
   }
 }
index 99fad2e..2a87c86 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeAlbumRecentlyAdded::CDirectoryNodeAlbumRecentlyAdded(const CStdStr
 
 }
 
-NODE_TYPE CDirectoryNodeAlbumRecentlyAdded::GetChildType()
+NODE_TYPE CDirectoryNodeAlbumRecentlyAdded::GetChildType() const
 {
   if (GetName()=="-1")
     return NODE_TYPE_ALBUM_RECENTLY_ADDED_SONGS;
@@ -39,7 +39,17 @@ NODE_TYPE CDirectoryNodeAlbumRecentlyAdded::GetChildType()
   return NODE_TYPE_SONG;
 }
 
-bool CDirectoryNodeAlbumRecentlyAdded::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeAlbumRecentlyAdded::GetLocalizedName() const
+{
+  if (GetID() == -1)
+    return g_localizeStrings.Get(15102); // All Albums
+  CMusicDatabase db;
+  if (db.Open())
+    return db.GetAlbumById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeAlbumRecentlyAdded::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index ee20a5f..10b8911 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeAlbumRecentlyAdded(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 84f1dc9..d008988 100644 (file)
@@ -30,7 +30,7 @@ CDirectoryNodeAlbumRecentlyAddedSong::CDirectoryNodeAlbumRecentlyAddedSong(const
 
 }
 
-bool CDirectoryNodeAlbumRecentlyAddedSong::GetContent(CFileItemList& items)
+bool CDirectoryNodeAlbumRecentlyAddedSong::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index cc74dd4..cf3ea08 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeAlbumRecentlyAddedSong(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
     };
   }
 }
index 2555ac0..67c384b 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeAlbumRecentlyPlayed::CDirectoryNodeAlbumRecentlyPlayed(const CStdS
 
 }
 
-NODE_TYPE CDirectoryNodeAlbumRecentlyPlayed::GetChildType()
+NODE_TYPE CDirectoryNodeAlbumRecentlyPlayed::GetChildType() const
 {
   if (GetName()=="-1")
     return NODE_TYPE_ALBUM_RECENTLY_PLAYED_SONGS;
@@ -39,7 +39,17 @@ NODE_TYPE CDirectoryNodeAlbumRecentlyPlayed::GetChildType()
   return NODE_TYPE_SONG;
 }
 
-bool CDirectoryNodeAlbumRecentlyPlayed::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeAlbumRecentlyPlayed::GetLocalizedName() const
+{
+  if (GetID() == -1)
+    return g_localizeStrings.Get(15102); // All Albums
+  CMusicDatabase db;
+  if (db.Open())
+    return db.GetAlbumById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeAlbumRecentlyPlayed::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index cb11a6c..d6564bb 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeAlbumRecentlyPlayed(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index e267e78..86b770f 100644 (file)
@@ -30,7 +30,7 @@ CDirectoryNodeAlbumRecentlyPlayedSong::CDirectoryNodeAlbumRecentlyPlayedSong(con
 
 }
 
-bool CDirectoryNodeAlbumRecentlyPlayedSong::GetContent(CFileItemList& items)
+bool CDirectoryNodeAlbumRecentlyPlayedSong::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index 8fcdf3d..bf4456e 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeAlbumRecentlyPlayedSong(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
     };
   }
 }
index 0e58e54..006559f 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeAlbumTop100::CDirectoryNodeAlbumTop100(const CStdString& strName,
 
 }
 
-NODE_TYPE CDirectoryNodeAlbumTop100::GetChildType()
+NODE_TYPE CDirectoryNodeAlbumTop100::GetChildType() const
 {
   if (GetName()=="-1")
     return NODE_TYPE_ALBUM_TOP100_SONGS;
@@ -39,7 +39,15 @@ NODE_TYPE CDirectoryNodeAlbumTop100::GetChildType()
   return NODE_TYPE_SONG;
 }
 
-bool CDirectoryNodeAlbumTop100::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeAlbumTop100::GetLocalizedName() const
+{
+  CMusicDatabase db;
+  if (db.Open())
+    return db.GetAlbumById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeAlbumTop100::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index 9b253a2..1779539 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeAlbumTop100(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 3865750..8a87f1a 100644 (file)
@@ -30,7 +30,7 @@ CDirectoryNodeAlbumTop100Song::CDirectoryNodeAlbumTop100Song(const CStdString& s
 
 }
 
-bool CDirectoryNodeAlbumTop100Song::GetContent(CFileItemList& items)
+bool CDirectoryNodeAlbumTop100Song::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index e0f588d..82d2a1e 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeAlbumTop100Song(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
     };
   }
 }
index 347ee2f..4f0f11b 100644 (file)
@@ -32,12 +32,22 @@ CDirectoryNodeArtist::CDirectoryNodeArtist(const CStdString& strName, CDirectory
 
 }
 
-NODE_TYPE CDirectoryNodeArtist::GetChildType()
+NODE_TYPE CDirectoryNodeArtist::GetChildType() const
 {
   return NODE_TYPE_ALBUM;
 }
 
-bool CDirectoryNodeArtist::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeArtist::GetLocalizedName() const
+{
+  if (GetID() == -1)
+    return g_localizeStrings.Get(15103); // All Artists
+  CMusicDatabase db;
+  if (db.Open())
+    return db.GetArtistById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeArtist::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index 1e84081..fc86aca 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeArtist(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 336a55a..767ac66 100644 (file)
@@ -31,12 +31,20 @@ CDirectoryNodeGenre::CDirectoryNodeGenre(const CStdString& strName, CDirectoryNo
 
 }
 
-NODE_TYPE CDirectoryNodeGenre::GetChildType()
+NODE_TYPE CDirectoryNodeGenre::GetChildType() const
 {
   return NODE_TYPE_ARTIST;
 }
 
-bool CDirectoryNodeGenre::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeGenre::GetLocalizedName() const
+{
+  CMusicDatabase db;
+  if (db.Open())
+    return db.GetGenreById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeGenre::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index e88350e..48420f0 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeGenre(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index d890e60..9982352 100644 (file)
 #include "music/MusicDatabase.h"
 #include "guilib/LocalizeStrings.h"
 
+namespace XFILE
+{
+  namespace MUSICDATABASEDIRECTORY
+  {
+    Node OverviewChildren[] = {
+                                { NODE_TYPE_GENRE,                 1, 135 },
+                                { NODE_TYPE_ARTIST,                2, 133 },
+                                { NODE_TYPE_ALBUM,                 3, 132 },
+                                { NODE_TYPE_SINGLES,              10, 1050 },
+                                { NODE_TYPE_SONG,                  4, 134 },
+                                { NODE_TYPE_YEAR,                  9, 652 },
+                                { NODE_TYPE_TOP100,                5, 271 },
+                                { NODE_TYPE_ALBUM_RECENTLY_ADDED,  6, 359 },
+                                { NODE_TYPE_ALBUM_RECENTLY_PLAYED, 7, 517 },
+                                { NODE_TYPE_ALBUM_COMPILATIONS,    8, 521 },
+                              };
+  };
+};
+
 using namespace std;
 using namespace XFILE::MUSICDATABASEDIRECTORY;
 
@@ -33,34 +52,24 @@ CDirectoryNodeOverview::CDirectoryNodeOverview(const CStdString& strName, CDirec
 
 }
 
-NODE_TYPE CDirectoryNodeOverview::GetChildType()
+NODE_TYPE CDirectoryNodeOverview::GetChildType() const
 {
-  if (GetName()=="1")
-    return NODE_TYPE_GENRE;
-  else if (GetName()=="2")
-    return NODE_TYPE_ARTIST;
-  else if (GetName()=="3")
-    return NODE_TYPE_ALBUM;
-  else if (GetName()=="4")
-    return NODE_TYPE_SONG;
-  else if (GetName()=="5")
-    return NODE_TYPE_TOP100;
-  else if (GetName()=="6")
-    return NODE_TYPE_ALBUM_RECENTLY_ADDED;
-  else if (GetName()=="7")
-    return NODE_TYPE_ALBUM_RECENTLY_PLAYED;
-  else if (GetName()=="8")
-    return NODE_TYPE_ALBUM_COMPILATIONS;
-  else if (GetName()=="9")
-    return NODE_TYPE_YEAR;
-  else if (GetName()=="10")
-    return NODE_TYPE_SINGLES;
+  for (unsigned int i = 0; i < sizeof(OverviewChildren) / sizeof(Node); ++i)
+    if (GetID() == OverviewChildren[i].id)
+      return OverviewChildren[i].node;
   return NODE_TYPE_NONE;
 }
 
-bool CDirectoryNodeOverview::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeOverview::GetLocalizedName() const
+{
+  for (unsigned int i = 0; i < sizeof(OverviewChildren) / sizeof(Node); ++i)
+    if (GetID() == OverviewChildren[i].id)
+      return g_localizeStrings.Get(OverviewChildren[i].label);
+  return "";
+}
+
+bool CDirectoryNodeOverview::GetContent(CFileItemList& items) const
 {
-  vector< pair<int, int> > rootItems;
   CMusicDatabase musicDatabase;
   bool showSingles = false;
   if (musicDatabase.Open())
@@ -69,24 +78,16 @@ bool CDirectoryNodeOverview::GetContent(CFileItemList& items)
       showSingles = true;
   }
 
-  rootItems.push_back(make_pair(1, 135));
-  rootItems.push_back(make_pair(2, 133));
-  rootItems.push_back(make_pair(3, 132));
-  if (showSingles)
-    rootItems.push_back(make_pair(10, 1050));
-  rootItems.push_back(make_pair(4, 134));
-  rootItems.push_back(make_pair(9, 652));
-  rootItems.push_back(make_pair(5, 271));
-  rootItems.push_back(make_pair(6, 359));
-  rootItems.push_back(make_pair(7, 517));
-  if (musicDatabase.GetVariousArtistsAlbumsCount() > 0)
-    rootItems.push_back(make_pair(8, 521));
-
-  for (unsigned int i = 0; i < rootItems.size(); ++i)
+  for (unsigned int i = 0; i < sizeof(OverviewChildren) / sizeof(Node); ++i)
   {
-    CFileItemPtr pItem(new CFileItem(g_localizeStrings.Get(rootItems[i].second)));
+    if (i == 3 && !showSingles) // singles
+      continue;
+    if (i == 9 && musicDatabase.GetVariousArtistsAlbumsCount() == 0) // compilations
+      continue;
+
+    CFileItemPtr pItem(new CFileItem(g_localizeStrings.Get(OverviewChildren[i].label)));
     CStdString strDir;
-    strDir.Format("%i/", rootItems[i].first);
+    strDir.Format("%ld/", OverviewChildren[i].id);
     pItem->m_strPath = BuildPath() + strDir;
     pItem->m_bIsFolder = true;
     pItem->SetCanQueue(false);
index 32e81d4..4980e02 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeOverview(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 0287060..be63ca5 100644 (file)
@@ -29,7 +29,7 @@ CDirectoryNodeRoot::CDirectoryNodeRoot(const CStdString& strName, CDirectoryNode
 
 }
 
-NODE_TYPE CDirectoryNodeRoot::GetChildType()
+NODE_TYPE CDirectoryNodeRoot::GetChildType() const
 {
   return NODE_TYPE_OVERVIEW;
 }
index 9ee8dff..f0f719f 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeRoot(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
+      virtual NODE_TYPE GetChildType() const;
     };
   }
 }
index 43fd238..8ce6438 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeSingles::CDirectoryNodeSingles(const CStdString& strName, CDirecto
 
 }
 
-bool CDirectoryNodeSingles::GetContent(CFileItemList& items)
+bool CDirectoryNodeSingles::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index 43830ed..7f3db3f 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeSingles(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
     };
   }
 }
index 5b280d3..1085dc5 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeSong::CDirectoryNodeSong(const CStdString& strName, CDirectoryNode
 
 }
 
-bool CDirectoryNodeSong::GetContent(CFileItemList& items)
+bool CDirectoryNodeSong::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index c4ab4f4..b7b568f 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeSong(const CStdString& strEntryName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
     };
   }
 }
index 5f0aa60..e4eb8de 100644 (file)
@@ -30,7 +30,7 @@ CDirectoryNodeSongTop100::CDirectoryNodeSongTop100(const CStdString& strName, CD
 
 }
 
-bool CDirectoryNodeSongTop100::GetContent(CFileItemList& items)
+bool CDirectoryNodeSongTop100::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index 768ddb6..779a0ab 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeSongTop100(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
     };
   }
 }
index 5915f28..3739f23 100644 (file)
 using namespace std;
 using namespace XFILE::MUSICDATABASEDIRECTORY;
 
+Node Top100Children[] = {
+                          { NODE_TYPE_SONG_TOP100,  1, 10504 },
+                          { NODE_TYPE_ALBUM_TOP100, 2, 10505 },
+                        };
+
 CDirectoryNodeTop100::CDirectoryNodeTop100(const CStdString& strName, CDirectoryNode* pParent)
   : CDirectoryNode(NODE_TYPE_TOP100, strName, pParent)
 {
 
 }
 
-NODE_TYPE CDirectoryNodeTop100::GetChildType()
+NODE_TYPE CDirectoryNodeTop100::GetChildType() const
 {
-  if (GetName()=="1")
-    return NODE_TYPE_SONG_TOP100;
-  else if (GetName()=="2")
-    return NODE_TYPE_ALBUM_TOP100;
+  for (unsigned int i = 0; i < sizeof(Top100Children) / sizeof(Node); ++i)
+    if (GetID() == Top100Children[i].id)
+      return Top100Children[i].node;
 
   return NODE_TYPE_NONE;
 }
 
-bool CDirectoryNodeTop100::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeTop100::GetLocalizedName() const
 {
-  vector<CStdString> vecRoot;
-  vecRoot.push_back(g_localizeStrings.Get(10504));  // Top 100 Songs
-  vecRoot.push_back(g_localizeStrings.Get(10505));  // Top 100 Albums
+  for (unsigned int i = 0; i < sizeof(Top100Children) / sizeof(Node); ++i)
+    if (GetID() == Top100Children[i].id)
+      return g_localizeStrings.Get(Top100Children[i].label);
+  return "";
+}
 
-  for (int i = 0; i < (int)vecRoot.size(); ++i)
+bool CDirectoryNodeTop100::GetContent(CFileItemList& items) const
+{
+  for (unsigned int i = 0; i < sizeof(Top100Children) / sizeof(Node); ++i)
   {
-    CFileItemPtr pItem(new CFileItem(vecRoot[i]));
+    CFileItemPtr pItem(new CFileItem(g_localizeStrings.Get(Top100Children[i].label)));
     CStdString strDir;
-    strDir.Format("%i/", i+1);
+    strDir.Format("%ld/", Top100Children[i].id);
     pItem->m_strPath += BuildPath() + strDir;
     pItem->m_bIsFolder = true;
     items.Add(pItem);
index 566f637..8802a58 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeTop100(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 50cd536..5548463 100644 (file)
@@ -31,12 +31,17 @@ CDirectoryNodeYear::CDirectoryNodeYear(const CStdString& strName, CDirectoryNode
 
 }
 
-NODE_TYPE CDirectoryNodeYear::GetChildType()
+NODE_TYPE CDirectoryNodeYear::GetChildType() const
 {
   return NODE_TYPE_YEAR_ALBUM;
 }
 
-bool CDirectoryNodeYear::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeYear::GetLocalizedName() const
+{
+  return GetName();
+}
+
+bool CDirectoryNodeYear::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index bbe886d..12c6caf 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeYear(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index fc1f6d0..e441bb5 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeYearAlbum::CDirectoryNodeYearAlbum(const CStdString& strName, CDir
 
 }
 
-NODE_TYPE CDirectoryNodeYearAlbum::GetChildType()
+NODE_TYPE CDirectoryNodeYearAlbum::GetChildType() const
 {
   if (GetName()=="-1")
     return NODE_TYPE_YEAR_SONG;
@@ -39,7 +39,17 @@ NODE_TYPE CDirectoryNodeYearAlbum::GetChildType()
   return NODE_TYPE_SONG;
 }
 
-bool CDirectoryNodeYearAlbum::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeYearAlbum::GetLocalizedName() const
+{
+  if (GetID() == -1)
+    return g_localizeStrings.Get(15102); // All Albums
+  CMusicDatabase db;
+  if (db.Open())
+    return db.GetAlbumById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeYearAlbum::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index 130f077..b0028ac 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeYearAlbum(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 828a1d4..8d991ac 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeYearSong::CDirectoryNodeYearSong(const CStdString& strName, CDirec
 
 }
 
-bool CDirectoryNodeYearSong::GetContent(CFileItemList& items)
+bool CDirectoryNodeYearSong::GetContent(CFileItemList& items) const
 {
   CMusicDatabase musicdatabase;
   if (!musicdatabase.Open())
index ed15293..47f087b 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeYearSong(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
     };
   }
 }
index ecceece..819ec6c 100644 (file)
@@ -25,6 +25,7 @@
 #include "FileItem.h"
 #include "utils/log.h"
 #include "utils/TimeUtils.h"
+#include "guilib/LocalizeStrings.h"
 
 using namespace XFILE;
 
@@ -55,6 +56,7 @@ bool CMusicSearchDirectory::GetDirectory(const CStdString& strPath, CFileItemLis
   db.Close();
   CLog::Log(LOGDEBUG, "%s (%s) took %u ms",
             __FUNCTION__, strPath.c_str(), CTimeUtils::GetTimeMS() - time);
+  items.SetLabel(g_localizeStrings.Get(137)); // Search
   return true;
 }
 
index 0d2b441..f044088 100644 (file)
@@ -111,6 +111,7 @@ namespace XFILE
         items.SetContent("musicvideos");
       playlist.SetType(type);
     }
+    items.SetLabel(playlist.GetName());
     // go through and set the playlist order
     for (int i = 0; i < items.Size(); i++)
     {
index f63fc5b..12eaa0c 100644 (file)
@@ -61,6 +61,7 @@ bool CVideoDatabaseDirectory::GetDirectory(const CStdString& strPath, CFileItemL
         item->SetIconImage(strImage);
     }
   }
+  items.SetLabel(pNode->GetLocalizedName());
 
   return bResult;
 }
@@ -148,30 +149,21 @@ bool CVideoDatabaseDirectory::GetLabel(const CStdString& strDirectory, CStdStrin
     return false;
 
   // get genre
-  CStdString strTemp;
   if (params.GetGenreId() != -1)
-  {
-    videodatabase.GetGenreById(params.GetGenreId(), strTemp);
-    strLabel += strTemp;
-  }
+    strLabel += videodatabase.GetGenreById(params.GetGenreId());
 
   // get country
   if (params.GetCountryId() != -1)
-  {
-    videodatabase.GetCountryById(params.GetCountryId(), strTemp);
-    strLabel += strTemp;
-  }
+    strLabel += videodatabase.GetCountryById(params.GetCountryId());
 
   // get set
   if (params.GetSetId() != -1)
-  {
-    videodatabase.GetSetById(params.GetSetId(), strTemp);
-    strLabel += strTemp;
-  }
+    strLabel += videodatabase.GetSetById(params.GetSetId());
 
   // get year
   if (params.GetYear() != -1)
   {
+    CStdString strTemp;
     strTemp.Format("%i",params.GetYear());
     if (!strLabel.IsEmpty())
       strLabel += " / ";
index f6c9fc9..8ec883f 100644 (file)
@@ -160,19 +160,29 @@ CDirectoryNode* CDirectoryNode::CreateNode(NODE_TYPE Type, const CStdString& str
 }
 
 //  Current node name
-const CStdString& CDirectoryNode::GetName()
+const CStdString& CDirectoryNode::GetName() const
 {
   return m_strName;
 }
 
+int CDirectoryNode::GetID() const
+{
+  return atoi(m_strName.c_str());
+}
+
+CStdString CDirectoryNode::GetLocalizedName() const
+{
+  return "";
+}
+
 //  Current node type
-NODE_TYPE CDirectoryNode::GetType()
+NODE_TYPE CDirectoryNode::GetType() const
 {
   return m_Type;
 }
 
 //  Return the parent directory node or NULL, if there is no
-CDirectoryNode* CDirectoryNode::GetParent()
+CDirectoryNode* CDirectoryNode::GetParent() const
 {
   return m_pParent;
 }
@@ -185,13 +195,13 @@ void CDirectoryNode::RemoveParent()
 //  should be overloaded by a derived class
 //  to get the content of a node. Will be called
 //  by GetChilds() of a parent node
-bool CDirectoryNode::GetContent(CFileItemList& items)
+bool CDirectoryNode::GetContent(CFileItemList& items) const
 {
   return false;
 }
 
 //  Creates a videodb url
-CStdString CDirectoryNode::BuildPath()
+CStdString CDirectoryNode::BuildPath() const
 {
   CStdStringArray array;
 
@@ -218,7 +228,7 @@ CStdString CDirectoryNode::BuildPath()
 //  Collects Query params from this and all parent nodes. If a NODE_TYPE can
 //  be used as a database parameter, it will be added to the
 //  params object.
-void CDirectoryNode::CollectQueryParams(CQueryParams& params)
+void CDirectoryNode::CollectQueryParams(CQueryParams& params) const
 {
   params.SetQueryParam(m_Type, m_strName);
 
@@ -232,7 +242,7 @@ void CDirectoryNode::CollectQueryParams(CQueryParams& params)
 
 //  Should be overloaded by a derived class.
 //  Returns the NODE_TYPE of the child nodes.
-NODE_TYPE CDirectoryNode::GetChildType()
+NODE_TYPE CDirectoryNode::GetChildType() const
 {
   return NODE_TYPE_NONE;
 }
@@ -266,7 +276,7 @@ bool CDirectoryNode::GetChilds(CFileItemList& items)
 
 //  Add an "* All ..." folder to the CFileItemList
 //  depending on the child node
-void CDirectoryNode::AddQueuingFolder(CFileItemList& items)
+void CDirectoryNode::AddQueuingFolder(CFileItemList& items) const
 {
   CFileItemPtr pItem;
 
@@ -326,7 +336,7 @@ void CDirectoryNode::AddQueuingFolder(CFileItemList& items)
   }
 }
 
-bool CDirectoryNode::CanCache()
+bool CDirectoryNode::CanCache() const
 {
   //  Only cache the directorys in the root
   //NODE_TYPE childnode=GetChildType();
index f0bfb2b..8a51a50 100644 (file)
@@ -57,6 +57,12 @@ namespace XFILE
       NODE_TYPE_COUNTRY
     } NODE_TYPE;
 
+    typedef struct {
+      NODE_TYPE node;
+      int       id;
+      int       label;
+    } Node;
+    
     class CDirectoryNode
     {
     public:
@@ -64,29 +70,31 @@ namespace XFILE
       static void GetDatabaseInfo(const CStdString& strPath, CQueryParams& params);
       virtual ~CDirectoryNode();
 
-      NODE_TYPE GetType();
+      NODE_TYPE GetType() const;
 
       bool GetChilds(CFileItemList& items);
-      virtual NODE_TYPE GetChildType();
+      virtual NODE_TYPE GetChildType() const;
+      virtual CStdString GetLocalizedName() const;
 
-      CDirectoryNode* GetParent();
+      CDirectoryNode* GetParent() const;
 
-      bool CanCache();
+      bool CanCache() const;
     protected:
       CDirectoryNode(NODE_TYPE Type, const CStdString& strName, CDirectoryNode* pParent);
       static CDirectoryNode* CreateNode(NODE_TYPE Type, const CStdString& strName, CDirectoryNode* pParent);
 
-      void CollectQueryParams(CQueryParams& params);
+      void CollectQueryParams(CQueryParams& params) const;
 
-      const CStdString& GetName();
+      const CStdString& GetName() const;
+      int GetID() const;
       void RemoveParent();
 
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
 
-      CStdString BuildPath();
+      CStdString BuildPath() const;
 
     private:
-      void AddQueuingFolder(CFileItemList& items);
+      void AddQueuingFolder(CFileItemList& items) const;
 
     private:
       NODE_TYPE m_Type;
index a66d5f5..3245521 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeActor::CDirectoryNodeActor(const CStdString& strName, CDirectoryNo
 
 }
 
-NODE_TYPE CDirectoryNodeActor::GetChildType()
+NODE_TYPE CDirectoryNodeActor::GetChildType() const
 {
   CQueryParams params;
   CollectQueryParams(params);
@@ -43,7 +43,15 @@ NODE_TYPE CDirectoryNodeActor::GetChildType()
   return NODE_TYPE_TITLE_TVSHOWS;
 }
 
-bool CDirectoryNodeActor::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeActor::GetLocalizedName() const
+{
+  CVideoDatabase db;
+  if (db.Open())
+    return db.GetPersonById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeActor::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index 9a7fa10..d4a1cca 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeActor(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index bfc79a7..2e38d52 100644 (file)
@@ -31,14 +31,20 @@ CDirectoryNodeCountry::CDirectoryNodeCountry(const CStdString& strName, CDirecto
 
 }
 
-NODE_TYPE CDirectoryNodeCountry::GetChildType()
+NODE_TYPE CDirectoryNodeCountry::GetChildType() const
 {
-  CQueryParams params;
-  CollectQueryParams(params);
   return NODE_TYPE_TITLE_MOVIES;
 }
 
-bool CDirectoryNodeCountry::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeCountry::GetLocalizedName() const
+{
+  CVideoDatabase db;
+  if (db.Open())
+    return db.GetCountryById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeCountry::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index 7a2a7bd..255297e 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeCountry(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 729075d..c505904 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeDirector::CDirectoryNodeDirector(const CStdString& strName, CDirec
 
 }
 
-NODE_TYPE CDirectoryNodeDirector::GetChildType()
+NODE_TYPE CDirectoryNodeDirector::GetChildType() const
 {
   CQueryParams params;
   CollectQueryParams(params);
@@ -43,7 +43,15 @@ NODE_TYPE CDirectoryNodeDirector::GetChildType()
   return NODE_TYPE_TITLE_TVSHOWS;
 }
 
-bool CDirectoryNodeDirector::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeDirector::GetLocalizedName() const
+{
+  CVideoDatabase db;
+  if (db.Open())
+    return db.GetPersonById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeDirector::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index 4888ec2..121e5b4 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeDirector(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 65399a1..3c1f1ec 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeEpisodes::CDirectoryNodeEpisodes(const CStdString& strName, CDirec
 
 }
 
-bool CDirectoryNodeEpisodes::GetContent(CFileItemList& items)
+bool CDirectoryNodeEpisodes::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index f1f0ebf..d22a933 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeEpisodes(const CStdString& strEntryName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
     };
   }
 }
index 40c19c4..a7ccbca 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeGenre::CDirectoryNodeGenre(const CStdString& strName, CDirectoryNo
 
 }
 
-NODE_TYPE CDirectoryNodeGenre::GetChildType()
+NODE_TYPE CDirectoryNodeGenre::GetChildType() const
 {
   CQueryParams params;
   CollectQueryParams(params);
@@ -43,7 +43,15 @@ NODE_TYPE CDirectoryNodeGenre::GetChildType()
   return NODE_TYPE_TITLE_TVSHOWS;
 }
 
-bool CDirectoryNodeGenre::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeGenre::GetLocalizedName() const
+{
+  CVideoDatabase db;
+  if (db.Open())
+    return db.GetGenreById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeGenre::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index e939798..6cd78f5 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeGenre(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 94552f1..1d9b7f6 100644 (file)
 using namespace XFILE::VIDEODATABASEDIRECTORY;
 using namespace std;
 
+Node MovieChildren[] = {
+                        { NODE_TYPE_GENRE,        1, 135 },
+                        { NODE_TYPE_TITLE_MOVIES, 2, 369 },
+                        { NODE_TYPE_YEAR,         3, 562 },
+                        { NODE_TYPE_ACTOR,        4, 344 },
+                        { NODE_TYPE_DIRECTOR,     5, 20348 },
+                        { NODE_TYPE_STUDIO,       6, 20388 },
+                        { NODE_TYPE_SETS,         7, 20434 },
+                        { NODE_TYPE_COUNTRY,      8, 20451 },
+                       };
+
 CDirectoryNodeMoviesOverview::CDirectoryNodeMoviesOverview(const CStdString& strName, CDirectoryNode* pParent)
   : CDirectoryNode(NODE_TYPE_MOVIES_OVERVIEW, strName, pParent)
 {
 
 }
 
-NODE_TYPE CDirectoryNodeMoviesOverview::GetChildType()
+NODE_TYPE CDirectoryNodeMoviesOverview::GetChildType() const
 {
-  if (GetName()=="1")
-    return NODE_TYPE_GENRE;
-  else if (GetName()=="2")
-    return NODE_TYPE_TITLE_MOVIES;
-  else if (GetName()=="3")
-    return NODE_TYPE_YEAR;
-  else if (GetName()=="4")
-    return NODE_TYPE_ACTOR;
-  else if (GetName()=="5")
-    return NODE_TYPE_DIRECTOR;
-  else if (GetName()=="6")
-    return NODE_TYPE_STUDIO;
-  else if (GetName()=="7")
-    return NODE_TYPE_SETS;
-  else if (GetName()=="8")
-    return NODE_TYPE_COUNTRY;
-
+  for (unsigned int i = 0; i < sizeof(MovieChildren) / sizeof(Node); ++i)
+    if (GetID() == MovieChildren[i].id)
+      return MovieChildren[i].node;
+  
   return NODE_TYPE_NONE;
 }
 
-bool CDirectoryNodeMoviesOverview::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeMoviesOverview::GetLocalizedName() const
 {
-  vector<pair<const char*, int> > vecRoot;
-  vecRoot.push_back(make_pair("1", 135));  // Genres
-  vecRoot.push_back(make_pair("2", 369));  // Title
-  vecRoot.push_back(make_pair("3", 562));  // Year
-  vecRoot.push_back(make_pair("4", 344));  // Actors
-  vecRoot.push_back(make_pair("5", 20348));  // Directors
-  vecRoot.push_back(make_pair("6", 20388));  // Studios
-  CVideoDatabase db;
-  if (db.Open())
-  {
-    if (db.HasSets())
-      vecRoot.push_back(make_pair("7", 20434));  // Sets
-    db.Close();
-  }
-  vecRoot.push_back(make_pair("8", 20451));  // Countries
+  for (unsigned int i = 0; i < sizeof(MovieChildren) / sizeof(Node); ++i)
+    if (GetID() == MovieChildren[i].id)
+      return g_localizeStrings.Get(MovieChildren[i].label);
+  return "";
+}
 
-  CStdString path = BuildPath();
-  for (unsigned int i = 0; i < vecRoot.size(); ++i)
+bool CDirectoryNodeMoviesOverview::GetContent(CFileItemList& items) const
+{
+  for (unsigned int i = 0; i < sizeof(MovieChildren) / sizeof(Node); ++i)
   {
-    CFileItemPtr pItem(new CFileItem(path + vecRoot[i].first + "/", true));
-    pItem->SetLabel(g_localizeStrings.Get(vecRoot[i].second));
+    if (i == 6)
+    {
+      CVideoDatabase db;
+      if (db.Open() && !db.HasSets())
+        continue;
+    }
+    CStdString path;
+    path.Format("%s%ld/", BuildPath().c_str(), MovieChildren[i].id);
+    CFileItemPtr pItem(new CFileItem(path, true));
+    pItem->SetLabel(g_localizeStrings.Get(MovieChildren[i].label));
     pItem->SetCanQueue(false);
     items.Add(pItem);
   }
index 743b787..6cac7b6 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeMoviesOverview(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index b844498..b873217 100644 (file)
@@ -31,12 +31,20 @@ CDirectoryNodeMusicVideoAlbum::CDirectoryNodeMusicVideoAlbum(const CStdString& s
 
 }
 
-NODE_TYPE CDirectoryNodeMusicVideoAlbum::GetChildType()
+NODE_TYPE CDirectoryNodeMusicVideoAlbum::GetChildType() const
 {
   return NODE_TYPE_TITLE_MUSICVIDEOS;
 }
 
-bool CDirectoryNodeMusicVideoAlbum::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeMusicVideoAlbum::GetLocalizedName() const
+{
+  CVideoDatabase db;
+  if (db.Open())
+    return db.GetMusicVideoAlbumById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeMusicVideoAlbum::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index 8cf2d8a..0827aa3 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeMusicVideoAlbum(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index c1b52b6..a8acc4a 100644 (file)
 
 using namespace XFILE::VIDEODATABASEDIRECTORY;
 
+Node MusicVideoChildren[] = {
+                              { NODE_TYPE_GENRE,             1, 135 },
+                              { NODE_TYPE_TITLE_MOVIES,      2, 369 },
+                              { NODE_TYPE_YEAR,              3, 562 },
+                              { NODE_TYPE_ACTOR,             4, 133 },
+                              { NODE_TYPE_MUSICVIDEOS_ALBUM, 5, 132 },
+                              { NODE_TYPE_DIRECTOR,          6, 20348 },
+                              { NODE_TYPE_STUDIO,            7, 20388 },
+                            };
+
 CDirectoryNodeMusicVideosOverview::CDirectoryNodeMusicVideosOverview(const CStdString& strName, CDirectoryNode* pParent)
   : CDirectoryNode(NODE_TYPE_MUSICVIDEOS_OVERVIEW, strName, pParent)
 {
 
 }
 
-NODE_TYPE CDirectoryNodeMusicVideosOverview::GetChildType()
+NODE_TYPE CDirectoryNodeMusicVideosOverview::GetChildType() const
 {
-  if (GetName()=="1")
-    return NODE_TYPE_GENRE;
-  else if (GetName()=="2")
-    return NODE_TYPE_TITLE_MUSICVIDEOS;
-  else if (GetName()=="3")
-    return NODE_TYPE_YEAR;
-  else if (GetName()=="4")
-    return NODE_TYPE_ACTOR;
-  else if (GetName()=="5")
-    return NODE_TYPE_MUSICVIDEOS_ALBUM;
-  else if (GetName()=="6")
-    return NODE_TYPE_DIRECTOR;
-  else if (GetName()=="7")
-    return NODE_TYPE_STUDIO;
+  for (unsigned int i = 0; i < sizeof(MusicVideoChildren) / sizeof(Node); ++i)
+    if (GetID() == MusicVideoChildren[i].id)
+      return MusicVideoChildren[i].node;
 
   return NODE_TYPE_NONE;
 }
 
-bool CDirectoryNodeMusicVideosOverview::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeMusicVideosOverview::GetLocalizedName() const
 {
-  CStdStringArray vecRoot;
-  vecRoot.push_back(g_localizeStrings.Get(135));  // Genres
-  vecRoot.push_back(g_localizeStrings.Get(369));  // Title
-  vecRoot.push_back(g_localizeStrings.Get(562));  // Year
-  vecRoot.push_back(g_localizeStrings.Get(133));  // Artists
-  vecRoot.push_back(g_localizeStrings.Get(132));  // Albums
-  vecRoot.push_back(g_localizeStrings.Get(20348));  // Directors
-  vecRoot.push_back(g_localizeStrings.Get(20388));  // Studios
+  for (unsigned int i = 0; i < sizeof(MusicVideoChildren) / sizeof(Node); ++i)
+    if (GetID() == MusicVideoChildren[i].id)
+      return g_localizeStrings.Get(MusicVideoChildren[i].label);
+  return "";
+}
 
-  for (int i = 0; i < (int)vecRoot.size(); ++i)
+bool CDirectoryNodeMusicVideosOverview::GetContent(CFileItemList& items) const
+{
+  for (unsigned int i = 0; i < sizeof(MusicVideoChildren) / sizeof(Node); ++i)
   {
-    CFileItemPtr pItem(new CFileItem(vecRoot[i]));
+    CFileItemPtr pItem(new CFileItem(g_localizeStrings.Get(MusicVideoChildren[i].label)));
     CStdString strDir;
-    strDir.Format("%i/", i+1);
+    strDir.Format("%ld/", MusicVideoChildren[i].id);
     pItem->m_strPath = BuildPath() + strDir;
     pItem->m_bIsFolder = true;
     pItem->SetCanQueue(false);
index 566be2a..416f312 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeMusicVideosOverview(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 375082b..312a9db 100644 (file)
 using namespace XFILE::VIDEODATABASEDIRECTORY;
 using namespace std;
 
+
+Node OverviewChildren[] = {
+                            { NODE_TYPE_MOVIES_OVERVIEW,            1, 342 },
+                            { NODE_TYPE_TVSHOWS_OVERVIEW,           2, 20343 },
+                            { NODE_TYPE_MUSICVIDEOS_OVERVIEW,       3, 20389 },
+                            { NODE_TYPE_RECENTLY_ADDED_MOVIES,      4, 20386 },
+                            { NODE_TYPE_RECENTLY_ADDED_EPISODES,    5, 20387 },
+                            { NODE_TYPE_RECENTLY_ADDED_MUSICVIDEOS, 6, 20390 },
+                          };
+
 CDirectoryNodeOverview::CDirectoryNodeOverview(const CStdString& strName, CDirectoryNode* pParent)
   : CDirectoryNode(NODE_TYPE_OVERVIEW, strName, pParent)
 {
 
 }
 
-NODE_TYPE CDirectoryNodeOverview::GetChildType()
+NODE_TYPE CDirectoryNodeOverview::GetChildType() const
 {
-  if (GetName()=="1")
-    return NODE_TYPE_MOVIES_OVERVIEW;
-  else if (GetName()=="2")
-    return NODE_TYPE_TVSHOWS_OVERVIEW;
-  else if (GetName() == "3")
-    return NODE_TYPE_MUSICVIDEOS_OVERVIEW;
-  else if (GetName() == "4")
-    return NODE_TYPE_RECENTLY_ADDED_MOVIES;
-  else if (GetName() == "5")
-    return NODE_TYPE_RECENTLY_ADDED_EPISODES;
-  else if (GetName() == "6")
-    return NODE_TYPE_RECENTLY_ADDED_MUSICVIDEOS;
+  for (unsigned int i = 0; i < sizeof(OverviewChildren) / sizeof(Node); ++i)
+    if (GetID() == OverviewChildren[i].id)
+      return OverviewChildren[i].node;
 
   return NODE_TYPE_NONE;
 }
 
-bool CDirectoryNodeOverview::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeOverview::GetLocalizedName() const
+{
+  for (unsigned int i = 0; i < sizeof(OverviewChildren) / sizeof(Node); ++i)
+    if (GetID() == OverviewChildren[i].id)
+      return g_localizeStrings.Get(OverviewChildren[i].label);
+  return "";
+}
+
+bool CDirectoryNodeOverview::GetContent(CFileItemList& items) const
 {
   CVideoDatabase database;
   database.Open();
index 1f8dc87..23545ab 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeOverview(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 6c7a71e..4780720 100644 (file)
@@ -31,12 +31,12 @@ CDirectoryNodeRecentlyAddedEpisodes::CDirectoryNodeRecentlyAddedEpisodes(const C
 
 }
 
-NODE_TYPE CDirectoryNodeRecentlyAddedEpisodes::GetChildType()
+NODE_TYPE CDirectoryNodeRecentlyAddedEpisodes::GetChildType() const
 {
   return NODE_TYPE_EPISODES;
 }
 
-bool CDirectoryNodeRecentlyAddedEpisodes::GetContent(CFileItemList& items)
+bool CDirectoryNodeRecentlyAddedEpisodes::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index 26bfeec..c803e49 100644 (file)
@@ -31,8 +31,8 @@ namespace XFILE
     public:
       CDirectoryNodeRecentlyAddedEpisodes(const CStdString& strEntryName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
-      virtual NODE_TYPE GetChildType();
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual NODE_TYPE GetChildType() const;
     };
   }
 }
index b0856a1..d61cc84 100644 (file)
@@ -31,12 +31,12 @@ CDirectoryNodeRecentlyAddedMovies::CDirectoryNodeRecentlyAddedMovies(const CStdS
 
 }
 
-NODE_TYPE CDirectoryNodeRecentlyAddedMovies::GetChildType()
+NODE_TYPE CDirectoryNodeRecentlyAddedMovies::GetChildType() const
 {
   return NODE_TYPE_TITLE_MOVIES;
 }
 
-bool CDirectoryNodeRecentlyAddedMovies::GetContent(CFileItemList& items)
+bool CDirectoryNodeRecentlyAddedMovies::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index 41022c9..07848fd 100644 (file)
@@ -31,8 +31,8 @@ namespace XFILE
     public:
       CDirectoryNodeRecentlyAddedMovies(const CStdString& strEntryName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
-      virtual NODE_TYPE GetChildType();
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual NODE_TYPE GetChildType() const;
     };
   }
 }
index e8ee0b1..18a9445 100644 (file)
@@ -31,12 +31,12 @@ CDirectoryNodeRecentlyAddedMusicVideos::CDirectoryNodeRecentlyAddedMusicVideos(c
 
 }
 
-NODE_TYPE CDirectoryNodeRecentlyAddedMusicVideos::GetChildType()
+NODE_TYPE CDirectoryNodeRecentlyAddedMusicVideos::GetChildType() const
 {
   return NODE_TYPE_TITLE_MUSICVIDEOS;
 }
 
-bool CDirectoryNodeRecentlyAddedMusicVideos::GetContent(CFileItemList& items)
+bool CDirectoryNodeRecentlyAddedMusicVideos::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index 6faaf74..39b84eb 100644 (file)
@@ -31,8 +31,8 @@ namespace XFILE
     public:
       CDirectoryNodeRecentlyAddedMusicVideos(const CStdString& strEntryName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
-      virtual NODE_TYPE GetChildType();
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual NODE_TYPE GetChildType() const;
     };
   }
 }
index 30aa5bb..2ca8902 100644 (file)
@@ -29,7 +29,7 @@ CDirectoryNodeRoot::CDirectoryNodeRoot(const CStdString& strName, CDirectoryNode
 
 }
 
-NODE_TYPE CDirectoryNodeRoot::GetChildType()
+NODE_TYPE CDirectoryNodeRoot::GetChildType() const
 {
   return NODE_TYPE_OVERVIEW;
 }
index bea53e9..edd0b11 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeRoot(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
+      virtual NODE_TYPE GetChildType() const;
     };
   }
 }
index 3c6e896..849f967 100644 (file)
@@ -34,12 +34,27 @@ CDirectoryNodeSeasons::CDirectoryNodeSeasons(const CStdString& strName, CDirecto
 
 }
 
-NODE_TYPE CDirectoryNodeSeasons::GetChildType()
+NODE_TYPE CDirectoryNodeSeasons::GetChildType() const
 {
   return NODE_TYPE_EPISODES;
 }
 
-bool CDirectoryNodeSeasons::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeSeasons::GetLocalizedName() const
+{
+  switch (GetID())
+  {
+  case 0:
+    return g_localizeStrings.Get(20381); // Specials
+  case -1:
+    return g_localizeStrings.Get(20366); // All Seasons
+  default:
+    CStdString season;
+    season.Format(g_localizeStrings.Get(20358), GetID()); // Season <season>
+    return season;
+  }
+}
+
+bool CDirectoryNodeSeasons::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index 8e7a026..7bd867b 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeSeasons(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 66599b5..bfba959 100644 (file)
@@ -31,14 +31,20 @@ CDirectoryNodeSets::CDirectoryNodeSets(const CStdString& strName, CDirectoryNode
 
 }
 
-NODE_TYPE CDirectoryNodeSets::GetChildType()
+NODE_TYPE CDirectoryNodeSets::GetChildType() const
 {
-  CQueryParams params;
-  CollectQueryParams(params);
   return NODE_TYPE_TITLE_MOVIES;
 }
 
-bool CDirectoryNodeSets::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeSets::GetLocalizedName() const
+{
+  CVideoDatabase db;
+  if (db.Open())
+    return db.GetSetById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeSets::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index f3a83e9..f208b2a 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeSets(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 37e1354..022c55f 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeStudio::CDirectoryNodeStudio(const CStdString& strName, CDirectory
 
 }
 
-NODE_TYPE CDirectoryNodeStudio::GetChildType()
+NODE_TYPE CDirectoryNodeStudio::GetChildType() const
 {
   CQueryParams params;
   CollectQueryParams(params);
@@ -43,7 +43,15 @@ NODE_TYPE CDirectoryNodeStudio::GetChildType()
   return NODE_TYPE_TITLE_TVSHOWS;
 }
 
-bool CDirectoryNodeStudio::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeStudio::GetLocalizedName() const
+{
+  CVideoDatabase db;
+  if (db.Open())
+    return db.GetStudioById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeStudio::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index ca39390..92efbc5 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeStudio(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 37512cf..07557c7 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeTitleMovies::CDirectoryNodeTitleMovies(const CStdString& strName,
 
 }
 
-bool CDirectoryNodeTitleMovies::GetContent(CFileItemList& items)
+bool CDirectoryNodeTitleMovies::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index 2cebbe1..87039cb 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeTitleMovies(const CStdString& strEntryName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& items) const;
     };
   }
 }
index f6488a9..67b1b86 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeTitleMusicVideos::CDirectoryNodeTitleMusicVideos(const CStdString&
 
 }
 
-bool CDirectoryNodeTitleMusicVideos::GetContent(CFileItemList& items)
+bool CDirectoryNodeTitleMusicVideos::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index 3e8d750..e621029 100644 (file)
@@ -31,7 +31,7 @@ namespace XFILE
     public:
       CDirectoryNodeTitleMusicVideos(const CStdString& strEntryName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
+      virtual bool GetContent(CFileItemList& item) const;
     };
   }
 }
index 58dd1b1..c0f6b3b 100644 (file)
@@ -31,12 +31,20 @@ CDirectoryNodeTitleTvShows::CDirectoryNodeTitleTvShows(const CStdString& strName
 
 }
 
-NODE_TYPE CDirectoryNodeTitleTvShows::GetChildType()
+NODE_TYPE CDirectoryNodeTitleTvShows::GetChildType() const
 {
   return NODE_TYPE_SEASONS;
 }
 
-bool CDirectoryNodeTitleTvShows::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeTitleTvShows::GetLocalizedName() const
+{
+  CVideoDatabase db;
+  if (db.Open())
+    return db.GetTvShowTitleById(GetID());
+  return "";
+}
+
+bool CDirectoryNodeTitleTvShows::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index cb0a836..310b9e9 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeTitleTvShows(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 09e68cc..a1bec75 100644 (file)
 
 using namespace XFILE::VIDEODATABASEDIRECTORY;
 
+Node TvShowChildren[] = {
+                          { NODE_TYPE_GENRE,         1, 135 },
+                          { NODE_TYPE_TITLE_TVSHOWS, 2, 369 },
+                          { NODE_TYPE_YEAR,          3, 562 },
+                          { NODE_TYPE_ACTOR,         4, 344 },
+                          { NODE_TYPE_STUDIO,        5, 20388 },
+                        };
+
 CDirectoryNodeTvShowsOverview::CDirectoryNodeTvShowsOverview(const CStdString& strName, CDirectoryNode* pParent)
   : CDirectoryNode(NODE_TYPE_TVSHOWS_OVERVIEW, strName, pParent)
 {
 
 }
 
-NODE_TYPE CDirectoryNodeTvShowsOverview::GetChildType()
+NODE_TYPE CDirectoryNodeTvShowsOverview::GetChildType() const
 {
   if (GetName()=="0")
     return NODE_TYPE_EPISODES;
-  else if (GetName()=="1")
-    return NODE_TYPE_GENRE;
-  else if (GetName()=="2")
-    return NODE_TYPE_TITLE_TVSHOWS;
-  else if (GetName()=="3")
-    return NODE_TYPE_YEAR;
-  else if (GetName()=="4")
-    return NODE_TYPE_ACTOR;
-  else if (GetName()=="5")
-    return NODE_TYPE_STUDIO;
+
+  for (unsigned int i = 0; i < sizeof(TvShowChildren) / sizeof(Node); ++i)
+    if (GetID() == TvShowChildren[i].id)
+      return TvShowChildren[i].node;
 
   return NODE_TYPE_NONE;
 }
 
-bool CDirectoryNodeTvShowsOverview::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeTvShowsOverview::GetLocalizedName() const
 {
-  CStdStringArray vecRoot;
-  vecRoot.push_back(g_localizeStrings.Get(135));  // Genres
-  vecRoot.push_back(g_localizeStrings.Get(369));  // Title
-  vecRoot.push_back(g_localizeStrings.Get(562));  // Year
-  vecRoot.push_back(g_localizeStrings.Get(344));  // Actors
-  vecRoot.push_back(g_localizeStrings.Get(20388));// Studios
+  for (unsigned int i = 0; i < sizeof(TvShowChildren) / sizeof(Node); ++i)
+    if (GetID() == TvShowChildren[i].id)
+      return g_localizeStrings.Get(TvShowChildren[i].label);
+  return "";
+}
 
-  for (int i = 0; i < (int)vecRoot.size(); ++i)
+bool CDirectoryNodeTvShowsOverview::GetContent(CFileItemList& items) const
+{
+  for (unsigned int i = 0; i < sizeof(TvShowChildren) / sizeof(Node); ++i)
   {
-    CFileItemPtr pItem(new CFileItem(vecRoot[i]));
+    CFileItemPtr pItem(new CFileItem(g_localizeStrings.Get(TvShowChildren[i].label)));
     CStdString strDir;
-    strDir.Format("%i/", i+1);
+    strDir.Format("%ld/", TvShowChildren[i].id);
     pItem->m_strPath = BuildPath() + strDir;
     pItem->m_bIsFolder = true;
     pItem->SetCanQueue(false);
index 351fee3..187acf0 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeTvShowsOverview(const CStdString& strName, CDirectoryNode* pParent);
     protected:
-      virtual NODE_TYPE GetChildType();
-      virtual bool GetContent(CFileItemList& items);
+      virtual NODE_TYPE GetChildType() const;
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index abcaac0..32787ec 100644 (file)
@@ -31,7 +31,7 @@ CDirectoryNodeYear::CDirectoryNodeYear(const CStdString& strName, CDirectoryNode
 
 }
 
-NODE_TYPE CDirectoryNodeYear::GetChildType()
+NODE_TYPE CDirectoryNodeYear::GetChildType() const
 {
   CQueryParams params;
   CollectQueryParams(params);
@@ -43,7 +43,12 @@ NODE_TYPE CDirectoryNodeYear::GetChildType()
   return NODE_TYPE_TITLE_TVSHOWS;
 }
 
-bool CDirectoryNodeYear::GetContent(CFileItemList& items)
+CStdString CDirectoryNodeYear::GetLocalizedName() const
+{
+  return GetName();
+}
+
+bool CDirectoryNodeYear::GetContent(CFileItemList& items) const
 {
   CVideoDatabase videodatabase;
   if (!videodatabase.Open())
index f308b8a..6259bf9 100644 (file)
@@ -31,8 +31,9 @@ namespace XFILE
     public:
       CDirectoryNodeYear(const CStdString& strEntryName, CDirectoryNode* pParent);
     protected:
-      virtual bool GetContent(CFileItemList& items);
-      virtual NODE_TYPE GetChildType();
+      virtual bool GetContent(CFileItemList& items) const;
+      virtual NODE_TYPE GetChildType() const;
+      virtual CStdString GetLocalizedName() const;
     };
   }
 }
index 8f027a9..837b338 100644 (file)
@@ -100,7 +100,7 @@ bool CVirtualDirectory::GetDirectory(const CStdString& strPath, CFileItemList &i
  \note The parameter \e strPath can not be a share with directory. Eg. "iso9660://dir" will return \e false.
     It must be "iso9660://".
  */
-bool CVirtualDirectory::IsSource(const CStdString& strPath) const
+bool CVirtualDirectory::IsSource(const CStdString& strPath, VECSOURCES *sources, CStdString *name) const
 {
   CStdString strPathCpy = strPath;
   strPathCpy.TrimRight("/");
@@ -113,7 +113,10 @@ bool CVirtualDirectory::IsSource(const CStdString& strPath) const
     strPathCpy.Replace("/", "\\");
 
   VECSOURCES shares;
-  GetSources(shares);
+  if (sources)
+    shares = *sources;
+  else
+    GetSources(shares);
   for (int i = 0; i < (int)shares.size(); ++i)
   {
     const CMediaSource& share = shares.at(i);
@@ -122,7 +125,12 @@ bool CVirtualDirectory::IsSource(const CStdString& strPath) const
     strShare.TrimRight("\\");
     if(URIUtils::IsDOSPath(strShare))
       strShare.Replace("/", "\\");
-    if (strShare == strPathCpy) return true;
+    if (strShare == strPathCpy)
+    {
+      if (name)
+        *name = share.strName;
+      return true;
+    }
   }
   return false;
 }
index f548c8f..7a5c8ab 100644 (file)
@@ -43,7 +43,7 @@ namespace XFILE
       return m_vecSources.size();
     }
 
-    bool IsSource(const CStdString& strPath) const;
+    bool IsSource(const CStdString& strPath, VECSOURCES *sources = NULL, CStdString *name = NULL) const;
     bool IsInSource(const CStdString& strPath) const;
 
     inline const CMediaSource& operator [](const int index) const
index eb9ef20..dfddab3 100644 (file)
@@ -2899,8 +2899,7 @@ bool CMusicDatabase::GetAlbumsNav(const CStdString& strBaseDir, CFileItemList& i
   bool bResult = GetAlbumsByWhere(strBaseDir, strWhere, "", items);
   if (bResult && idArtist != -1)
   {
-    CStdString strArtist;
-    GetArtistById(idArtist,strArtist);
+    CStdString strArtist = GetArtistById(idArtist);
     CStdString strFanart = items.GetCachedThumb(strArtist,g_settings.GetMusicFanartFolder());
     if (CFile::Exists(strFanart))
       items.SetProperty("fanart_image",strFanart);
@@ -3086,8 +3085,7 @@ bool CMusicDatabase::GetSongsNav(const CStdString& strBaseDir, CFileItemList& it
   bool bResult = GetSongsByWhere(strBaseDir, strWhere, items);
   if (bResult && idArtist != -1)
   {
-    CStdString strArtist;
-    GetArtistById(idArtist,strArtist);
+    CStdString strArtist = GetArtistById(idArtist);
     CStdString strFanart = items.GetCachedThumb(strArtist,g_settings.GetMusicFanartFolder());
     if (CFile::Exists(strFanart))
       items.SetProperty("fanart_image",strFanart);
@@ -3520,32 +3518,19 @@ int CMusicDatabase::GetAlbumByName(const CStdString& strAlbum, const CStdString&
   return -1;
 }
 
-bool CMusicDatabase::GetGenreById(int idGenre, CStdString& strGenre)
+CStdString CMusicDatabase::GetGenreById(int id)
 {
-  strGenre = "";
-  try
-  {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
+  return GetSingleValue("genre", "strGenre", PrepareSQL("idGenre=%i", id));
+}
 
-    CStdString strSQL=PrepareSQL("select strGenre from genre where genre.idGenre = %i", idGenre);
+CStdString CMusicDatabase::GetArtistById(int id)
+{
+  return GetSingleValue("artist", "strArtist", PrepareSQL("idArtist=%i", id));
+}
 
-    // run query
-    if (!m_pDS->query(strSQL.c_str())) return false;
-    int iRowsFound = m_pDS->num_rows();
-    if (iRowsFound != 1)
-    {
-      m_pDS->close();
-      return false;
-    }
-    strGenre = m_pDS->fv("genre.strGenre").get_asString();
-    return true;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s failed", __FUNCTION__);
-  }
-  return false;
+CStdString CMusicDatabase::GetAlbumById(int id)
+{
+  return GetSingleValue("album", "strAlbum", PrepareSQL("idAlbum=%i", id));
 }
 
 int CMusicDatabase::GetGenreByName(const CStdString& strGenre)
@@ -3574,62 +3559,6 @@ int CMusicDatabase::GetGenreByName(const CStdString& strGenre)
   return -1;
 }
 
-bool CMusicDatabase::GetArtistById(int idArtist, CStdString& strArtist)
-{
-  strArtist = "";
-  try
-  {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
-
-    CStdString strSQL=PrepareSQL("select strArtist from artist where artist.idArtist = %i", idArtist);
-
-    // run query
-    if (!m_pDS->query(strSQL.c_str())) return false;
-    int iRowsFound = m_pDS->num_rows();
-    if (iRowsFound != 1)
-    {
-      m_pDS->close();
-      return false;
-    }
-    strArtist = m_pDS->fv("artist.strArtist").get_asString();
-    return true;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s failed", __FUNCTION__);
-  }
-  return false;
-}
-
-bool CMusicDatabase::GetAlbumById(int idAlbum, CStdString& strAlbum)
-{
-  strAlbum = "";
-  try
-  {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
-
-    CStdString strSQL=PrepareSQL("select strAlbum from album where album.idAlbum = %ld", idAlbum);
-
-    // run query
-    if (!m_pDS->query(strSQL.c_str())) return false;
-    int iRowsFound = m_pDS->num_rows();
-    if (iRowsFound != 1)
-    {
-      m_pDS->close();
-      return false;
-    }
-    strAlbum = m_pDS->fv("album.strAlbum").get_asString();
-    return true;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s failed", __FUNCTION__);
-  }
-  return false;
-}
-
 bool CMusicDatabase::GetRandomSong(CFileItem* item, int& idSong, const CStdString& strWhere)
 {
   try
index 1cbf96f..d5cb877 100644 (file)
@@ -174,9 +174,9 @@ public:
   bool GetAlbumThumb(int idAlbum, CStdString &thumb);
   bool GetArtistPath(int idArtist, CStdString &path);
 
-  bool GetGenreById(int idGenre, CStdString& strGenre);
-  bool GetArtistById(int idArtist, CStdString& strArtist);
-  bool GetAlbumById(int idAlbum, CStdString& strAlbum);
+  CStdString GetGenreById(int id);
+  CStdString GetArtistById(int id);
+  CStdString GetAlbumById(int id);
 
   int GetArtistByName(const CStdString& strArtist);
   int GetAlbumByName(const CStdString& strAlbum, const CStdString& strArtist="");
index 2dd4467..492cf95 100644 (file)
@@ -200,6 +200,10 @@ bool CGUIWindowMusicSongs::GetDirectory(const CStdString &strDirectory, CFileIte
   // check for .CUE files here.
   items.FilterCueItems();
 
+  CStdString label;
+  if (items.GetLabel().IsEmpty() && m_rootDir.IsSource(items.m_strPath, g_settings.GetSourcesFromType("music"), &label)) 
+    items.SetLabel(label);
+
   return true;
 }
 
index 37fab24..663eaef 100644 (file)
@@ -271,6 +271,18 @@ bool CGUIWindowPictures::OnClick(int iItem)
   return false;
 }
 
+bool CGUIWindowPictures::GetDirectory(const CStdString &strDirectory, CFileItemList& items)
+{
+  if (!CGUIMediaWindow::GetDirectory(strDirectory, items))
+    return false;
+
+  CStdString label;
+  if (items.GetLabel().IsEmpty() && m_rootDir.IsSource(items.m_strPath, g_settings.GetSourcesFromType("pictures"), &label)) 
+    items.SetLabel(label);
+
+  return true;
+}
+
 bool CGUIWindowPictures::OnPlayMedia(int iItem)
 {
   if (m_vecItems->Get(iItem)->IsVideo())
index 953ac14..2e019e8 100644 (file)
@@ -36,6 +36,7 @@ public:
   virtual bool OnMessage(CGUIMessage& message);
 
 protected:
+  virtual bool GetDirectory(const CStdString &strDirectory, CFileItemList& items);
   virtual void OnInfo(int item);
   virtual bool OnClick(int iItem);
   virtual void UpdateButtons();
index 1be4428..d414648 100644 (file)
@@ -5090,56 +5090,39 @@ bool CVideoDatabase::GetRecentlyAddedMusicVideosNav(const CStdString& strBaseDir
   return GetMusicVideosByWhere(strBaseDir, where, items);
 }
 
-bool CVideoDatabase::GetGenreById(int idGenre, CStdString& strGenre)
+CStdString CVideoDatabase::GetGenreById(int id)
 {
-  try
-  {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
+  return GetSingleValue("genre", "strGenre", PrepareSQL("idGenre=%i", id));
+}
 
-    CStdString strSQL=PrepareSQL("select genre.strGenre from genre where genre.idGenre=%i", idGenre);
-    m_pDS->query( strSQL.c_str() );
+CStdString CVideoDatabase::GetCountryById(int id)
+{
+  return GetSingleValue("country", "strCountry", PrepareSQL("idCountry=%i", id));
+}
 
-    bool bResult = false;
-    if (!m_pDS->eof())
-    {
-      strGenre  = m_pDS->fv("genre.strGenre").get_asString();
-      bResult = true;
-    }
-    m_pDS->close();
-    return bResult;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s (%s) failed", __FUNCTION__, strGenre.c_str());
-  }
-  return false;
+CStdString CVideoDatabase::GetSetById(int id)
+{
+  return GetSingleValue("sets", "strSet", PrepareSQL("idSet=%i", id));
 }
 
-bool CVideoDatabase::GetCountryById(int idCountry, CStdString& strCountry)
+CStdString CVideoDatabase::GetPersonById(int id)
 {
-  try
-  {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
+  return GetSingleValue("actors", "strActor", PrepareSQL("idActor=%i", id));
+}
 
-    CStdString strSQL=PrepareSQL("select country.strCountry from country where country.idCountry=%i", idCountry);
-    m_pDS->query( strSQL.c_str() );
+CStdString CVideoDatabase::GetStudioById(int id)
+{
+  return GetSingleValue("studio", "strStudio", PrepareSQL("idStudio=%i", id));
+}
 
-    bool bResult = false;
-    if (!m_pDS->eof())
-    {
-      strCountry  = m_pDS->fv("country.strCountry").get_asString();
-      bResult = true;
-    }
-    m_pDS->close();
-    return bResult;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s (%s) failed", __FUNCTION__, strCountry.c_str());
-  }
-  return false;
+CStdString CVideoDatabase::GetTvShowTitleById(int id)
+{
+  return GetSingleValue("tvshow", PrepareSQL("c%02d", VIDEODB_ID_TV_TITLE), PrepareSQL("idShow=%i", id));
+}
+
+CStdString CVideoDatabase::GetMusicVideoAlbumById(int id)
+{
+  return GetSingleValue("musicvideo", PrepareSQL("c%02d", VIDEODB_ID_MUSICVIDEO_ALBUM), PrepareSQL("idMVideo=%i", id));
 }
 
 bool CVideoDatabase::HasSets() const
@@ -5161,32 +5144,6 @@ bool CVideoDatabase::HasSets() const
   return false;
 }
 
-bool CVideoDatabase::GetSetById(int idSet, CStdString& strSet)
-{
-  try
-  {
-    if (NULL == m_pDB.get()) return false;
-    if (NULL == m_pDS.get()) return false;
-
-    CStdString strSQL=PrepareSQL("select sets.strSet from sets where sets.idSet=%i", idSet);
-    m_pDS->query( strSQL.c_str() );
-
-    bool bResult = false;
-    if (!m_pDS->eof())
-    {
-      strSet  = m_pDS->fv("sets.strSet").get_asString();
-      bResult = true;
-    }
-    m_pDS->close();
-    return bResult;
-  }
-  catch (...)
-  {
-    CLog::Log(LOGERROR, "%s (%s) failed", __FUNCTION__, strSet.c_str());
-  }
-  return false;
-}
-
 int CVideoDatabase::GetTvShowForEpisode(int idEpisode)
 {
   try
index 6386b47..d951dff 100644 (file)
@@ -354,9 +354,13 @@ public:
   bool HasMusicVideoInfo(const CStdString& strFilenameAndPath);
 
   void GetFilePathById(int idMovie, CStdString &filePath, VIDEODB_CONTENT_TYPE iType);
-  bool GetGenreById(int idGenre, CStdString& strGenre);
-  bool GetCountryById(int idCountry, CStdString& strCountry);
-  bool GetSetById(int idSet, CStdString& strSet);
+  CStdString GetGenreById(int id);
+  CStdString GetCountryById(int id);
+  CStdString GetSetById(int id);
+  CStdString GetPersonById(int id);
+  CStdString GetStudioById(int id);
+  CStdString GetTvShowTitleById(int id);
+  CStdString GetMusicVideoAlbumById(int id);
   int GetTvShowForEpisode(int idEpisode);
 
   void GetMovieInfo(const CStdString& strFilenameAndPath, CVideoInfoTag& details, int idMovie = -1);
index 9219fb3..36d7006 100644 (file)
@@ -1563,7 +1563,7 @@ void CGUIWindowVideoBase::UpdateVideoTitle(const CFileItem* pItem)
     database.GetMovieInfo("", detail, pItem->GetVideoInfoTag()->m_iDbId);
   if (iType == VIDEODB_CONTENT_MOVIE_SETS)
   {
-    database.GetSetById(params.GetSetId(),detail.m_strTitle);
+    detail.m_strTitle = database.GetSetById(params.GetSetId());
     iDbId = params.GetSetId();
   }
   if (iType == VIDEODB_CONTENT_EPISODES)
index 69173e0..60550fd 100644 (file)
@@ -396,6 +396,9 @@ bool CGUIWindowVideoNav::GetDirectory(const CStdString &strDirectory, CFileItemL
     }
     else
     { // load info from the database
+      CStdString label;
+      if (items.GetLabel().IsEmpty() && m_rootDir.IsSource(items.m_strPath, g_settings.GetSourcesFromType("video"), &label)) 
+        items.SetLabel(label);
       LoadVideoInfo(items);
     }
   }
index b971d65..748fc3f 100644 (file)
@@ -725,6 +725,9 @@ bool CGUIMediaWindow::Update(const CStdString &strDirectory)
     return false;
   }
 
+  if (items.GetLabel().IsEmpty())
+    items.SetLabel(CUtil::GetTitleFromPath(items.m_strPath, true));
+
   ClearFileItems();
   m_vecItems->Copy(items);