smartplaylist: integrate tags
authormontellese <montellese@xbmc.org>
Sat, 30 Jun 2012 12:07:08 +0000 (14:07 +0200)
committermontellese <montellese@xbmc.org>
Sun, 8 Jul 2012 21:36:04 +0000 (23:36 +0200)
xbmc/dialogs/GUIDialogSmartPlaylistRule.cpp
xbmc/playlists/SmartPlayList.cpp
xbmc/utils/DatabaseUtils.h

index 29856b4..1ca5f02 100644 (file)
@@ -240,6 +240,14 @@ void CGUIDialogSmartPlaylistRule::OnBrowse()
     videodatabase.GetSetsNav("videodb://1/7/", items, VIDEODB_CONTENT_MOVIES);
     iLabel = 20434;
   }
+  else if (m_rule.m_field == FieldTag)
+  {
+    if (m_type == "movies")
+      videodatabase.GetTagsNav("videodb://1/9/", items, VIDEODB_CONTENT_MOVIES);
+    else
+      return;
+    iLabel = 20459;
+  }
   else
   { // TODO: Add browseability in here.
     assert(false);
index 79aecf2..e66b0e8 100644 (file)
@@ -98,7 +98,8 @@ static const translateField fields[] = {
   { "audiolanguage",     FieldAudioLanguage,           SortByAudioLanguage,            CSmartPlaylistRule::TEXTIN_FIELD,     21447 },
   { "subtitlelanguage",  FieldSubtitleLanguage,        SortBySubtitleLanguage,         CSmartPlaylistRule::TEXTIN_FIELD,     21448 },
   { "random",            FieldRandom,                  SortByRandom,                   CSmartPlaylistRule::TEXT_FIELD,       590 },
-  { "playlist",          FieldPlaylist,                SortByPlaylistOrder,            CSmartPlaylistRule::PLAYLIST_FIELD,   559 }
+  { "playlist",          FieldPlaylist,                SortByPlaylistOrder,            CSmartPlaylistRule::PLAYLIST_FIELD,   559 },
+  { "tag",               FieldTag,                     SortByNone,                     CSmartPlaylistRule::BROWSEABLE_FIELD, 20459 }
 };
 
 #define NUM_FIELDS sizeof(fields) / sizeof(translateField)
@@ -382,6 +383,7 @@ vector<Field> CSmartPlaylistRule::GetFields(const CStdString &type)
     fields.push_back(FieldFilename);
     fields.push_back(FieldPath);
     fields.push_back(FieldSet);
+    fields.push_back(FieldTag);
     fields.push_back(FieldDateAdded);
     isVideo = true;
   }
@@ -716,6 +718,8 @@ CStdString CSmartPlaylistRule::GetWhereClause(CDatabase &db, const CStdString& s
         query = table + ".idFile " + negate + " IN (SELECT idFile FROM bookmark WHERE type = 1)";
       else if (m_field == FieldSet)
         query = GetField(FieldId, strType) + negate + " IN (SELECT idMovie FROM setlinkmovie JOIN sets ON sets.idSet=setlinkmovie.idSet WHERE sets.strSet" + parameter + ")";
+      else if (m_field == FieldTag)
+        query = GetField(FieldId, strType) + negate + " IN (SELECT idMedia FROM taglinks JOIN tag ON tag.idTag = taglinks.idTag WHERE tag.strTag" + parameter + " AND taglinks.media_type = 'movie')";
     }
     else if (strType == "musicvideos")
     {
index 3cba581..3fb8457 100644 (file)
@@ -109,7 +109,8 @@ typedef enum {
   FieldAudioCodec,
   FieldAudioLanguage,
   FieldSubtitleLanguage,
-  FieldProductionCode
+  FieldProductionCode,
+  FieldTag
 } Field;
 
 typedef std::set<Field> Fields;