[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