diff options
-rw-r--r-- | addons/resource.language.en_gb/resources/strings.po | 12 | ||||
-rw-r--r-- | xbmc/playlists/SmartPlayList.cpp | 8 | ||||
-rw-r--r-- | xbmc/utils/DatabaseUtils.h | 2 |
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, |