summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gd_content_interface.c238
-rw-r--r--mg_filters.c7
-rw-r--r--vdr_menu.c17
3 files changed, 113 insertions, 149 deletions
diff --git a/gd_content_interface.c b/gd_content_interface.c
index bcaf500..7913744 100644
--- a/gd_content_interface.c
+++ b/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.15 $
- * \date $Date: 2004/02/12 09:15:07 $
+ * \version $Revision: 1.16 $
+ * \date $Date: 2004/02/14 22:02:45 $
* \author Ralf Klueber, Lars von Wedel, Andreas Kellner
- * \author file owner: $Author: LarsAC $
+ * \author file owner: $Author: RaK $
*
* DUMMY
* Implements main classes of for content items and interfaces to SQL databases
@@ -40,7 +40,7 @@ int GdInitDatabase(MYSQL *db)
}
if(mysql_real_connect(db,"localhost","root","",
- "GiantDisc2",0,NULL,0) == NULL)
+ "GiantDisc",0,NULL,0) == NULL)
{
return -2;
}
@@ -80,23 +80,29 @@ gdFilterSets::gdFilterSets()
{
mgFilter* filter;
vector<mgFilter*>* set;
+ vector<string>* rating;
m_titles.push_back("Track Search");
// create an initial set of filters with empty values
set = new vector<mgFilter*>();
+ rating = new vector<string>();
+ rating->push_back("-");
+ rating->push_back("O");
+ rating->push_back("+");
+ rating->push_back("++");
// title
filter = new mgFilterString("title", ""); set->push_back(filter);
// artist
- filter = new mgFilterString("artist", "abba"); set->push_back(filter);
+ filter = new mgFilterString("artist", ""); 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);
+ // rating
+ filter = new mgFilterChoice("rating", 1, rating); set->push_back(filter);
m_sets.push_back(set);
@@ -106,7 +112,7 @@ gdFilterSets::gdFilterSets()
// title
filter = new mgFilterString("album title", ""); set->push_back(filter);
// artist
- filter = new mgFilterString("album artist", "abba"); set->push_back(filter);
+ filter = new mgFilterString("album artist", ""); set->push_back(filter);
// genre
filter = new mgFilterString("genre", ""); set->push_back(filter);
// year-from
@@ -114,7 +120,7 @@ gdFilterSets::gdFilterSets()
// year-to
filter = new mgFilterInt("year (to)", 2100); set->push_back(filter);
// rating
- filter = new mgFilterInt("rating", 0); set->push_back(filter);
+ filter = new mgFilterChoice("rating", 1, rating); set->push_back(filter);
m_sets.push_back(set);
@@ -128,7 +134,7 @@ gdFilterSets::gdFilterSets()
// title
filter = new mgFilterString("title", ""); set->push_back(filter);
// artist
- filter = new mgFilterString("artist", "abba"); set->push_back(filter);
+ filter = new mgFilterString("artist", ""); set->push_back(filter);
// genre
filter = new mgFilterString("genre", ""); set->push_back(filter);
// year-from
@@ -136,7 +142,7 @@ gdFilterSets::gdFilterSets()
// year-to
filter = new mgFilterInt("year (to)", 2100); set->push_back(filter);
// rating
- filter = new mgFilterInt("rating", 0); set->push_back(filter);
+ filter = new mgFilterChoice("rating", 1, rating); set->push_back(filter);
m_sets.push_back(set);
@@ -162,150 +168,91 @@ gdFilterSets::~gdFilterSets()
string gdFilterSets::computeRestriction(int *viewPrt)
{
string sql_str = "1";
+
switch (m_activeSetId) {
case 0:
- for(vector<mgFilter*>::iterator iter = m_activeSet->begin();
- iter != m_activeSet->end(); iter++)
- {
- if((*iter)->isSet())
- {
- 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 = 100; // tracks (flatlist for mountain man ;-))
break;
case 1:
- for(vector<mgFilter*>::iterator iter = m_activeSet->begin();
- iter != m_activeSet->end(); iter++)
- {
- if((*iter)->isSet())
- {
- if(strcmp((*iter)->getName(), "album title") == 0 )
- {
- 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() + "%%'";
- }
- 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 = 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;
}
+
+ 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(), "album title") == 0 )
+ {
+ 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() + "%%'";
+ }
+ 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 )
+ {
+ if ((*iter)->getStrVal() == "-") {
+ sql_str = sql_str + " AND tracks.rating >= 0 ";
+ } else if ((*iter)->getStrVal() == "O") {
+ sql_str = sql_str + " AND tracks.rating >= 1 ";
+ } else if ((*iter)->getStrVal() == "+") {
+ sql_str = sql_str + " AND tracks.rating >= 2 ";
+ } else if ((*iter)->getStrVal() == "++") {
+ sql_str = sql_str + " AND tracks.rating >= 3 ";
+ }
+ }
+ else
+ {
+ mgWarning("Ignoring unknown filter %s", (*iter)->getName());
+ }
+ }
+ }
+
mgDebug(1, "Applying sql string %s (view=%d)",sql_str.c_str(), *viewPrt);
return sql_str;
}
@@ -1224,6 +1171,10 @@ bool GdTreeNode::expand()
" ORDER BY CONCAT(tracks.artist,' - ',tracks.title)"
, 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;
case 101: // Albumsearch result
@@ -1438,6 +1389,11 @@ mgContentItem* GdTreeNode::getSingleTrack()
/* -------------------- begin CVS log ---------------------------------
* $Log: gd_content_interface.c,v $
+ * Revision 1.16 2004/02/14 22:02:45 RaK
+ * - mgFilterChoice Debuged
+ * fehlendes m_type = CHOICE in mg_filters.c
+ * falscher iterator in vdr_menu.c
+ *
* Revision 1.15 2004/02/12 09:15:07 LarsAC
* Moved filter classes into separate files
*
diff --git a/mg_filters.c b/mg_filters.c
index bd19178..c5859e0 100644
--- a/mg_filters.c
+++ b/mg_filters.c
@@ -2,10 +2,10 @@
/*! \file mg_filters.c
* \brief
********************************************************************
- * \version $Revision: 1.1 $
- * \date $Date: 2004/02/12 09:15:07 $
+ * \version $Revision: 1.2 $
+ * \date $Date: 2004/02/14 22:02:45 $
* \author Ralf Klueber, Lars von Wedel, Andreas Kellner
- * \author file owner: $Author: LarsAC $
+ * \author file owner: $Author: RaK $
*/
/*******************************************************************/
@@ -246,6 +246,7 @@ bool mgFilterBool::isSet()
mgFilterChoice::mgFilterChoice(const char *name, int value, vector<string> *choices)
: mgFilter(name)
{
+ m_type = CHOICE;
m_choices = *choices;
m_selval = value;
m_default_val = value;
diff --git a/vdr_menu.c b/vdr_menu.c
index 03064e4..4dcf0c7 100644
--- a/vdr_menu.c
+++ b/vdr_menu.c
@@ -2,12 +2,12 @@
/*! \file vdr_menu.c
* \brief Implements menu handling for browsing media libraries within VDR
********************************************************************
- * \version $Revision: 1.14 $
- * \date $Date: 2004/02/12 09:08:48 $
+ * \version $Revision: 1.15 $
+ * \date $Date: 2004/02/14 22:02:45 $
* \author Ralf Klueber, Lars von Wedel, Andreas Kellner
- * \author file owner: $Author: LarsAC $
+ * \author file owner: $Author: RaK $
*
- * $Id: vdr_menu.c,v 1.14 2004/02/12 09:08:48 LarsAC Exp $
+ * $Id: vdr_menu.c,v 1.15 2004/02/14 22:02:45 RaK Exp $
*/
/*******************************************************************/
@@ -607,7 +607,9 @@ void mgMainMenu::DisplayFilter()
iter ++, j ++ )
{
// BUG: Is this a big memory leak!? When to delete and who?
- choices_str[j] = strndup( choices[i].c_str(), 128 );
+ // RaK: zweiter Iterator war "i" richtig: "j"
+ // choices_str[j] = strndup( choices[i].c_str(), 128 );
+ choices_str[j] = strndup( choices[j].c_str(), 128 );
}
Add( new cMenuEditStraItem( fc->getName(), &( fc->m_selval ),
@@ -636,6 +638,11 @@ void mgMainMenu::DisplayFilterSelector()
/************************************************************
*
* $Log: vdr_menu.c,v $
+ * Revision 1.15 2004/02/14 22:02:45 RaK
+ * - mgFilterChoice Debuged
+ * fehlendes m_type = CHOICE in mg_filters.c
+ * falscher iterator in vdr_menu.c
+ *
* Revision 1.14 2004/02/12 09:08:48 LarsAC
* Added handling of filter choices (untested)
*