diff options
author | RaK <RaK@e10066b5-e1e2-0310-b819-94efdf66514b> | 2004-02-11 21:55:16 +0000 |
---|---|---|
committer | RaK <RaK@e10066b5-e1e2-0310-b819-94efdf66514b> | 2004-02-11 21:55:16 +0000 |
commit | 68673c2c01a04118570d363c4f3c2bac4e60d9c3 (patch) | |
tree | c272aa2f277a3bc556073005e5db81cfe70ebd6f /muggle-plugin/gd_content_interface.c | |
parent | a02e324cab63796c4f8bd10ce6b390fa1ea9c231 (diff) | |
download | vdr-plugin-muggle-68673c2c01a04118570d363c4f3c2bac4e60d9c3.tar.gz vdr-plugin-muggle-68673c2c01a04118570d363c4f3c2bac4e60d9c3.tar.bz2 |
- playlistsearch eingebaut
- filter search liefert nun in der zweiten
ebene alle tracks des albums/playlist
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/trunk@36 e10066b5-e1e2-0310-b819-94efdf66514b
Diffstat (limited to 'muggle-plugin/gd_content_interface.c')
-rw-r--r-- | muggle-plugin/gd_content_interface.c | 132 |
1 files changed, 128 insertions, 4 deletions
diff --git a/muggle-plugin/gd_content_interface.c b/muggle-plugin/gd_content_interface.c index fe2d946..0a71e23 100644 --- a/muggle-plugin/gd_content_interface.c +++ b/muggle-plugin/gd_content_interface.c @@ -3,8 +3,8 @@ * \brief Data Objects for content (e.g. mp3 files, movies) * for the vdr muggle plugindatabase ******************************************************************** - * \version $Revision: 1.12 $ - * \date $Date: 2004/02/10 23:47:23 $ + * \version $Revision: 1.13 $ + * \date $Date: 2004/02/11 21:55:16 $ * \author Ralf Klueber, Lars von Wedel, Andreas Kellner * \author file owner: $Author: RaK $ * @@ -118,6 +118,28 @@ gdFilterSets::gdFilterSets() m_sets.push_back(set); + m_titles.push_back("Playlist Search"); + + set = new vector<mgFilter*>(); + // title + filter = new mgFilterString("playlist title", ""); set->push_back(filter); + // artist + filter = new mgFilterString("playlist author", ""); set->push_back(filter); + // title + filter = new mgFilterString("title", ""); set->push_back(filter); + // artist + filter = new mgFilterString("artist", "abba"); set->push_back(filter); + // genre + filter = new mgFilterString("genre", ""); set->push_back(filter); + // year-from + filter = new mgFilterInt("year (from)", 1900); set->push_back(filter); + // year-to + filter = new mgFilterInt("year (to)", 2100); set->push_back(filter); + // rating + filter = new mgFilterInt("rating", 0); set->push_back(filter); + + m_sets.push_back(set); + m_activeSetId = 0; m_activeSet = m_sets[m_activeSetId]; } @@ -227,6 +249,59 @@ string gdFilterSets::computeRestriction(int *viewPrt) } *viewPrt = 101; // album -> tracks break; + case 2: // playlist -> tracks + for(vector<mgFilter*>::iterator iter = m_activeSet->begin(); + iter != m_activeSet->end(); iter++) + { + if((*iter)->isSet()) + { + if(strcmp((*iter)->getName(), "playlist title") == 0 ) + { + sql_str = sql_str + " AND playlist.title like '%%" + + (*iter)->getStrVal() + "%%'"; + } + else if(strcmp((*iter)->getName(), "playlist author") == 0 ) + { + sql_str = sql_str + " AND playlist.author like '%%" + + (*iter)->getStrVal() + "%%'"; + } + else if(strcmp((*iter)->getName(), "title") == 0 ) + { + sql_str = sql_str + " AND tracks.title 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 = sql_str + " AND (genre1.genre like '" + + (*iter)->getStrVal() + "'"; + sql_str = sql_str + " OR genre2.genre like '" + + (*iter)->getStrVal() + "')"; + } + else if(strcmp((*iter)->getName(), "year (from)") == 0 ) + { + sql_str = sql_str + " AND tracks.year >= " + (*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 = 102; // playlist -> tracks + break; default: mgWarning("Ignoring Filter Set %i", m_activeSetId); break; @@ -943,6 +1018,12 @@ bool GdTreeNode::isLeafNode() return false; } break; + case 102: + if( m_level <= 1 ) + { + return false; + } + break; default: mgError("View '%d' not yet implemented", m_view); } @@ -1168,6 +1249,37 @@ bool GdTreeNode::expand() return false; } break; + case 102: + if (m_level == 1) { + sprintf(sqlbuff, + "SELECT CONCAT(playlist.title,' (',playlist.author,')')," + " playlist.id" + " FROM playlist,playlistitem,tracks,genre as genre1,genre as genre2" + " WHERE playlist.id=playlistitem.playlist AND" + " playlistitem.trackid=tracks.id AND" + " genre1.id=tracks.genre1 AND" + " genre2.id=tracks.genre2 AND" + " %s" + " ORDER CONCAT(playlist.title,' (',playlist.author,')')," + , m_restriction.c_str()); + idfield = "playlist.id"; + } else if (m_level == 2) { + sprintf(sqlbuff, + "SELECT DISTINCT CONCAT(tracks.artist,' - ',tracks.title)," + " tracks.id" + " FROM playlist,playlistitem,tracks" + " WHERE playlist.id=playlistitem.playlist AND" + " playlistitem.trackid=tracks.id AND" + " %s" + " ORDER playlistitem.tracknumber" + , m_restriction.c_str()); + idfield = "tracks.id"; + } else { + mgWarning("View #%d level %d' not yet implemented", m_view, m_level); + m_expanded = false; + return false; + } + break; default: mgError("View '%d' not yet implemented", m_view); } @@ -1184,8 +1296,15 @@ bool GdTreeNode::expand() // row[1] is the unique id for the new child sprintf(idbuf, "%s_%03d", m_id.c_str(), numchild); - new_restriction = m_restriction + " AND " - + idfield + "= '" + row[1] + "'"; + // Zweite ebene zeigt alle Tracks des Albums und nicht nur + // diese die den Filterkriterien entsprechen. + // das betrifft nur die Search Views! + if(m_view <100) { + new_restriction = m_restriction + " AND " + + idfield + "='" + row[1] + "'"; + } else { + new_restriction = idfield + "='" + row[1] + "'"; + } new_child = new GdTreeNode(this, // parent (string) idbuf, // id @@ -1319,6 +1438,11 @@ mgContentItem* GdTreeNode::getSingleTrack() /* -------------------- begin CVS log --------------------------------- * $Log: gd_content_interface.c,v $ + * Revision 1.13 2004/02/11 21:55:16 RaK + * - playlistsearch eingebaut + * - filter search liefert nun in der zweiten + * ebene alle tracks des albums/playlist + * * Revision 1.12 2004/02/10 23:47:23 RaK * - views konsitent gemacht. siehe FROMJOIN * - isLeafNode angepasst fuer neue views 4,5,100,101 |