diff options
author | MountainMan <MountainMan@e10066b5-e1e2-0310-b819-94efdf66514b> | 2004-02-09 19:27:52 +0000 |
---|---|---|
committer | MountainMan <MountainMan@e10066b5-e1e2-0310-b819-94efdf66514b> | 2004-02-09 19:27:52 +0000 |
commit | d62ff70e806d5992436b1abc04fd479e5623a1fa (patch) | |
tree | 2c2788a6a6012005042c96e98a5bb83fb9c80478 /muggle-plugin/gd_content_interface.c | |
parent | a6cd0e97d915a7e5fcb3db6fd25eaac624b03d57 (diff) | |
download | vdr-plugin-muggle-d62ff70e806d5992436b1abc04fd479e5623a1fa.tar.gz vdr-plugin-muggle-d62ff70e806d5992436b1abc04fd479e5623a1fa.tar.bz2 |
filter set implemented
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/trunk@31 e10066b5-e1e2-0310-b819-94efdf66514b
Diffstat (limited to 'muggle-plugin/gd_content_interface.c')
-rw-r--r-- | muggle-plugin/gd_content_interface.c | 201 |
1 files changed, 129 insertions, 72 deletions
diff --git a/muggle-plugin/gd_content_interface.c b/muggle-plugin/gd_content_interface.c index 2727f4d..806dff6 100644 --- a/muggle-plugin/gd_content_interface.c +++ b/muggle-plugin/gd_content_interface.c @@ -3,10 +3,10 @@ * \brief Data Objects for content (e.g. mp3 files, movies) * for the vdr muggle plugindatabase ******************************************************************** - * \version $Revision: 1.7 $ - * \date $Date: 2004/02/03 00:13:24 $ + * \version $Revision: 1.8 $ + * \date $Date: 2004/02/09 19:27:52 $ * \author Ralf Klueber, Lars von Wedel, Andreas Kellner - * \author file owner: $Author: LarsAC $ + * \author file owner: $Author: MountainMan $ * * DUMMY * Implements main classes of for content items and interfaces to SQL databases @@ -62,82 +62,122 @@ vector<string> *GdGetStoredPlaylists(MYSQL db) return list; } -/*******************************************************************/ -/* class class gdTrackFilters */ -/********************************************************************/ -gdTrackFilters::gdTrackFilters() -{ - clear(); -} -gdTrackFilters::~gdTrackFilters() -{ -} -void gdTrackFilters::clear() +//------------------------------------------------------------------ +//------------------------------------------------------------------ +// +// class gdTrackFilters +// +//------------------------------------------------------------------ +//------------------------------------------------------------------ + +/*! + ******************************************************************* + * \brief constructor, constracts a number >=1 of filter sets + * + * the first set (index 0 ) is active by default + ********************************************************************/ +gdFilterSets::gdFilterSets() { - mgFilter* filter ; - // remove old filters - for(vector<mgFilter*>::iterator iter = m_filters.begin(); - iter != m_filters.end(); iter++) - { - delete (*iter); - } - m_filters.clear(); + mgFilter* filter; + m_titles.push_back("Trackfilter"); + // create an initial set of filters with empty values - // title + vector<mgFilter*>* set = new vector<mgFilter*>(); + + // title filter = new mgFilterString("title", ""); - m_filters.push_back(filter); + set->push_back(filter); // artist filter = new mgFilterString("artist", ""); - m_filters.push_back(filter); + set->push_back(filter); // genre filter = new mgFilterString("genre", ""); - m_filters.push_back(filter); - // year - filter = new mgFilterInt("year", -1); - m_filters.push_back(filter); + set->push_back(filter); + // year-from + filter = new mgFilterInt("year (from)", 0); + set->push_back(filter); + // year-to + filter = new mgFilterInt("year (to)", 9999); + set->push_back(filter); // rating - filter = new mgFilterInt("rating", -1); - m_filters.push_back(filter); + filter = new mgFilterInt("rating", 0); + set->push_back(filter); + + m_sets.push_back(set); + m_activeSetId = 0; + m_activeSet = set; +} + +/*! + ******************************************************************* + * \briefdestructor + ********************************************************************/ +gdFilterSets::~gdFilterSets() +{ + // everything is done in the destructor of the base class } -string gdTrackFilters::CreateSQL() +/*! + ******************************************************************* + * \brief computes the restrictions specified by the active filter set + * \param viewPrt index of the appropriate defualt view + * \return sql string representing the restrictions + ********************************************************************/ +string gdFilterSets::computeRestriction(int *viewPrt) { string sql_str = "1"; - for(vector<mgFilter*>::iterator iter = m_filters.begin(); - iter != m_filters.end(); iter++) + for(vector<mgFilter*>::iterator iter = m_activeSet->begin(); + iter != m_activeSet->end(); iter++) { - if(strcmp((*iter)->getName(), "title") == 0 ) + if((*iter)->isSet()) + { + if(strcmp((*iter)->getName(), "title") == 0 ) { - sql_str = "AND tracks.title like '" - + (*iter)->getStrVal() + "%'"; + sql_str = sql_str + " AND tracks.title like ' " + + (*iter)->getStrVal() + "'"; } - else if(strcmp((*iter)->getName(), "artist") == 0 ) - { - sql_str = "AND tracks.artist like '" - + (*iter)->getStrVal() + "%'"; + else if(strcmp((*iter)->getName(), "artist") == 0 ) + { + sql_str = sql_str + " AND tracks.artist like ''" + + (*iter)->getStrVal() + "'"; } - else if(strcmp((*iter)->getName(), "genre") == 0 ) - { - sql_str = "AND genre.name like '" - + (*iter)->getStrVal() + "%'"; + else if(strcmp((*iter)->getName(), "genre") == 0 ) + { + sql_str = sql_str + " AND genre.name like ''" + + (*iter)->getStrVal() + "'"; } - else if(strcmp((*iter)->getName(), "year") == 0 ) - { - sql_str = "AND tracks.year = " + (*iter)->getStrVal(); + else if(strcmp((*iter)->getName(), "year (from)") == 0 ) + { + sql_str = sql_str + " AND tracks.year >= " + (*iter)->getStrVal(); } - else if(strcmp((*iter)->getName(), "rating") == 0 ) - { - sql_str = "AND tracks.rating >= " + (*iter)->getStrVal(); + else if(strcmp((*iter)->getName(), "year (to)") == 0 ) + { + sql_str = sql_str + " AND tracks.year <= " + (*iter)->getStrVal(); + } + else if(strcmp((*iter)->getName(), "rating") == 0 ) + { + sql_str = sql_str + " AND tracks.rating >= " + (*iter)->getStrVal(); } + else + { + mgWarning("Ignoring unknown filter %s", (*iter)->getName()); + } + } } + *viewPrt = 1; // artist -> album -> title + mgDebug(1, "Applying sql string %s (view=%d)",sql_str.c_str(), *viewPrt); return sql_str; } -/*******************************************************************/ -/* class mgTack */ -/********************************************************************/ +//------------------------------------------------------------------ +//------------------------------------------------------------------ +// +// class mgTack +// +//------------------------------------------------------------------ +//------------------------------------------------------------------ mgGdTrack mgGdTrack::UNDEFINED = mgGdTrack(); /*! @@ -328,14 +368,13 @@ string mgGdTrack::getLabel(int col) } } -string mgGdTrack::getDescription() +vector<mgFilter*> *mgGdTrack::getTrackInfo() { - if(!m_retrieved) - { - readData(); - } - return m_artist + " - " + m_title; - + return new vector<mgFilter*>(); +} +bool mgGdTrack::setTrackInfo(vector<mgFilter*> *info) +{ + return false; } /*! @@ -505,6 +544,13 @@ bool mgGdTrack::writeData() return true; } +//------------------------------------------------------------------ +//------------------------------------------------------------------ +// +// class GdTracklist +// +//------------------------------------------------------------------ +//------------------------------------------------------------------ GdTracklist::GdTracklist(MYSQL db_handle, string restrictions) { MYSQL_RES *result; @@ -531,9 +577,13 @@ GdTracklist::GdTracklist(MYSQL db_handle, string restrictions) } -/*******************************************************************/ -/* class GdPlaylist */ -/********************************************************************/ +//------------------------------------------------------------------ +//------------------------------------------------------------------ +// +// class GdPlaylist +// +//------------------------------------------------------------------ +//------------------------------------------------------------------ /*! ***************************************************************************** @@ -734,9 +784,13 @@ int GdPlaylist::getPlayTimeRemaining() return 0; // dummy } -/*******************************************************************/ -/* class GdTreeNode */ -/*******************************************************************/ +//------------------------------------------------------------------ +//------------------------------------------------------------------ +// +// class GdTreeNode +// +//------------------------------------------------------------------ +//------------------------------------------------------------------ /*! ***************************************************************************** @@ -1078,27 +1132,27 @@ bool GdTreeNode::expand() new_child = new GdTreeNode(this, // parent "1" , // id "Artist -> Album -> Title", // label, - "1"); + m_restriction); m_children.push_back(new_child); new_child = new GdTreeNode(this, // parent "2" , // id "Genre -> Artist -> Album -> Track" , // label, - "1"); + m_restriction); m_children.push_back(new_child); new_child = new GdTreeNode(this, // parent "3" , // id "Artist -> Track" , // label, - "1"); + m_restriction); m_children.push_back(new_child); new_child = new GdTreeNode(this, // parent "4" , // id "Genre -> Year -> Track" , // label, - "1"); + m_restriction); m_children.push_back(new_child); new_child = new GdTreeNode(this, // parent "5" , // id "Album -> Track" , // label, - "1"); + m_restriction); m_children.push_back(new_child); } else { new_child = new GdTreeNode(this, // parent @@ -1199,6 +1253,9 @@ mgContentItem* GdTreeNode::getSingleTrack() /* -------------------- begin CVS log --------------------------------- * $Log: gd_content_interface.c,v $ + * Revision 1.8 2004/02/09 19:27:52 MountainMan + * filter set implemented + * * Revision 1.7 2004/02/03 00:13:24 LarsAC * Improved OSD handling of collapse/back * |