[mythtv] patch: playlist updates

Andy Davidoff dert at pobox.com
Mon Feb 24 05:29:35 EST 2003


Multiple playlists (in DB), playlist naming, descriptions, arbitrary
track ordering, global/local/host-based scope, and another fixschema
to get you there without disrupting existing playlists.  I hope.

This patch depends on the settings-save and settings-have-scope patches
for the same reasons.
-------------- next part --------------
Index: mythmusic.pro
===================================================================
RCS file: /var/lib/cvs/mythmusic/mythmusic.pro,v
retrieving revision 1.1.1.1
diff -d -u -w -r1.1.1.1 mythmusic.pro
--- mythmusic.pro	31 Jul 2002 05:59:57 -0000	1.1.1.1
+++ mythmusic.pro	24 Feb 2003 10:24:28 -0000
@@ -5,4 +5,4 @@
 TEMPLATE = subdirs
 
 # Directories
-SUBDIRS = mythmusic
+SUBDIRS = mythmusic musicdb
Index: mythmusic/metadata.cpp
===================================================================
RCS file: /var/lib/cvs/mythmusic/mythmusic/metadata.cpp,v
retrieving revision 1.7
diff -d -u -w -r1.7 metadata.cpp
--- mythmusic/metadata.cpp	24 Feb 2003 01:32:57 -0000	1.7
+++ mythmusic/metadata.cpp	24 Feb 2003 10:24:29 -0000
@@ -90,6 +90,8 @@
         title = data;
     else if (field == "genre")
         genre = data;
+    else if (field == "filename")
+        filename = data;
     else if (field == "year")
         year = data.toInt();
     else if (field == "tracknum")
Index: mythmusic/playlist.cpp
===================================================================
RCS file: /var/lib/cvs/mythmusic/mythmusic/playlist.cpp,v
retrieving revision 1.1
diff -d -u -w -r1.1 playlist.cpp
--- mythmusic/playlist.cpp	9 Oct 2002 06:10:04 -0000	1.1
+++ mythmusic/playlist.cpp	24 Feb 2003 10:24:30 -0000
@@ -1,32 +1,37 @@
 #include "playlist.h"
+#include <mythtv/mythcontext.h>
 
 void LoadDefaultPlaylist(QSqlDatabase *db, QValueList<Metadata> &playlist)
 {
-    QString thequery = "SELECT songlist FROM musicplaylist WHERE "
-                       "name = \"default_playlist_storage\";";
-
-    QSqlQuery query = db->exec(thequery);
-
-    if (query.isActive() && query.numRowsAffected() > 0)
-    {
-        query.next();
-
-        QString songlist = query.value(0).toString();
-
-        QStringList list = QStringList::split(",", songlist);
+    QString defaultpl = gContext->GetSetting("CurrentPlaylist", "Default");
+    QSqlQuery query =
+        QSqlQuery("SELECT musicmetadata.intid,musicmetadata.artist,"
+                  "musicmetadata.title,musicmetadata.album,"
+                  "musicmetadata.genre,musicmetadata.year,"
+                  "musicmetadata.length,musicmetadata.tracknum,"
+                  "musicmetadata.filename "
+                  "FROM musicplaylist LEFT JOIN musicplaylistmap USING (playlistid) "
+                  "LEFT JOIN musicmetadata USING (intid) "
+                  "WHERE musicplaylist.title = '" + defaultpl + "' "
+                  "AND musicmetadata.filename != '' "
+                  "ORDER BY musicplaylistmap.playorder;", db);
 
-        QStringList::iterator it = list.begin();
-        for (; it != list.end(); it++)
+    if (query.size() > 0)
         {
-            unsigned int id = QString(*it).toUInt();
-
             Metadata mdata;
 
-            mdata.setID(id);
-
-            mdata.fillDataFromID(db);
+        while (query.next())
+        {
+            mdata.setID(query.value(0).asUInt());
+            mdata.setField("artist", query.value(1).asString());
+            mdata.setField("title", query.value(2).asString());
+            mdata.setField("album", query.value(3).asString());
+            mdata.setField("genre", query.value(4).asString());
+            mdata.setField("year", query.value(5).asString());
+            mdata.setField("length", query.value(6).asString());
+            mdata.setField("tracknum", query.value(7).asString());
+            mdata.setField("filename", query.value(8).asString());
 
-            if (mdata.Filename() != "")
                 playlist.push_back(mdata);
         }
     }
@@ -34,36 +39,57 @@
 
 void SaveDefaultPlaylist(QSqlDatabase *db, QValueList<Metadata> &playlist)
 {
-    QString playliststring;
+    QString defaultpl = gContext->GetSetting("CurrentPlaylist", "Default");
 
-    QValueList<Metadata>::iterator it = playlist.begin();
+    QString sqlGetPLid = "SELECT playlistid FROM musicplaylist "
+        "WHERE title = \"" + defaultpl + "\";";
+    QSqlQuery query = QSqlQuery(sqlGetPLid, db);
 
-    bool first = true;
-    for (; it != playlist.end(); it++)
+    if (query.size() <= 0)
     {
-        unsigned int id = (*it).ID();
+        query = QSqlQuery("INSERT INTO musicplaylist (title) "
+                          "VALUES (\"" + defaultpl + "\");", db);
+        if (!query.isActive())
+            return;
 
-        if (!first)
-            playliststring += ",";
-        playliststring += QString("%1").arg(id);
-        first = false;
+        QSqlQuery query = QSqlQuery(sqlGetPLid, db);
+        if (query.size() <= 0)
+            return;
     }
 
-    QString thequery = "SELECT NULL FROM musicplaylist WHERE name = "
-                       "\"default_playlist_storage\";";
-    QSqlQuery query = db->exec(thequery);
+    query.next();
+    QString defaultid = query.value(0).asString();
 
-    if (query.isActive() && query.numRowsAffected() > 0)
+    query = QSqlQuery("DELETE from musicplaylistmap "
+                      "WHERE playlistid = " + defaultid + ";", db);
+    if (!query.isActive())
+        return;
+
+    QValueList < Metadata >::iterator it = playlist.begin();
+    bool first = true;
+    QString values = "";
+
+    for (unsigned int i = 0; it != playlist.end(); it++, i++)
     {
-        thequery = QString("UPDATE musicplaylist SET songlist = \"%1\" WHERE "
-                           "name = \"default_playlist_storage\";")
-                           .arg(playliststring);
-    }
-    else
+        if (!first)
+            values += ", ";
+        values += "(" + defaultid + ", ";
+        values += QString::number(i) + ", ";
+        values += QString::number((*it).ID()) + ")";
+        first = false;
+
+        if (!(i + 1 % 1000))
     {
-        thequery = QString("INSERT musicplaylist (name,songlist) "
-                           "VALUES(\"default_playlist_storage\",\"%1\");")
-                           .arg(playliststring);
+            query = QSqlQuery("INSERT INTO musicplaylistmap (playlistid, "
+                              "playorder, intid) VALUES " + values + ";", db);
+            if (!query.isActive())
+                return;
+
+            values = "";
+            first = true;
     }
-    query = db->exec(thequery);
+    }
+    if (!first)
+        query = QSqlQuery("INSERT INTO musicplaylistmap (playlistid, "
+                          "playorder, intid) values " + values + ";", db);
 }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: playlists.tar.gz
Type: application/x-tar-gz
Size: 2166 bytes
Desc: not available
Url : /pipermail/attachments/20030224/d67912b9/playlists.tar.bin


More information about the mythtv-dev mailing list