summaryrefslogtreecommitdiff
path: root/muggle-plugin/gd_content_interface.c
diff options
context:
space:
mode:
authorRaK <RaK@e10066b5-e1e2-0310-b819-94efdf66514b>2004-02-11 21:55:16 +0000
committerRaK <RaK@e10066b5-e1e2-0310-b819-94efdf66514b>2004-02-11 21:55:16 +0000
commit68673c2c01a04118570d363c4f3c2bac4e60d9c3 (patch)
treec272aa2f277a3bc556073005e5db81cfe70ebd6f /muggle-plugin/gd_content_interface.c
parenta02e324cab63796c4f8bd10ce6b390fa1ea9c231 (diff)
downloadvdr-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.c132
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