summaryrefslogtreecommitdiff
path: root/gd_content_interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'gd_content_interface.c')
-rw-r--r--gd_content_interface.c169
1 files changed, 157 insertions, 12 deletions
diff --git a/gd_content_interface.c b/gd_content_interface.c
index cf8e89b..ed74d9d 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.4 $
- * \date $Date: 2004/02/01 23:13:33 $
+ * \version $Revision: 1.5 $
+ * \date $Date: 2004/02/02 02:01:11 $
* \author Ralf Klueber, Lars von Wedel, Andreas Kellner
- * \author file owner: $Author: RaK $
+ * \author file owner: $Author: MountainMan $
*
* DUMMY
* Implements main classes of for content items and interfaces to SQL databases
@@ -47,9 +47,9 @@ int GdInitDatabase(MYSQL *db)
return 0;
}
-vector<string> GdGetStoredPlaylists(MYSQL db)
+vector<string> *GdGetStoredPlaylists(MYSQL db)
{
- vector<string> list;
+ vector<string>* list = new vector<string>();
MYSQL_RES *result;
MYSQL_ROW row;
@@ -57,12 +57,85 @@ vector<string> GdGetStoredPlaylists(MYSQL db)
while((row = mysql_fetch_row(result)) != NULL)
{
- list.push_back(row[0]);
+ list->push_back(row[0]);
}
return list;
}
/*******************************************************************/
+/* class class gdTrackFilters */
+/********************************************************************/
+gdTrackFilters::gdTrackFilters()
+{
+ clear();
+}
+gdTrackFilters::~gdTrackFilters()
+{
+}
+void gdTrackFilters::clear()
+{
+ mgFilter* filter ;
+ // remove old filters
+ for(vector<mgFilter*>::iterator iter = m_filters.begin();
+ iter != m_filters.end(); iter++)
+ {
+ delete (*iter);
+ }
+ m_filters.clear();
+
+ // create an initial set of filters with empty values
+ // title
+ filter = new mgFilterString("title", "");
+ m_filters.push_back(filter);
+ // artist
+ filter = new mgFilterString("artist", "");
+ m_filters.push_back(filter);
+ // genre
+ filter = new mgFilterString("genre", "");
+ m_filters.push_back(filter);
+ // year
+ filter = new mgFilterInt("year", -1);
+ m_filters.push_back(filter);
+ // rating
+ filter = new mgFilterInt("rating", -1);
+ m_filters.push_back(filter);
+}
+
+string gdTrackFilters::CreateSQL()
+{
+ string sql_str = "1";
+
+ for(vector<mgFilter*>::iterator iter = m_filters.begin();
+ iter != m_filters.end(); iter++)
+ {
+ if(strcmp((*iter)->getName(), "title") == 0 )
+ {
+ 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(), "genre") == 0 )
+ {
+ 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(), "rating") == 0 )
+ {
+ sql_str = "AND tracks.rating >= " + (*iter)->getStrVal();
+ }
+ }
+ return sql_str;
+}
+
+/*******************************************************************/
/* class mgTack */
/********************************************************************/
mgGdTrack mgGdTrack::UNDEFINED = mgGdTrack();
@@ -700,6 +773,42 @@ GdTreeNode::~GdTreeNode()
/*!
*****************************************************************************
+ * \brief checks if this node can be further expandded or not
+ * \true, if node ia leaf node, false if node can be expanded
+ *
+ ****************************************************************************/
+bool GdTreeNode::isLeafNode()
+{
+ if( m_level == 0)
+ return false;
+ switch(m_view)
+ {
+ case 1: // artist -> album -> title
+ if( m_level <= 3 )
+ {
+ return false;
+ }
+ break;
+ case 2: // genre -> artist -> album -> track
+ if( m_level <= 3 )
+ {
+ return false;
+ }
+ break;
+ case 3: // Artist -> Track
+ if( m_level <= 2 )
+ {
+ return false;
+ }
+ break;
+ default:
+ mgError("View '%d' not yet implemented", m_view);
+ }
+ return true;
+}
+
+/*!
+ *****************************************************************************
* \brief compute children on the fly
*
* \return: true, if the node could be expanded (or was already), false,of
@@ -1044,10 +1153,46 @@ vector<mgContentItem*>* GdTreeNode::getTracks()
}
+/*!
+ *****************************************************************************
+ * \brief returns the first track matchin the restrictions of this node
+ * assuming we are in a leaf node, this returns the track represented by the
+ * the leaf
+ ****************************************************************************/
+mgContentItem* GdTreeNode::getSingleTrack()
+{
+ MYSQL_ROW row;
+ MYSQL_RES *result;
+ int nrows;
+ int nfields;
+ mgContentItem* track = NULL;
+ int trackid;
-
-
-
-
-
-
+ // get all tracks satisying the restrictions of this node
+ mgDebug(5, "getTracks(): query '%s'", m_restriction.c_str());
+
+ result = mgSqlReadQuery(&m_db,
+ "SELECT tracks.id FROM tracks, album, genre WHERE %s"
+ " AND album.cddbid=tracks.sourceid AND genre.id=tracks.genre1",
+ m_restriction.c_str());
+ nrows = mysql_num_rows(result);
+ nfields = mysql_num_fields(result);
+
+ if( nrows != 1 )
+ {
+ mgWarning( "GdTreeNode::getSingleTrack() :SQL call returned %d tracks, using only the first",
+ nrows );
+ }
+ // get the first row
+ if( ( row = mysql_fetch_row(result)) != NULL )
+ {
+ // row[0] is the trackid
+ if(sscanf(row[0], "%d", &trackid) != 1)
+ {
+ mgError("Can not extract integer track id from '%s'",
+ row[0]);
+ }
+ track = new mgGdTrack(trackid, m_db);
+ }
+ return track;
+}