aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/resource.language.en_gb/resources/strings.po12
-rw-r--r--xbmc/playlists/SmartPlayList.cpp8
-rw-r--r--xbmc/utils/DatabaseUtils.h2
3 files changed, 21 insertions, 1 deletions
diff --git a/addons/resource.language.en_gb/resources/strings.po b/addons/resource.language.en_gb/resources/strings.po
index a28496c28f..926ebae93f 100644
--- a/addons/resource.language.en_gb/resources/strings.po
+++ b/addons/resource.language.en_gb/resources/strings.po
@@ -12615,7 +12615,17 @@ msgctxt "#21480"
msgid "Use"
msgstr ""
-#empty strings from id 21481 to 21601
+#: xbmc/playlist/SmartPlayList.cpp
+msgctxt "#21481"
+msgid "Audio track count"
+msgstr ""
+
+#: xbmc/playlist/SmartPlayList.cpp
+msgctxt "#21482"
+msgid "Subtitle track count"
+msgstr ""
+
+#empty strings from id 21483 to 21601
#: xbmc/Util.cpp
msgctxt "#21602"
diff --git a/xbmc/playlists/SmartPlayList.cpp b/xbmc/playlists/SmartPlayList.cpp
index b03f22b512..0b551688cf 100644
--- a/xbmc/playlists/SmartPlayList.cpp
+++ b/xbmc/playlists/SmartPlayList.cpp
@@ -103,6 +103,8 @@ static const translateField fields[] = {
{ "audiochannels", FieldAudioChannels, CDatabaseQueryRule::NUMERIC_FIELD, NULL, false, 21444 },
{ "audiocodec", FieldAudioCodec, CDatabaseQueryRule::TEXTIN_FIELD, NULL, false, 21446 },
{ "audiolanguage", FieldAudioLanguage, CDatabaseQueryRule::TEXTIN_FIELD, NULL, false, 21447 },
+ { "audiocount", FieldAudioCount, CDatabaseQueryRule::NUMERIC_FIELD, StringValidation::IsPositiveInteger, false, 21481 },
+ { "subtitlecount", FieldSubtitleCount, CDatabaseQueryRule::NUMERIC_FIELD, StringValidation::IsPositiveInteger, false, 21482 },
{ "subtitlelanguage", FieldSubtitleLanguage, CDatabaseQueryRule::TEXTIN_FIELD, NULL, false, 21448 },
{ "random", FieldRandom, CDatabaseQueryRule::TEXT_FIELD, NULL, false, 590 },
{ "playlist", FieldPlaylist, CDatabaseQueryRule::PLAYLIST_FIELD, NULL, true, 559 },
@@ -430,6 +432,8 @@ std::vector<Field> CSmartPlaylistRule::GetFields(const std::string &type)
{
fields.push_back(FieldVideoResolution);
fields.push_back(FieldAudioChannels);
+ fields.push_back(FieldAudioCount);
+ fields.push_back(FieldSubtitleCount);
fields.push_back(FieldVideoCodec);
fields.push_back(FieldAudioCodec);
fields.push_back(FieldAudioLanguage);
@@ -850,6 +854,10 @@ std::string CSmartPlaylistRule::FormatWhereClause(const std::string &negate, con
query = negate + " EXISTS (SELECT 1 FROM streamdetails WHERE streamdetails.idFile = " + table + ".idFile AND strSubtitleLanguage " + parameter + ")";
else if (m_field == FieldVideoAspectRatio)
query = negate + " EXISTS (SELECT 1 FROM streamdetails WHERE streamdetails.idFile = " + table + ".idFile AND fVideoAspect " + parameter + ")";
+ else if (m_field == FieldAudioCount)
+ query = db.PrepareSQL(negate + " EXISTS (SELECT 1 FROM streamdetails WHERE streamdetails.idFile = " + table + ".idFile AND streamdetails.iStreamtype = %i GROUP BY streamdetails.idFile HAVING COUNT(streamdetails.iStreamType) " + parameter + ")",CStreamDetail::AUDIO);
+ else if (m_field == FieldSubtitleCount)
+ query = db.PrepareSQL(negate + " EXISTS (SELECT 1 FROM streamdetails WHERE streamdetails.idFile = " + table + ".idFile AND streamdetails.iStreamType = %i GROUP BY streamdetails.idFile HAVING COUNT(streamdetails.iStreamType) " + parameter + ")",CStreamDetail::SUBTITLE);
if (m_field == FieldPlaycount && strType != "songs" && strType != "albums" && strType != "tvshows")
{ // playcount IS stored as NULL OR number IN video db
if ((m_operator == OPERATOR_EQUALS && param == "0") ||
diff --git a/xbmc/utils/DatabaseUtils.h b/xbmc/utils/DatabaseUtils.h
index 8dd0e0511e..ff414095ef 100644
--- a/xbmc/utils/DatabaseUtils.h
+++ b/xbmc/utils/DatabaseUtils.h
@@ -59,6 +59,8 @@ typedef enum {
FieldVirtualFolder,
FieldRandom,
FieldDateTaken,
+ FieldAudioCount,
+ FieldSubtitleCount,
// fields retrievable from the database
FieldId,