Skip to content

Commit

Permalink
[smartplaylist] introduce base class for database query rules, and mo…
Browse files Browse the repository at this point in the history
…ve various functions there
  • Loading branch information
Jonathan Marshall committed Nov 2, 2013
1 parent 41c7c60 commit 6d1c7fa
Show file tree
Hide file tree
Showing 6 changed files with 264 additions and 223 deletions.
140 changes: 70 additions & 70 deletions xbmc/dialogs/GUIDialogMediaFilter.cpp
Expand Up @@ -57,73 +57,73 @@
using namespace std;

static const CGUIDialogMediaFilter::Filter filterList[] = {
{ "movies", FieldTitle, 556, SettingInfo::EDIT, CSmartPlaylistRule::OPERATOR_CONTAINS },
{ "movies", FieldRating, 563, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
//{ "movies", FieldTime, 180, SettingInfo::TODO, CSmartPlaylistRule::TODO },
{ "movies", FieldInProgress, 575, SettingInfo::CHECK, CSmartPlaylistRule::OPERATOR_FALSE },
{ "movies", FieldYear, 562, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "movies", FieldTag, 20459, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "movies", FieldGenre, 515, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "movies", FieldActor, 20337, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "movies", FieldDirector, 20339, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "movies", FieldStudio, 572, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
//{ "movies", FieldLastPlayed, 568, SettingInfo::TODO, CSmartPlaylistRule::TODO },
//{ "movies", FieldDateAdded, 570, SettingInfo::TODO, CSmartPlaylistRule::TODO },

{ "tvshows", FieldTitle, 556, SettingInfo::EDIT, CSmartPlaylistRule::OPERATOR_CONTAINS },
//{ "tvshows", FieldTvShowStatus, 126, SettingInfo::TODO, CSmartPlaylistRule::TODO },
{ "tvshows", FieldRating, 563, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "tvshows", FieldInProgress, 575, SettingInfo::CHECK, CSmartPlaylistRule::OPERATOR_FALSE },
{ "tvshows", FieldYear, 562, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "tvshows", FieldTag, 20459, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "tvshows", FieldGenre, 515, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "tvshows", FieldActor, 20337, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "tvshows", FieldDirector, 20339, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "tvshows", FieldStudio, 572, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
//{ "tvshows", FieldDateAdded, 570, SettingInfo::TODO, CSmartPlaylistRule::TODO },

{ "episodes", FieldTitle, 556, SettingInfo::EDIT, CSmartPlaylistRule::OPERATOR_CONTAINS },
{ "episodes", FieldRating, 563, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "episodes", FieldAirDate, 20416, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "episodes", FieldInProgress, 575, SettingInfo::CHECK, CSmartPlaylistRule::OPERATOR_FALSE },
{ "episodes", FieldActor, 20337, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "episodes", FieldDirector, 20339, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
//{ "episodes", FieldLastPlayed, 568, SettingInfo::TODO, CSmartPlaylistRule::TODO },
//{ "episodes", FieldDateAdded, 570, SettingInfo::TODO, CSmartPlaylistRule::TODO },

{ "musicvideos", FieldTitle, 556, SettingInfo::EDIT, CSmartPlaylistRule::OPERATOR_CONTAINS },
{ "musicvideos", FieldArtist, 557, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "musicvideos", FieldAlbum, 558, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
//{ "musicvideos", FieldTime, 180, SettingInfo::TODO, CSmartPlaylistRule::TODO },
{ "musicvideos", FieldYear, 562, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "musicvideos", FieldTag, 20459, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "musicvideos", FieldGenre, 515, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "musicvideos", FieldDirector, 20339, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "musicvideos", FieldStudio, 572, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
//{ "musicvideos", FieldLastPlayed, 568, SettingInfo::TODO, CSmartPlaylistRule::TODO },
//{ "musicvideos", FieldDateAdded, 570, SettingInfo::TODO, CSmartPlaylistRule::TODO },

{ "artists", FieldArtist, 557, SettingInfo::EDIT, CSmartPlaylistRule::OPERATOR_CONTAINS },
{ "artists", FieldGenre, 515, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },

{ "albums", FieldAlbum, 556, SettingInfo::EDIT, CSmartPlaylistRule::OPERATOR_CONTAINS },
{ "albums", FieldArtist, 557, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "albums", FieldRating, 563, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "albums", FieldAlbumType, 564, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "albums", FieldYear, 562, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "albums", FieldGenre, 515, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "albums", FieldMusicLabel, 21899, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },

{ "songs", FieldTitle, 556, SettingInfo::EDIT, CSmartPlaylistRule::OPERATOR_CONTAINS },
{ "songs", FieldAlbum, 558, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "songs", FieldArtist, 557, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "songs", FieldTime, 180, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "songs", FieldRating, 563, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "songs", FieldYear, 562, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
{ "songs", FieldGenre, 515, SettingInfo::BUTTON, CSmartPlaylistRule::OPERATOR_EQUALS },
{ "songs", FieldPlaycount, 567, SettingInfo::RANGE, CSmartPlaylistRule::OPERATOR_BETWEEN },
//{ "songs", FieldLastPlayed, 568, SettingInfo::TODO, CSmartPlaylistRule::TODO },
//{ "songs", FieldDateAdded, 570, SettingInfo::TODO, CSmartPlaylistRule::TODO },
{ "movies", FieldTitle, 556, SettingInfo::EDIT, CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "movies", FieldRating, 563, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
//{ "movies", FieldTime, 180, SettingInfo::TODO, CDatabaseQueryRule::TODO },
{ "movies", FieldInProgress, 575, SettingInfo::CHECK, CDatabaseQueryRule::OPERATOR_FALSE },
{ "movies", FieldYear, 562, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "movies", FieldTag, 20459, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "movies", FieldGenre, 515, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "movies", FieldActor, 20337, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "movies", FieldDirector, 20339, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "movies", FieldStudio, 572, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
//{ "movies", FieldLastPlayed, 568, SettingInfo::TODO, CDatabaseQueryRule::TODO },
//{ "movies", FieldDateAdded, 570, SettingInfo::TODO, CDatabaseQueryRule::TODO },

{ "tvshows", FieldTitle, 556, SettingInfo::EDIT, CDatabaseQueryRule::OPERATOR_CONTAINS },
//{ "tvshows", FieldTvShowStatus, 126, SettingInfo::TODO, CDatabaseQueryRule::TODO },
{ "tvshows", FieldRating, 563, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "tvshows", FieldInProgress, 575, SettingInfo::CHECK, CDatabaseQueryRule::OPERATOR_FALSE },
{ "tvshows", FieldYear, 562, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "tvshows", FieldTag, 20459, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "tvshows", FieldGenre, 515, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "tvshows", FieldActor, 20337, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "tvshows", FieldDirector, 20339, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "tvshows", FieldStudio, 572, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
//{ "tvshows", FieldDateAdded, 570, SettingInfo::TODO, CDatabaseQueryRule::TODO },

{ "episodes", FieldTitle, 556, SettingInfo::EDIT, CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "episodes", FieldRating, 563, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "episodes", FieldAirDate, 20416, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "episodes", FieldInProgress, 575, SettingInfo::CHECK, CDatabaseQueryRule::OPERATOR_FALSE },
{ "episodes", FieldActor, 20337, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "episodes", FieldDirector, 20339, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
//{ "episodes", FieldLastPlayed, 568, SettingInfo::TODO, CDatabaseQueryRule::TODO },
//{ "episodes", FieldDateAdded, 570, SettingInfo::TODO, CDatabaseQueryRule::TODO },

{ "musicvideos", FieldTitle, 556, SettingInfo::EDIT, CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "musicvideos", FieldArtist, 557, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "musicvideos", FieldAlbum, 558, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
//{ "musicvideos", FieldTime, 180, SettingInfo::TODO, CDatabaseQueryRule::TODO },
{ "musicvideos", FieldYear, 562, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "musicvideos", FieldTag, 20459, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "musicvideos", FieldGenre, 515, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "musicvideos", FieldDirector, 20339, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "musicvideos", FieldStudio, 572, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
//{ "musicvideos", FieldLastPlayed, 568, SettingInfo::TODO, CDatabaseQueryRule::TODO },
//{ "musicvideos", FieldDateAdded, 570, SettingInfo::TODO, CDatabaseQueryRule::TODO },

{ "artists", FieldArtist, 557, SettingInfo::EDIT, CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "artists", FieldGenre, 515, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },

{ "albums", FieldAlbum, 556, SettingInfo::EDIT, CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "albums", FieldArtist, 557, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "albums", FieldRating, 563, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "albums", FieldAlbumType, 564, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "albums", FieldYear, 562, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "albums", FieldGenre, 515, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "albums", FieldMusicLabel, 21899, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },

{ "songs", FieldTitle, 556, SettingInfo::EDIT, CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "songs", FieldAlbum, 558, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "songs", FieldArtist, 557, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "songs", FieldTime, 180, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "songs", FieldRating, 563, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "songs", FieldYear, 562, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
{ "songs", FieldGenre, 515, SettingInfo::BUTTON, CDatabaseQueryRule::OPERATOR_EQUALS },
{ "songs", FieldPlaycount, 567, SettingInfo::RANGE, CDatabaseQueryRule::OPERATOR_BETWEEN },
//{ "songs", FieldLastPlayed, 568, SettingInfo::TODO, CDatabaseQueryRule::TODO },
//{ "songs", FieldDateAdded, 570, SettingInfo::TODO, CDatabaseQueryRule::TODO },
};

#define NUM_FILTERS sizeof(filterList) / sizeof(CGUIDialogMediaFilter::Filter)
Expand Down Expand Up @@ -286,7 +286,7 @@ void CGUIDialogMediaFilter::CreateSettings()
if (filter.rule == NULL)
filter.data = new int(CHECK_ALL);
else
filter.data = new int(filter.rule->m_operator == CSmartPlaylistRule::OPERATOR_TRUE ? CHECK_YES : CHECK_NO);
filter.data = new int(filter.rule->m_operator == CDatabaseQueryRule::OPERATOR_TRUE ? CHECK_YES : CHECK_NO);

vector<pair<int, int> > entries;
entries.push_back(pair<int, int>(CHECK_ALL, CHECK_LABEL_ALL));
Expand Down Expand Up @@ -437,7 +437,7 @@ void CGUIDialogMediaFilter::OnSettingChanged(SettingInfo &setting)
int choice = *(int *)setting.data;
if (choice > CHECK_ALL)
{
CSmartPlaylistRule::SEARCH_OPERATOR ruleOperator = choice == CHECK_YES ? CSmartPlaylistRule::OPERATOR_TRUE : CSmartPlaylistRule::OPERATOR_FALSE;
CDatabaseQueryRule::SEARCH_OPERATOR ruleOperator = choice == CHECK_YES ? CDatabaseQueryRule::OPERATOR_TRUE : CDatabaseQueryRule::OPERATOR_FALSE;
if (filter.rule == NULL)
filter.rule = AddRule(filter.field, ruleOperator);
else
Expand Down Expand Up @@ -773,7 +773,7 @@ void CGUIDialogMediaFilter::OnBrowse(const Filter &filter, CFileItemList &items,
pDialog->Reset();
}

CSmartPlaylistRule* CGUIDialogMediaFilter::AddRule(Field field, CSmartPlaylistRule::SEARCH_OPERATOR ruleOperator /* = CSmartPlaylistRule::OPERATOR_CONTAINS */)
CSmartPlaylistRule* CGUIDialogMediaFilter::AddRule(Field field, CDatabaseQueryRule::SEARCH_OPERATOR ruleOperator /* = CDatabaseQueryRule::OPERATOR_CONTAINS */)
{
CSmartPlaylistRule rule;
rule.m_field = field;
Expand Down
4 changes: 2 additions & 2 deletions xbmc/dialogs/GUIDialogMediaFilter.h
Expand Up @@ -47,7 +47,7 @@ class CGUIDialogMediaFilter : public CGUIDialogSettings, protected ITimerCallbac
Field field;
uint32_t label;
SettingInfo::SETTING_TYPE type;
CSmartPlaylistRule::SEARCH_OPERATOR ruleOperator;
CDatabaseQueryRule::SEARCH_OPERATOR ruleOperator;
void *data;
CSmartPlaylistRule *rule;
int controlIndex;
Expand All @@ -68,7 +68,7 @@ class CGUIDialogMediaFilter : public CGUIDialogSettings, protected ITimerCallbac
void TriggerFilter() const;

void OnBrowse(const Filter &filter, CFileItemList &items, bool countOnly = false);
CSmartPlaylistRule* AddRule(Field field, CSmartPlaylistRule::SEARCH_OPERATOR ruleOperator = CSmartPlaylistRule::OPERATOR_CONTAINS);
CSmartPlaylistRule* AddRule(Field field, CDatabaseQueryRule::SEARCH_OPERATOR ruleOperator = CDatabaseQueryRule::OPERATOR_CONTAINS);
void DeleteRule(Field field);
void GetRange(const Filter &filter, float &min, float &interval, float &max, RANGEFORMATFUNCTION &formatFunction);
bool GetMinMax(const CStdString &table, const CStdString &field, float &min, float &max, const CDatabase::Filter &filter = CDatabase::Filter());
Expand Down

0 comments on commit 6d1c7fa

Please sign in to comment.