videolibrary: add tag support for musicvideos
authormontellese <montellese@xbmc.org>
Sun, 9 Sep 2012 14:12:19 +0000 (16:12 +0200)
committermontellese <montellese@xbmc.org>
Sun, 9 Sep 2012 14:12:19 +0000 (16:12 +0200)
system/library/video/musicvideos/tags.xml [new file with mode: 0644]
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeMusicVideosOverview.cpp
xbmc/filesystem/VideoDatabaseDirectory/DirectoryNodeTitleMusicVideos.cpp
xbmc/interfaces/json-rpc/VideoLibrary.cpp
xbmc/video/VideoDatabase.cpp
xbmc/video/VideoDatabase.h
xbmc/video/windows/GUIWindowVideoNav.cpp

diff --git a/system/library/video/musicvideos/tags.xml b/system/library/video/musicvideos/tags.xml
new file mode 100644 (file)
index 0000000..59538bd
--- /dev/null
@@ -0,0 +1,5 @@
+<node order="8" type="folder">
+  <label>20459</label>
+  <path>videodb://3/9</path>
+  <icon>DefaultTags.png</icon>
+</node>
index 073f2d2..b1c8a35 100644 (file)
@@ -34,6 +34,7 @@ Node MusicVideoChildren[] = {
                               { NODE_TYPE_MUSICVIDEOS_ALBUM, 5, 132 },
                               { NODE_TYPE_DIRECTOR,          6, 20348 },
                               { NODE_TYPE_STUDIO,            7, 20388 },
+                              { NODE_TYPE_TAGS,              9, 20459 }
                             };
 
 CDirectoryNodeMusicVideosOverview::CDirectoryNodeMusicVideosOverview(const CStdString& strName, CDirectoryNode* pParent)
index 093a453..7dbf56c 100644 (file)
@@ -40,7 +40,7 @@ bool CDirectoryNodeTitleMusicVideos::GetContent(CFileItemList& items) const
   CQueryParams params;
   CollectQueryParams(params);
 
-  bool bSuccess=videodatabase.GetMusicVideosNav(BuildPath(), items, params.GetGenreId(), params.GetYear(), params.GetActorId(), params.GetDirectorId(),params.GetStudioId(),params.GetAlbumId());
+  bool bSuccess=videodatabase.GetMusicVideosNav(BuildPath(), items, params.GetGenreId(), params.GetYear(), params.GetActorId(), params.GetDirectorId(), params.GetStudioId(), params.GetAlbumId(), params.GetTagId());
 
   videodatabase.Close();
 
index 47e9e0f..420ee6f 100644 (file)
@@ -361,7 +361,7 @@ JSONRPC_STATUS CVideoLibrary::GetMusicVideos(const CStdString &method, ITranspor
   }
 
   CFileItemList items;
-  if (!videodatabase.GetMusicVideosNav(videoUrl.ToString(), items, genreID, year, -1, -1, -1, -1, sorting))
+  if (!videodatabase.GetMusicVideosNav(videoUrl.ToString(), items, genreID, year, -1, -1, -1, -1, -1, sorting))
     return InternalError;
 
   return GetAdditionalMusicVideoDetails(parameterObject, items, result, videodatabase, false);
index 4e36cc4..9c50523 100644 (file)
@@ -2951,6 +2951,8 @@ void CVideoDatabase::DeleteTag(int idTag, VIDEODB_CONTENT_TYPE mediaType)
       type = "movie";
     else if (mediaType == VIDEODB_CONTENT_TVSHOWS)
       type = "tvshow";
+    else if (mediaType == VIDEODB_CONTENT_MUSICVIDEOS)
+      type = "musicvideo";
     else
       return;
 
