From 89328215d99ac9d6e36e27cfd0a75a927aa8ac53 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Tue, 7 Dec 2010 09:38:08 -0500 Subject: [PATCH] fix more sql stuff --- .../databasecommand_createdynamicplaylist.cpp | 15 ++++++------ .../databasecommand_loadallplaylists.cpp | 2 +- src/database/schema.sql | 15 ++++++------ src/database/schema.sql.h | 24 +++++++++++++++++-- src/tomahawkapp.cpp | 5 ++++ src/tomahawkwindow.cpp | 14 +++++++++-- src/tomahawkwindow.h | 3 ++- src/tomahawkwindow.ui | 6 +++++ 8 files changed, 64 insertions(+), 20 deletions(-) diff --git a/src/database/databasecommand_createdynamicplaylist.cpp b/src/database/databasecommand_createdynamicplaylist.cpp index eeb8fbc1c..78bf37f3f 100644 --- a/src/database/databasecommand_createdynamicplaylist.cpp +++ b/src/database/databasecommand_createdynamicplaylist.cpp @@ -19,8 +19,8 @@ DatabaseCommand_CreateDynamicPlaylist::DatabaseCommand_CreateDynamicPlaylist( QO DatabaseCommand_CreateDynamicPlaylist::DatabaseCommand_CreateDynamicPlaylist( const source_ptr& author, const dynplaylist_ptr& playlist ) -: DatabaseCommand_CreatePlaylist( author, playlist.staticCast() ) -, m_playlist( playlist ) + : DatabaseCommand_CreatePlaylist( author, playlist.staticCast() ) + , m_playlist( playlist ) { qDebug() << Q_FUNC_INFO << "creating dynamiccreatecommand 2"; } @@ -34,13 +34,14 @@ DatabaseCommand_CreateDynamicPlaylist::exec( DatabaseImpl* lib ) Q_ASSERT( !source().isNull() ); DatabaseCommand_CreatePlaylist::exec( lib ); + qDebug() << "Created normal playlist, now creating additional dynamic info!" << m_playlist.isNull(); TomahawkSqlQuery cre = lib->newquery(); - cre.prepare( "INSERT INTO dynamic_playlist( guid, pltype, plmode) " - "VALUES( :guid, :pltype, :plmode )" ); - cre.bindValue( ":guid", m_playlist->guid() ); - cre.bindValue( ":pltype", m_playlist->type() ); - cre.bindValue( ":plmode", m_playlist->mode() ); + cre.prepare( "INSERT INTO dynamic_playlist( guid, pltype, plmode ) " + "VALUES( ?, ?, ? )" ); + cre.bindValue( 0, m_playlist->guid() ); + cre.bindValue( 1, m_playlist->type() ); + cre.bindValue( 2, m_playlist->mode() ); qDebug() << "CREATE DYNPLAYLIST:" << cre.boundValues(); diff --git a/src/database/databasecommand_loadallplaylists.cpp b/src/database/databasecommand_loadallplaylists.cpp index 1822532d1..fe42e7f86 100644 --- a/src/database/databasecommand_loadallplaylists.cpp +++ b/src/database/databasecommand_loadallplaylists.cpp @@ -13,7 +13,7 @@ void DatabaseCommand_LoadAllPlaylists::exec( DatabaseImpl* dbi ) TomahawkSqlQuery query = dbi->newquery(); query.exec( QString( "SELECT guid, title, info, creator, lastmodified, shared, currentrevision " - "FROM playlist WHERE source %1" ) + "FROM playlist WHERE source %1 AND NOT dynplaylist" ) .arg( source()->isLocal() ? "IS NULL" : QString( "=%1" ).arg( source()->id() ) ) ); diff --git a/src/database/schema.sql b/src/database/schema.sql index f651835fe..91bb9deaf 100644 --- a/src/database/schema.sql +++ b/src/database/schema.sql @@ -60,7 +60,8 @@ CREATE TABLE IF NOT EXISTS playlist ( info TEXT, creator TEXT, lastmodified INTEGER NOT NULL DEFAULT 0, - currentrevision TEXT REFERENCES playlist_revision(guid) DEFERRABLE INITIALLY DEFERRED + currentrevision TEXT REFERENCES playlist_revision(guid) DEFERRABLE INITIALLY DEFERRED, + dynplaylist BOOLEAN DEFAULT false ); --INSERT INTO playlist(guid, title, info, currentrevision) @@ -97,27 +98,27 @@ CREATE TABLE IF NOT EXISTS playlist_revision ( previous_revision TEXT REFERENCES playlist_revision(guid) DEFERRABLE INITIALLY DEFERRED ); -CREATE TABLE IF NOT EXISTS dynamic_playlist { +CREATE TABLE IF NOT EXISTS dynamic_playlist ( guid TEXT PRIMARY KEY, pltype TEXT, -- the generator type plmode INTEGER -- the mode of this playlist -}; +); -- list of controls in each playlist. each control saves a selectedType, a match, and an input -CREATE TABLE IF NOT EXISTS dynamic_playlist_controls { +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, selectedType TEXT, match TEXT, input TEXT -}; +); -CREATE TABLE IF NOT EXISTS dynamic_playlist_revision { +CREATE TABLE IF NOT EXISTS dynamic_playlist_revision ( guid TEXT PRIMARY KEY, controls TEXT, -- qlist( id, id, id ) plmode INTEGER REFERENCES dynamic_playlist( plmode ) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED, pltype TEXT REFERENCES dynamic_playlist( pltype ) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED -}; +); --INSERT INTO playlist_revision(guid, playlist, entries) -- VALUES('revisionguid-1', 'playlistguid-1', '["itemguid-2","itemguid-1","itemguid-3"]'); diff --git a/src/database/schema.sql.h b/src/database/schema.sql.h index fd3127304..3c04e8f43 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 Tue Jul 13 12:23:44 CEST 2010. + This file was automatically generated from schema.sql on Mon Dec 6 22:41:52 EST 2010. */ static const char * tomahawk_schema_sql = @@ -49,7 +49,8 @@ static const char * tomahawk_schema_sql = " info TEXT," " creator TEXT," " lastmodified INTEGER NOT NULL DEFAULT 0," -" currentrevision TEXT REFERENCES playlist_revision(guid) DEFERRABLE INITIALLY DEFERRED" +" currentrevision TEXT REFERENCES playlist_revision(guid) DEFERRABLE INITIALLY DEFERRED," +" dynplaylist BOOLEAN DEFAULT false" ");" "CREATE TABLE IF NOT EXISTS playlist_item (" " guid TEXT PRIMARY KEY," @@ -72,6 +73,25 @@ static const char * tomahawk_schema_sql = " timestamp INTEGER NOT NULL DEFAULT 0," " previous_revision TEXT REFERENCES playlist_revision(guid) DEFERRABLE INITIALLY DEFERRED" ");" +"CREATE TABLE IF NOT EXISTS dynamic_playlist (" +" guid TEXT PRIMARY KEY," +" pltype TEXT, " +" plmode INTEGER " +");" +"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," +" selectedType TEXT," +" match TEXT," +" input TEXT" +");" +"" +"CREATE TABLE IF NOT EXISTS dynamic_playlist_revision (" +" guid TEXT PRIMARY KEY," +" controls TEXT, " +" plmode INTEGER REFERENCES dynamic_playlist( plmode ) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED," +" pltype TEXT REFERENCES dynamic_playlist( pltype ) ON DELETE CASCADE ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED" +");" "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/tomahawkapp.cpp b/src/tomahawkapp.cpp index ee3466ecd..f71ddd57c 100644 --- a/src/tomahawkapp.cpp +++ b/src/tomahawkapp.cpp @@ -15,6 +15,9 @@ #include "database/databasecommand_collectionstats.h" #include "database/databaseresolver.h" #include "sip/SipHandler.h" +#include "dynamic/generatorfactory.h" +#include "dynamic/echonest/echonestgenerator.h" +#include "jabber/jabber.h" #include "utils/tomahawkutils.h" #include "xmppbot/xmppbot.h" #include "web/api_v1.h" @@ -215,6 +218,8 @@ TomahawkApp::TomahawkApp( int& argc, char *argv[] ) m_mainwindow->showSettingsDialog(); } #endif + + GeneratorFactory::registerFactory( "echonest", new EchonestFactory ); } diff --git a/src/tomahawkwindow.cpp b/src/tomahawkwindow.cpp index f49c0bfe7..de81dd366 100644 --- a/src/tomahawkwindow.cpp +++ b/src/tomahawkwindow.cpp @@ -169,6 +169,7 @@ TomahawkWindow::setupSignals() connect( ui->actionRescanCollection, SIGNAL( triggered() ), SLOT( rescanCollectionManually() ) ); connect( ui->actionLoadXSPF, SIGNAL( triggered() ), SLOT( loadSpiff() )); connect( ui->actionCreatePlaylist, SIGNAL( triggered() ), SLOT( createPlaylist() )); + connect( ui->actionCreateDynamicPlaylist, SIGNAL( triggered() ), SLOT( createDynamicPlaylist() )); connect( ui->actionAboutTomahawk, SIGNAL( triggered() ), SLOT( showAboutTomahawk() ) ); connect( ui->actionExit, SIGNAL( triggered() ), APP, SLOT( quit() ) ); @@ -319,9 +320,15 @@ TomahawkWindow::loadSpiff() loader->load( url ); } +void +TomahawkWindow::createDynamicPlaylist() +{ + createPlaylist( true ); +} + void -TomahawkWindow::createPlaylist() +TomahawkWindow::createPlaylist( bool dynamic ) { qDebug() << Q_FUNC_INFO; @@ -334,7 +341,10 @@ TomahawkWindow::createPlaylist() QString id = uuid(); QString info = ""; // FIXME QString creator = "someone"; // FIXME - Playlist::create( author, id, name, info, creator, false /* shared */ ); + if( dynamic ) + DynamicPlaylist::create( author, id, name, info, creator, false ); + else + Playlist::create( author, id, name, info, creator, false /* shared */ ); } diff --git a/src/tomahawkwindow.h b/src/tomahawkwindow.h index 06a574c5b..bf1e28055 100644 --- a/src/tomahawkwindow.h +++ b/src/tomahawkwindow.h @@ -43,7 +43,8 @@ protected: void closeEvent( QCloseEvent* e ); public slots: - void createPlaylist(); + void createDynamicPlaylist(); + void createPlaylist( bool dynamic = false ); void loadSpiff(); void showSettingsDialog(); diff --git a/src/tomahawkwindow.ui b/src/tomahawkwindow.ui index bbd71a4ae..f53ac9090 100644 --- a/src/tomahawkwindow.ui +++ b/src/tomahawkwindow.ui @@ -81,6 +81,7 @@ &Playlist + @@ -156,6 +157,11 @@ QAction::AboutRole + + + Create New &Dynamic Playlist + +