diff --git a/src/database/databasecommand_loadalldynamicplaylists.cpp b/src/database/databasecommand_loadalldynamicplaylists.cpp index 21b690462..c547b18e6 100644 --- a/src/database/databasecommand_loadalldynamicplaylists.cpp +++ b/src/database/databasecommand_loadalldynamicplaylists.cpp @@ -42,7 +42,7 @@ void DatabaseCommand_LoadAllDynamicPlaylists::exec( DatabaseImpl* dbi ) query.value(2).toString(), //info query.value(3).toString(), //creator query.value(7).toString(), // dynamic type - static_cast(query.value(7).toInt()), // dynamic mode + static_cast(query.value(8).toInt()), // dynamic mode query.value(5).toBool(), //shared query.value(4).toInt(), //lastmod query.value(0).toString() //GUID diff --git a/src/database/databasecommand_loaddynamicplaylist.cpp b/src/database/databasecommand_loaddynamicplaylist.cpp index 125801ceb..a17df77fc 100644 --- a/src/database/databasecommand_loaddynamicplaylist.cpp +++ b/src/database/databasecommand_loaddynamicplaylist.cpp @@ -21,21 +21,23 @@ DatabaseCommand_LoadDynamicPlaylist::exec( DatabaseImpl* dbi ) // now load the controls etc TomahawkSqlQuery controlsQuery = dbi->newquery(); - controlsQuery.prepare("SELECT controls, plmode, pltype " - "FROM dynamic_playlist_revision " - "WHERE guid = ?"); - controlsQuery.addBindValue( guid() ); + controlsQuery.prepare("SELECT playlist_revision.playlist, controls, plmode, pltype " + "FROM dynamic_playlist_revision, playlist_revision " + "WHERE dynamic_playlist_revision.guid = ? AND playlist_revision.guid = dynamic_playlist_revision.guid"); + controlsQuery.addBindValue( revisionGuid() ); controlsQuery.exec(); QList< dyncontrol_ptr > controls; + QString playlist_guid; if( controlsQuery.next() ) { - QStringList controlIds = controlsQuery.value( 0 ).toStringList(); + playlist_guid = controlsQuery.value( 0 ).toString(); + QStringList controlIds = controlsQuery.value( 1 ).toStringList(); foreach( const QString& controlId, controlIds ) { TomahawkSqlQuery controlQuery = dbi->newquery(); - controlQuery.prepare( "SELECT selectedType, match, input" - "FROM dynamic_playlist_controls" + controlQuery.prepare( "SELECT selectedType, match, input " + "FROM dynamic_playlist_controls " "WHERE id = :id" ); controlQuery.bindValue( ":id", controlId ); controlQuery.exec(); @@ -51,14 +53,22 @@ DatabaseCommand_LoadDynamicPlaylist::exec( DatabaseImpl* dbi ) } } - - QString type = controlsQuery.value( 2 ).toString(); - GeneratorMode mode = static_cast( controlsQuery.value( 1 ).toInt() ); + TomahawkSqlQuery info = dbi->newquery(); + info.prepare( QString( "SELECT dynamic_playlist.pltype, dynamic_playlist.plmode FROM playlist, dynamic_playlist WHERE playlist.guid = \"%1\" AND playlist.guid = dynamic_playlist.guid" ).arg( playlist_guid ) ); + if( !info.exec() ) { + qWarning() << "Failed to load dynplaylist info.."; + return; + } else if( !info.first() ) { + qWarning() << "Noo results for queryL:" << info.lastQuery(); + return; + } + QString type = info.value( 0 ).toString(); + GeneratorMode mode = static_cast( info.value( 1 ).toInt() ); if( mode == OnDemand ) { Q_ASSERT( m_entrymap.isEmpty() ); // ondemand should have no entry - emit done( guid(), m_islatest, type, controls, true ); + emit done( revisionGuid(), m_islatest, type, controls, true ); } else { - emit done( guid(), m_guids, m_oldentries, type, controls, m_islatest, m_entrymap, true ); + emit done( revisionGuid(), m_guids, m_oldentries, type, controls, m_islatest, m_entrymap, true ); } } diff --git a/src/database/databasecommand_loaddynamicplaylist.h b/src/database/databasecommand_loaddynamicplaylist.h index c150e4f5e..de281f405 100644 --- a/src/database/databasecommand_loaddynamicplaylist.h +++ b/src/database/databasecommand_loaddynamicplaylist.h @@ -17,7 +17,7 @@ class DatabaseCommand_LoadDynamicPlaylist : public DatabaseCommand_LoadPlaylistE public: explicit DatabaseCommand_LoadDynamicPlaylist( QString revision_guid, QObject* parent = 0 ) : DatabaseCommand_LoadPlaylistEntries( revision_guid, parent ) - {} + { qDebug() << "loaded with:" << revision_guid << guid(); } virtual void exec( DatabaseImpl* ); diff --git a/src/database/databasecommand_loadplaylistentries.cpp b/src/database/databasecommand_loadplaylistentries.cpp index 9eaea480c..fb847e89e 100644 --- a/src/database/databasecommand_loadplaylistentries.cpp +++ b/src/database/databasecommand_loadplaylistentries.cpp @@ -10,10 +10,10 @@ using namespace Tomahawk; void DatabaseCommand_LoadPlaylistEntries::exec( DatabaseImpl* dbi ) { - qDebug() << "Loading playlist entries for revision" << m_guid; + qDebug() << "Loading playlist entries for revision" << m_revguid; generateEntries( dbi ); - emit done( m_guid, m_guids, m_oldentries, m_islatest, m_entrymap, true ); + emit done( m_revguid, m_guids, m_oldentries, m_islatest, m_entrymap, true ); } void DatabaseCommand_LoadPlaylistEntries::generateEntries( DatabaseImpl* dbi ) @@ -22,7 +22,7 @@ void DatabaseCommand_LoadPlaylistEntries::generateEntries( DatabaseImpl* dbi ) query_entries.prepare("SELECT entries, playlist, author, timestamp, previous_revision " "FROM playlist_revision " "WHERE guid = :guid"); - query_entries.bindValue( ":guid", m_guid ); + query_entries.bindValue( ":guid", m_revguid ); query_entries.exec(); QString prevrev; @@ -81,7 +81,7 @@ void DatabaseCommand_LoadPlaylistEntries::generateEntries( DatabaseImpl* dbi ) "(SELECT currentrevision = ? FROM playlist WHERE guid = ?) " "FROM playlist_revision " "WHERE guid = ?" ); - query_entries_old.addBindValue( m_guid ); + query_entries_old.addBindValue( m_revguid ); query_entries_old.addBindValue( query_entries.value( 1 ).toString() ); query_entries_old.addBindValue( prevrev ); diff --git a/src/database/databasecommand_loadplaylistentries.h b/src/database/databasecommand_loadplaylistentries.h index 8b563ecc3..86605826e 100644 --- a/src/database/databasecommand_loadplaylistentries.h +++ b/src/database/databasecommand_loadplaylistentries.h @@ -13,13 +13,14 @@ Q_OBJECT public: explicit DatabaseCommand_LoadPlaylistEntries( QString revision_guid, QObject* parent = 0 ) - : DatabaseCommand( parent ), m_guid( revision_guid ) + : DatabaseCommand( parent ), m_revguid( revision_guid ) {} virtual void exec( DatabaseImpl* ); virtual bool doesMutates() const { return false; } virtual QString commandname() const { return "loadplaylistentries"; } + QString revisionGuid() const { return m_revguid; } signals: void done( const QString& rev, const QList& orderedguid, @@ -37,7 +38,7 @@ protected: QStringList m_oldentries; private: - QString m_guid; + QString m_revguid; }; #endif diff --git a/src/database/schema.sql b/src/database/schema.sql index 1706b11c7..9216ae010 100644 --- a/src/database/schema.sql +++ b/src/database/schema.sql @@ -65,7 +65,10 @@ CREATE TABLE IF NOT EXISTS playlist ( ); INSERT INTO playlist(guid, title, info, currentrevision, dynplaylist) -VALUES('dynamic_playlist-guid-1','Test Dynamic Playlist','this playlist automatically created and used for testing','revisionguid-1', 1); +VALUES('dynamic_playlist-guid-1','Test Dynamic Playlist Dynamic','this playlist automatically created and used for testing','revisionguid-1', 1); + +INSERT INTO playlist(guid, title, info, currentrevision, dynplaylist) +VALUES('dynamic_playlist-guid-2','Test Dynamic Playlist Static','this playlist automatically created and used for testing','revisionguid-11', 1); CREATE TABLE IF NOT EXISTS playlist_item ( guid TEXT PRIMARY KEY, @@ -99,7 +102,9 @@ CREATE TABLE IF NOT EXISTS playlist_revision ( ); INSERT INTO playlist_revision(guid, playlist, entries) - VALUES('revisionguid-1', 'playlistguid-1', '["itemguid-2","itemguid-1","itemguid-3"]'); + VALUES('revisionguid-1', 'dynamic_playlist-guid-1', '[]'); +INSERT INTO playlist_revision(guid, playlist, entries) + VALUES('revisionguid-11', 'dynamic_playlist-guid-2', '[]'); CREATE TABLE IF NOT EXISTS dynamic_playlist ( guid TEXT PRIMARY KEY, @@ -110,7 +115,7 @@ CREATE TABLE IF NOT EXISTS dynamic_playlist ( INSERT INTO dynamic_playlist(guid, pltype, plmode) VALUES('dynamic_playlist-guid-1', 'echonest', 0); INSERT INTO dynamic_playlist(guid, pltype, plmode) - VALUES('dynamic_playlist-guid-2', 'echonest', 0); + VALUES('dynamic_playlist-guid-2', 'echonest', 1); -- list of controls in each playlist. each control saves a selectedType, a match, and an input CREATE TABLE IF NOT EXISTS dynamic_playlist_controls ( @@ -134,6 +139,8 @@ CREATE TABLE IF NOT EXISTS dynamic_playlist_revision ( INSERT INTO dynamic_playlist_revision(guid, controls, plmode, pltype) VALUES('revisionguid-1', '["controlid-1"]', 0, "echonest"); +INSERT INTO dynamic_playlist_revision(guid, controls, plmode, pltype) + VALUES('revisionguid-11', '["controlid-1"]', 1, "echonest"); -- the trigram search indexes diff --git a/src/database/schema.sql.h b/src/database/schema.sql.h index ca2fc5233..1fba957fa 100644 --- a/src/database/schema.sql.h +++ b/src/database/schema.sql.h @@ -1,5 +1,5 @@ /* - This file was automatically generated from schema.sql on Wed Dec 8 22:37:14 EST 2010. + This file was automatically generated from schema.sql on Sun Dec 12 14:07:45 EST 2010. */ static const char * tomahawk_schema_sql = @@ -53,7 +53,9 @@ static const char * tomahawk_schema_sql = " dynplaylist BOOLEAN DEFAULT false" ");" "INSERT INTO playlist(guid, title, info, currentrevision, dynplaylist)" -"VALUES('dynamic_playlist-guid-1','Test Dynamic Playlist','this playlist automatically created and used for testing','revisionguid-1', 1);" +"VALUES('dynamic_playlist-guid-1','Test Dynamic Playlist Dynamic','this playlist automatically created and used for testing','revisionguid-1', 1);" +"INSERT INTO playlist(guid, title, info, currentrevision, dynplaylist)" +"VALUES('dynamic_playlist-guid-2','Test Dynamic Playlist Static','this playlist automatically created and used for testing','revisionguid-11', 1);" "CREATE TABLE IF NOT EXISTS playlist_item (" " guid TEXT PRIMARY KEY," " playlist TEXT NOT NULL REFERENCES playlist(guid) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED," @@ -76,7 +78,9 @@ static const char * tomahawk_schema_sql = " previous_revision TEXT REFERENCES playlist_revision(guid) DEFERRABLE INITIALLY DEFERRED" ");" "INSERT INTO playlist_revision(guid, playlist, entries)" -" VALUES('revisionguid-1', 'playlistguid-1', '[\"itemguid-2\",\"itemguid-1\",\"itemguid-3\"]');" +" VALUES('revisionguid-1', 'dynamic_playlist-guid-1', '[]');" +"INSERT INTO playlist_revision(guid, playlist, entries)" +" VALUES('revisionguid-11', 'dynamic_playlist-guid-2', '[]');" "CREATE TABLE IF NOT EXISTS dynamic_playlist (" " guid TEXT PRIMARY KEY," " pltype TEXT, " @@ -85,7 +89,7 @@ static const char * tomahawk_schema_sql = "INSERT INTO dynamic_playlist(guid, pltype, plmode)" " VALUES('dynamic_playlist-guid-1', 'echonest', 0);" "INSERT INTO dynamic_playlist(guid, pltype, plmode)" -" VALUES('dynamic_playlist-guid-2', 'echonest', 0);" +" VALUES('dynamic_playlist-guid-2', 'echonest', 1);" "CREATE TABLE IF NOT EXISTS dynamic_playlist_controls (" " id TEXT PRIMARY KEY," " playlist TEXT NOT NULL REFERENCES playlist(guid) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED," @@ -104,6 +108,8 @@ static const char * tomahawk_schema_sql = ");" "INSERT INTO dynamic_playlist_revision(guid, controls, plmode, pltype)" " VALUES('revisionguid-1', '[\"controlid-1\"]', 0, \"echonest\");" +"INSERT INTO dynamic_playlist_revision(guid, controls, plmode, pltype)" +" VALUES('revisionguid-11', '[\"controlid-1\"]', 1, \"echonest\");" "CREATE TABLE IF NOT EXISTS artist_search_index (" " ngram TEXT NOT NULL," " id INTEGER NOT NULL REFERENCES artist(id) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED," diff --git a/src/dynamic/DynamicPlaylist.cpp b/src/dynamic/DynamicPlaylist.cpp index 8a45cff87..e09860db0 100644 --- a/src/dynamic/DynamicPlaylist.cpp +++ b/src/dynamic/DynamicPlaylist.cpp @@ -181,7 +181,7 @@ DynamicPlaylist::createNewRevision( const QString& newrev, void DynamicPlaylist::loadRevision( const QString& rev ) { - qDebug() << Q_FUNC_INFO; + qDebug() << Q_FUNC_INFO << "Loading with:" << ( rev.isEmpty() ? currentrevision() : rev ); DatabaseCommand_LoadDynamicPlaylist* cmd = new DatabaseCommand_LoadDynamicPlaylist( rev.isEmpty() ? currentrevision() : rev );