@@ -4560,6 +4562,8 @@ bool CVideoDatabase::GetTagsNav(const CStdString& strBaseDir, CFileItemList& ite
     mediaType = "movie";
   else if (idContent == VIDEODB_CONTENT_TVSHOWS)
     mediaType = "tvshow";
+  else if (idContent == VIDEODB_CONTENT_MUSICVIDEOS)
+    mediaType = "musicvideo";
   else
     return false;
 
@@ -6091,7 +6095,7 @@ bool CVideoDatabase::GetEpisodesByWhere(const CStdString& strBaseDir, const Filt
   return false;
 }
 
-bool CVideoDatabase::GetMusicVideosNav(const CStdString& strBaseDir, CFileItemList& items, int idGenre, int idYear, int idArtist, int idDirector, int idStudio, int idAlbum, const SortDescription &sortDescription /* = SortDescription() */)
+bool CVideoDatabase::GetMusicVideosNav(const CStdString& strBaseDir, CFileItemList& items, int idGenre, int idYear, int idArtist, int idDirector, int idStudio, int idAlbum, int idTag /* = -1 */, const SortDescription &sortDescription /* = SortDescription() */)
 {
   CVideoDbUrl videoUrl;
   if (!videoUrl.FromString(strBaseDir))
@@ -6107,6 +6111,8 @@ bool CVideoDatabase::GetMusicVideosNav(const CStdString& strBaseDir, CFileItemLi
     videoUrl.AddOption("year", idYear);
   else if (idArtist != -1)
     videoUrl.AddOption("artistid", idArtist);
+  else if (idTag != -1)
+    videoUrl.AddOption("tagid", idTag);
   if (idAlbum != -1)
     videoUrl.AddOption("albumid", idAlbum);
 
@@ -9221,6 +9227,20 @@ bool CVideoDatabase::GetFilter(const CDbUrl &videoUrl, Filter &filter)
     option = options.find("albumid");
     if (option != options.end())
       filter.AppendWhere(PrepareSQL("musicvideoview.c%02d = (select c%02d from musicvideo where idMVideo = %i)", VIDEODB_ID_MUSICVIDEO_ALBUM, VIDEODB_ID_MUSICVIDEO_ALBUM, (int)option->second.asInteger()));
+
+    option = options.find("tagid");
+    if (option != options.end())
+    {
+      filter.AppendJoin(PrepareSQL("join taglinks on taglinks.idMedia = musicvideoview.idMVideo AND taglinks.media_type = 'musicvideo'"));
+      filter.AppendWhere(PrepareSQL("taglinks.idTag = %i", (int)option->second.asInteger()));
+    }
+
+    option = options.find("tag");
+    if (option != options.end())
+    {
+      filter.AppendJoin(PrepareSQL("join taglinks on taglinks.idMedia = musicvideoview.idMVideo AND taglinks.media_type = 'musicvideo' join tag on tag.idTag = taglinks.idTag"));
+      filter.AppendWhere(PrepareSQL("tag.strTag like '%s'", option->second.asString().c_str()));
+    }
   }
   else
     return false;
index 134eb17..fa0ab85 100644 (file)
@@ -592,7 +592,7 @@ public:
   bool GetTvShowsNav(const CStdString& strBaseDir, CFileItemList& items, int idGenre=-1, int idYear=-1, int idActor=-1, int idDirector=-1, int idStudio=-1, int idTag=-1, const SortDescription &sortDescription = SortDescription());
   bool GetSeasonsNav(const CStdString& strBaseDir, CFileItemList& items, int idActor=-1, int idDirector=-1, int idGenre=-1, int idYear=-1, int idShow=-1);
   bool GetEpisodesNav(const CStdString& strBaseDir, CFileItemList& items, int idGenre=-1, int idYear=-1, int idActor=-1, int idDirector=-1, int idShow=-1, int idSeason=-1, const SortDescription &sortDescription = SortDescription());
-  bool GetMusicVideosNav(const CStdString& strBaseDir, CFileItemList& items, int idGenre=-1, int idYear=-1, int idArtist=-1, int idDirector=-1, int idStudio=-1, int idAlbum=-1, const SortDescription &sortDescription = SortDescription());
+  bool GetMusicVideosNav(const CStdString& strBaseDir, CFileItemList& items, int idGenre=-1, int idYear=-1, int idArtist=-1, int idDirector=-1, int idStudio=-1, int idAlbum=-1, int idTag=-1, const SortDescription &sortDescription = SortDescription());
   
   bool GetRecentlyAddedMoviesNav(const CStdString& strBaseDir, CFileItemList& items, unsigned int limit=0);
   bool GetRecentlyAddedEpisodesNav(const CStdString& strBaseDir, CFileItemList& items, unsigned int limit=0);
index 0abc766..162e2bb 100644 (file)
@@ -241,6 +241,8 @@ CStdString CGUIWindowVideoNav::GetQuickpathName(const CStdString& strPath) const
     return "MusicVideoArtists";
   else if (strPath.Equals("videodb://3/5/"))
     return "MusicVideoDirectors";
+  else if (strPath.Equals("videodb://3/9/"))
+    return "MusicVideoTags";
   else if (strPath.Equals("videodb://3/"))
     return "MusicVideos";
   else if (strPath.Equals("videodb://4/"))
@@ -1561,6 +1563,8 @@ CStdString CGUIWindowVideoNav::GetStartFolder(const CStdString &dir)
     return "videodb://3/6/";
   else if (dir.Equals("MusicVideoStudios"))
     return "videodb://3/7/";
+  else if (dir.Equals("MusicVideoTags"))
+    return "videodb://3/9/";
   else if (dir.Equals("MusicVideos"))
     return "videodb://3/";
   else if (dir.Equals("RecentlyAddedMovies"))
@@ -1660,6 +1664,12 @@ bool CGUIWindowVideoNav::GetItemsForTag(const CStdString &strHeading, const std:
     baseDir += "2";
     idColumn = "idShow";
   }
+  else if (type.compare("musicvideo") == 0)
+  {
+    mediaType = MediaTypeMusicVideo;
+    baseDir += "3";
+    idColumn = "idMVideo";
+  }
 
   baseDir += "/2/";
   CVideoDbUrl videoUrl;