summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaK <RaK@e10066b5-e1e2-0310-b819-94efdf66514b>2004-02-10 23:47:23 +0000
committerRaK <RaK@e10066b5-e1e2-0310-b819-94efdf66514b>2004-02-10 23:47:23 +0000
commita02e324cab63796c4f8bd10ce6b390fa1ea9c231 (patch)
tree8fd91805734ae47849afbd1788dd7054de4524d8
parent17e61a9aec7d55086e00dab2ac3ad2dda3683eec (diff)
downloadvdr-plugin-muggle-a02e324cab63796c4f8bd10ce6b390fa1ea9c231.tar.gz
vdr-plugin-muggle-a02e324cab63796c4f8bd10ce6b390fa1ea9c231.tar.bz2
- views konsitent gemacht. siehe FROMJOIN
- isLeafNode angepasst fuer neue views 4,5,100,101 - like '%abba%' eingebaut - filter ist default mit abba gefuellt, zum leichteren testen. - search results werden jetzt gleich im ROOT expanded git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/trunk@35 e10066b5-e1e2-0310-b819-94efdf66514b
-rw-r--r--muggle-plugin/gd_content_interface.c168
-rwxr-xr-xmuggle-plugin/mg_content_interface.c15
-rw-r--r--muggle-plugin/mg_media.c18
3 files changed, 106 insertions, 95 deletions
diff --git a/muggle-plugin/gd_content_interface.c b/muggle-plugin/gd_content_interface.c
index 03b3929..fe2d946 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.11 $
- * \date $Date: 2004/02/10 01:23:06 $
+ * \version $Revision: 1.12 $
+ * \date $Date: 2004/02/10 23:47:23 $
* \author Ralf Klueber, Lars von Wedel, Andreas Kellner
* \author file owner: $Author: RaK $
*
@@ -88,13 +88,13 @@ gdFilterSets::gdFilterSets()
// title
filter = new mgFilterString("title", ""); set->push_back(filter);
// artist
- filter = new mgFilterString("artist", ""); set->push_back(filter);
+ 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)", 0); set->push_back(filter);
+ filter = new mgFilterInt("year (from)", 1900); set->push_back(filter);
// year-to
- filter = new mgFilterInt("year (to)", 9999); set->push_back(filter);
+ filter = new mgFilterInt("year (to)", 2100); set->push_back(filter);
// rating
filter = new mgFilterInt("rating", 0); set->push_back(filter);
@@ -106,20 +106,20 @@ gdFilterSets::gdFilterSets()
// title
filter = new mgFilterString("album title", ""); set->push_back(filter);
// artist
- filter = new mgFilterString("album artist", ""); set->push_back(filter);
+ filter = new mgFilterString("album artist", "abba"); set->push_back(filter);
// genre
filter = new mgFilterString("genre", ""); set->push_back(filter);
// year-from
- filter = new mgFilterInt("year (from)", 0); set->push_back(filter);
+ filter = new mgFilterInt("year (from)", 1900); set->push_back(filter);
// year-to
- filter = new mgFilterInt("year (to)", 9999); set->push_back(filter);
+ 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 = set;
+ m_activeSet = m_sets[m_activeSetId];
}
/*!
@@ -149,13 +149,13 @@ string gdFilterSets::computeRestriction(int *viewPrt)
{
if(strcmp((*iter)->getName(), "title") == 0 )
{
- sql_str = 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 = sql_str + " AND tracks.artist like '"
- + (*iter)->getStrVal() + "'";
+ sql_str = sql_str + " AND tracks.artist like '%%"
+ + (*iter)->getStrVal() + "%%'";
}
else if(strcmp((*iter)->getName(), "genre") == 0 )
{
@@ -192,13 +192,13 @@ string gdFilterSets::computeRestriction(int *viewPrt)
{
if(strcmp((*iter)->getName(), "album title") == 0 )
{
- sql_str = sql_str + " AND album.title like ' "
- + (*iter)->getStrVal() + "'";
+ sql_str = sql_str + " AND album.title like '%%"
+ + (*iter)->getStrVal() + "%%'";
}
else if(strcmp((*iter)->getName(), "album artist") == 0 )
{
- sql_str = sql_str + " AND album.artist like '"
- + (*iter)->getStrVal() + "'";
+ sql_str = sql_str + " AND album.artist like '%%"
+ + (*iter)->getStrVal() + "%%'";
}
else if(strcmp((*iter)->getName(), "genre") == 0 )
{
@@ -913,12 +913,36 @@ bool GdTreeNode::isLeafNode()
return false;
}
break;
- case 3: // Artist -> Track
+ case 3: // Artist -> Track
+ if( m_level <= 2 )
+ {
+ return false;
+ }
+ break;
+ case 4:
if( m_level <= 2 )
{
return false;
}
break;
+ case 5:
+ if( m_level <= 1 )
+ {
+ return false;
+ }
+ break;
+ case 100:
+ if( m_level <= 0 )
+ {
+ return false;
+ }
+ break;
+ case 101:
+ if( m_level <= 1 )
+ {
+ return false;
+ }
+ break;
default:
mgError("View '%d' not yet implemented", m_view);
}
@@ -949,12 +973,15 @@ bool GdTreeNode::expand()
string labelfield; // human readable db field for the column to be expanded
string idfield; // unique id field for the column to be expanded
- string tables; // stores the db tables used
string new_restriction_field; // field to be restricted by the new level
string new_restriction; // complete restriction str for the current child
string new_label;
GdTreeNode* new_child;
+ string tables; // stores the db tables used
+
+ #define FROMJOIN " FROM tracks, genre as genre1, genre as genre2, album WHERE tracks.sourceid=album.cddbid AND genre1.id=tracks.genre1 AND genre2.id=tracks.genre2 AND %s "
+
if (m_expanded)
{
mgWarning("Node already expanded\n");
@@ -972,25 +999,22 @@ bool GdTreeNode::expand()
case 1: // artist -> album -> title
if(m_level == 1) {
sprintf(sqlbuff,
- "SELECT DISTINCT album.artist,album.artist"
- " FROM album"
- " WHERE %s"
+ "SELECT DISTINCT album.artist,album.artist"
+ FROMJOIN
" ORDER BY album.artist"
, m_restriction.c_str() );
idfield = "album.artist";
} else if(m_level == 2) { // artist -> album
sprintf(sqlbuff,
"SELECT DISTINCT album.title,album.cddbid"
- " FROM album"
- " WHERE %s"
+ FROMJOIN
" ORDER BY album.title"
, m_restriction.c_str() );
idfield = "album.cddbid";
} else if(m_level == 3) { // album -> title
sprintf(sqlbuff,
"SELECT tracks.title,tracks.id"
- " FROM tracks,album"
- " WHERE %s AND tracks.sourceid=album.cddbid"
+ FROMJOIN
" ORDER BY tracks.tracknb"
, m_restriction.c_str() );
idfield = "tracks.id";
@@ -1003,42 +1027,29 @@ bool GdTreeNode::expand()
case 2: // genre -> artist -> album -> track
if(m_level == 1) { // genre
sprintf(sqlbuff,
- "SELECT DISTINCT genre.genre,tracks.genre1"
- " FROM tracks,genre"
- " WHERE (genre.id=tracks.genre1) AND"
- " %s"
- " ORDER BY genre.id"
+ "SELECT DISTINCT genre1.genre,tracks.genre1"
+ FROMJOIN
+ " ORDER BY genre1.id"
, m_restriction.c_str());
idfield = "tracks.genre1";
} else if(m_level == 2) { // genre -> artist
sprintf(sqlbuff,
"SELECT DISTINCT album.artist,album.artist"
- " FROM tracks,genre,album"
- " WHERE (genre.id=tracks.genre1) AND"
- " (album.cddbid=tracks.sourceid) AND"
- " %s"
+ FROMJOIN
" ORDER BY album.artist",
m_restriction.c_str());
idfield = "album.artist";
} else if(m_level == 3) { // genre -> artist -> album
sprintf(sqlbuff,
- "SELECT DISTINCT"
- " album.title,"
- " tracks.sourceid"
- " FROM tracks,genre,album"
- " WHERE (genre.id=tracks.genre1) AND"
- " (album.cddbid=tracks.sourceid) AND"
- " %s"
+ "SELECT DISTINCT album.title,tracks.sourceid"
+ FROMJOIN
" ORDER BY album.title"
, m_restriction.c_str());
idfield = "tracks.sourceid";
} else if(m_level == 4) { // genre -> artist -> album -> track
sprintf(sqlbuff,
"SELECT DISTINCT tracks.title, tracks.id"
- " FROM tracks,genre,album"
- " WHERE (genre.id=tracks.genre1) AND"
- " (album.cddbid=tracks.sourceid) AND"
- " %s"
+ FROMJOIN
" ORDER BY tracks.tracknb"
, m_restriction.c_str());
idfield = "tracks.id";
@@ -1053,18 +1064,14 @@ bool GdTreeNode::expand()
{
sprintf(sqlbuff,
"SELECT DISTINCT tracks.artist,tracks.artist"
- " FROM tracks"
- " WHERE "
- " %s"
+ FROMJOIN
" ORDER BY tracks.artist"
, m_restriction.c_str());
idfield = "tracks.artist";
} else if (m_level == 2) { // Track
sprintf(sqlbuff,
"SELECT DISTINCT tracks.title,tracks.id"
- " FROM tracks, album"
- " WHERE"
- " %s AND tracks.sourceid=album.cddbid"
+ FROMJOIN
" ORDER BY tracks.title"
, m_restriction.c_str());
idfield = "tracks.id";
@@ -1077,30 +1084,24 @@ bool GdTreeNode::expand()
case 4: // Genre -> Year -> Track
if(m_level == 1) { // Genre
sprintf(sqlbuff,
- "SELECT DISTINCT genre.genre,tracks.genre1"
- " FROM genre,tracks"
- " WHERE (genre.id=tracks.genre1) AND"
- " %s"
- " ORDER BY genre.genre"
+ "SELECT DISTINCT genre1.genre,tracks.genre1"
+ FROMJOIN
+ " ORDER BY genre1.genre"
, m_restriction.c_str());
idfield = "tracks.genre1";
} else if (m_level == 2) { // Year
sprintf(sqlbuff,
"SELECT DISTINCT tracks.year,tracks.year"
- " FROM genre,tracks"
- " WHERE (genre.id=tracks.genre1) AND"
- " %s"
+ FROMJOIN
" ORDER BY tracks.year"
, m_restriction.c_str());
idfield = "tracks.year";
} else if (m_level == 3) { // Track
sprintf(sqlbuff,
"SELECT DISTINCT"
- " CONCAT(tracks.artist,' - ',tracks.title) AS title"
- " ,tracks.id"
- " FROM tracks,genre"
- " WHERE (genre.id=tracks.genre1) AND"
- " %s"
+ " CONCAT(tracks.artist,' - ',tracks.title) AS title"
+ " ,tracks.id"
+ FROMJOIN
" ORDER BY tracks.title"
, m_restriction.c_str());
idfield = "tracks.id";
@@ -1116,19 +1117,14 @@ bool GdTreeNode::expand()
"SELECT DISTINCT"
" CONCAT(album.artist,' - ',album.title) AS title,"
" album.cddbid"
- " FROM album"
- " WHERE 1 AND"
- " %s"
+ FROMJOIN
" ORDER BY title"
, m_restriction.c_str());
- idfield = "tracks.genre1";
+ idfield = "tracks.sourceid";
} else if (m_level == 2) { //
sprintf(sqlbuff,
"SELECT DISTINCT tracks.title, tracks.id"
- " FROM tracks,genre,album"
- " WHERE (genre.id=tracks.genre1) AND"
- " (album.cddbid=tracks.sourceid) AND"
- " %s"
+ FROMJOIN
" ORDER BY tracks.tracknb"
, m_restriction.c_str());
idfield = "tracks.id";
@@ -1141,11 +1137,9 @@ bool GdTreeNode::expand()
case 100:
if (m_level == 1) {
sprintf(sqlbuff,
- "SELECT CONCAT(tracks.artist,' - ',tracks.title),tracks.id"
- " FROM tracks,genre as genre1,genre as genre2"
- " WHERE (genre1.id=tracks.genre1 AND"
- " genre2.id=tracks.genre2) AND"
- " %s"
+ "SELECT CONCAT(tracks.artist,' - ',tracks.title),"
+ " tracks.id"
+ FROMJOIN
" ORDER BY CONCAT(tracks.artist,' - ',tracks.title)"
, m_restriction.c_str());
idfield = "tracks.id";
@@ -1157,21 +1151,14 @@ bool GdTreeNode::expand()
"SELECT DISTINCT"
" CONCAT(album.artist,' - ',album.title) as title,"
" album.cddbid"
- " FROM tracks,album,genre as genre1, genre as genre2"
- " WHERE (genre1.id=tracks.genre1 AND"
- " genre2.id=tracks.genre2) AND"
- " %s"
+ FROMJOIN
" ORDER BY CONCAT(album.artist,' - ',album.title)"
, m_restriction.c_str());
idfield = "tracks.sourceid";
} else if (m_level == 2) {
sprintf(sqlbuff,
"SELECT tracks.title,tracks.id"
- " FROM tracks,genre as genre1,genre as genre2,album"
- " WHERE (genre1.id=tracks.genre1 OR"
- " genre2.id=tracks.genre2) AND"
- " (album.cddbid=tracks.sourceid) AND"
- " %s"
+ FROMJOIN
" ORDER BY tracks.tracknb"
, m_restriction.c_str());
idfield = "tracks.id";
@@ -1332,6 +1319,13 @@ mgContentItem* GdTreeNode::getSingleTrack()
/* -------------------- begin CVS log ---------------------------------
* $Log: gd_content_interface.c,v $
+ * Revision 1.12 2004/02/10 23:47:23 RaK
+ * - views konsitent gemacht. siehe FROMJOIN
+ * - isLeafNode angepasst fuer neue views 4,5,100,101
+ * - like '%abba%' eingebaut
+ * - filter ist default mit abba gefuellt, zum leichteren testen.
+ * - search results werden jetzt gleich im ROOT expanded
+ *
* Revision 1.11 2004/02/10 01:23:06 RaK
* Ein fehler beim Tracksearch behoben. geht jetzt, aber nur einmal?!?!
*
diff --git a/muggle-plugin/mg_content_interface.c b/muggle-plugin/mg_content_interface.c
index 0d1f270..c6c2e63 100755
--- a/muggle-plugin/mg_content_interface.c
+++ b/muggle-plugin/mg_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.2 $
- * \date $Date: 2004/02/02 22:48:04 $
+ * \version $Revision: 1.3 $
+ * \date $Date: 2004/02/10 23:47:23 $
* \author Ralf Klueber, Lars von Wedel, Andreas Kellner
- * \author file owner: $Author: MountainMan $
+ * \author file owner: $Author: RaK $
*
* DUMMY
* Implements main classes of for content items and interfaces to SQL databases
@@ -354,7 +354,7 @@ void mgSelectionTreeNode::collapse() // removes all children (recursively)
{
vector <mgSelectionTreeNode*>::iterator iter;
mgSelectionTreeNode* ptr;
-
+
for(iter = m_children.begin(); iter != m_children.end();iter++)
{
ptr = *iter;
@@ -398,6 +398,13 @@ string mgSelectionTreeNode::getRestrictions()
/* -------------------- begin CVS log ---------------------------------
* $Log: mg_content_interface.c,v $
+ * Revision 1.3 2004/02/10 23:47:23 RaK
+ * - views konsitent gemacht. siehe FROMJOIN
+ * - isLeafNode angepasst fuer neue views 4,5,100,101
+ * - like '%abba%' eingebaut
+ * - filter ist default mit abba gefuellt, zum leichteren testen.
+ * - search results werden jetzt gleich im ROOT expanded
+ *
* Revision 1.2 2004/02/02 22:48:04 MountainMan
* added CVS $Log
*
diff --git a/muggle-plugin/mg_media.c b/muggle-plugin/mg_media.c
index 54fd32c..3a2a874 100644
--- a/muggle-plugin/mg_media.c
+++ b/muggle-plugin/mg_media.c
@@ -3,10 +3,10 @@
* \brief Top level access to media in vdr plugin muggle
* for the vdr muggle plugindatabase
********************************************************************
- * \version $Revision: 1.9 $
- * \date $Date: 2004/02/09 19:27:52 $
+ * \version $Revision: 1.10 $
+ * \date $Date: 2004/02/10 23:47:23 $
* \author Ralf Klueber, Lars von Wedel, Andreas Kellner
- * \author file owner: $Author: MountainMan $
+ * \author file owner: $Author: RaK $
*
*
*/
@@ -691,6 +691,7 @@ void mgMedia::clearActiveFilter()
mgSelectionTreeNode *mgMedia::applyActiveFilter()
{
int view;
+ GdTreeNode* node;
switch(m_mediatype)
{
@@ -701,7 +702,9 @@ mgSelectionTreeNode *mgMedia::applyActiveFilter()
}
m_filters->accept();
m_sql_filter = m_filters->computeRestriction(&view);
- return new GdTreeNode(m_db, view, m_sql_filter);
+ node = new GdTreeNode(m_db, view, m_sql_filter);
+ node->expand();
+ return node->getChildren()[0];
}
return NULL;
}
@@ -709,6 +712,13 @@ mgSelectionTreeNode *mgMedia::applyActiveFilter()
/* -------------------- begin CVS log ---------------------------------
* $Log: mg_media.c,v $
+ * Revision 1.10 2004/02/10 23:47:23 RaK
+ * - views konsitent gemacht. siehe FROMJOIN
+ * - isLeafNode angepasst fuer neue views 4,5,100,101
+ * - like '%abba%' eingebaut
+ * - filter ist default mit abba gefuellt, zum leichteren testen.
+ * - search results werden jetzt gleich im ROOT expanded
+ *
* Revision 1.9 2004/02/09 19:27:52 MountainMan
* filter set implemented
*