diff --git a/src/libtomahawk/GlobalActionManager.cpp b/src/libtomahawk/GlobalActionManager.cpp index 38f8542a5..fcb074d14 100644 --- a/src/libtomahawk/GlobalActionManager.cpp +++ b/src/libtomahawk/GlobalActionManager.cpp @@ -225,7 +225,10 @@ GlobalActionManager::copyPlaylistToClipboard( const dynplaylist_ptr& playlist ) TomahawkUtils::urlAddQueryItem( link, "type", "echonest" ); TomahawkUtils::urlAddQueryItem( link, "title", playlist->title() ); - QList< dyncontrol_ptr > controls = playlist->generator()->controls(); + Q_ASSERT( false ); + //FIXME +/* + QVariantList controls = playlist->generator()->controls(); foreach ( const dyncontrol_ptr& c, controls ) { if ( c->selectedType() == "Artist" ) @@ -252,7 +255,7 @@ GlobalActionManager::copyPlaylistToClipboard( const dynplaylist_ptr& playlist ) TomahawkUtils::urlAddQueryItem( link, name, c->input() ); } - } + }*/ QClipboard* cb = QApplication::clipboard(); QByteArray data = percentEncode( link ); @@ -886,7 +889,8 @@ GlobalActionManager::loadDynamicPlaylist( const QUrl& url, bool station ) return Tomahawk::dynplaylist_ptr(); } - if ( parts[ 0 ] == "create" ) + Q_ASSERT( false ); +/* if ( parts[ 0 ] == "create" ) { if ( !urlHasQueryItem( url, "title" ) || !urlHasQueryItem( url, "type" ) ) { @@ -1057,7 +1061,7 @@ GlobalActionManager::loadDynamicPlaylist( const QUrl& url, bool station ) ViewManager::instance()->show( pl ); return pl; - } + }*/ return Tomahawk::dynplaylist_ptr(); } diff --git a/src/libtomahawk/database/DatabaseCommand_LoadDynamicPlaylistEntries.cpp b/src/libtomahawk/database/DatabaseCommand_LoadDynamicPlaylistEntries.cpp index c429f4846..5ad0dc4fb 100644 --- a/src/libtomahawk/database/DatabaseCommand_LoadDynamicPlaylistEntries.cpp +++ b/src/libtomahawk/database/DatabaseCommand_LoadDynamicPlaylistEntries.cpp @@ -52,7 +52,7 @@ DatabaseCommand_LoadDynamicPlaylistEntries::exec( DatabaseImpl* dbi ) QString type; GeneratorMode mode; - QList< QVariantMap > controls; + QVariantList controls; QString playlist_guid; // qDebug() << "Loading controls..." << revisionGuid(); // qDebug() << "SELECT playlist_revision.playlist, controls, plmode, pltype " @@ -71,7 +71,7 @@ DatabaseCommand_LoadDynamicPlaylistEntries::exec( DatabaseImpl* dbi ) type = controlsQuery.value( 3 ).toString(); mode = static_cast( controlsQuery.value( 2 ).toInt() ); - QStringList controlIds = v.toStringList(); +/* QStringList controlIds = v.toStringList(); // qDebug() << "Got controls in dynamic playlist, loading:" << controlIds << controlsQuery.value(1); foreach( const QString& controlId, controlIds ) { @@ -91,7 +91,7 @@ DatabaseCommand_LoadDynamicPlaylistEntries::exec( DatabaseImpl* dbi ) c[ "input" ] = controlQuery.value( 2 ).toString(); controls << c; } - } + }*/ } else { diff --git a/src/libtomahawk/database/DatabaseCommand_LoadDynamicPlaylistEntries.h b/src/libtomahawk/database/DatabaseCommand_LoadDynamicPlaylistEntries.h index c15adc0b6..b812cd63c 100644 --- a/src/libtomahawk/database/DatabaseCommand_LoadDynamicPlaylistEntries.h +++ b/src/libtomahawk/database/DatabaseCommand_LoadDynamicPlaylistEntries.h @@ -47,14 +47,14 @@ signals: void done( QString, bool, QString, - QList< QVariantMap>, + QVariantList, bool ); // used when loading a static playlist void done( QString, QList< QString >, QList< QString >, QString, - QList< QVariantMap>, + QVariantList, bool, QMap< QString, Tomahawk::plentry_ptr >, bool ); diff --git a/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.cpp b/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.cpp index 659041dc1..3498d2c16 100644 --- a/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.cpp +++ b/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.cpp @@ -37,7 +37,7 @@ DatabaseCommand_SetDynamicPlaylistRevision::DatabaseCommand_SetDynamicPlaylistRe const QList& entries, const QString& type, GeneratorMode mode, - const QList< dyncontrol_ptr >& controls ) + const QVariantList& controls ) : DatabaseCommand_SetPlaylistRevision( s, playlistguid, newrev, oldrev, orderedguids, addedentries, entries ) , m_type( type ) , m_mode( mode ) @@ -54,7 +54,7 @@ DatabaseCommand_SetDynamicPlaylistRevision::DatabaseCommand_SetDynamicPlaylistRe const QString& oldrev, const QString& type, GeneratorMode mode, - const QList< dyncontrol_ptr >& controls ) + const QVariantList& controls ) : DatabaseCommand_SetPlaylistRevision( s, playlistguid, newrev, oldrev, QStringList(), QList< plentry_ptr >(), QList< plentry_ptr >() ) , m_type( type ) , m_mode( mode ) @@ -68,18 +68,7 @@ DatabaseCommand_SetDynamicPlaylistRevision::DatabaseCommand_SetDynamicPlaylistRe QVariantList DatabaseCommand_SetDynamicPlaylistRevision::controlsV() { - if ( m_controls.isEmpty() ) - return m_controlsV; - - if ( !m_controls.isEmpty() && m_controlsV.isEmpty() ) - { - foreach ( const dyncontrol_ptr& control, m_controls ) - { - m_controlsV << QJson::QObjectHelper::qobject2qvariant( control.data() ); - } - } - - return m_controlsV; + return m_controls; } @@ -117,7 +106,7 @@ DatabaseCommand_SetDynamicPlaylistRevision::postCommitHook() return; } - if ( !m_controlsV.isEmpty() && m_controls.isEmpty() ) +/* if ( !m_controlsV.isEmpty() && m_controls.isEmpty() ) { QList controlMap; foreach( const QVariant& v, m_controlsV ) @@ -139,7 +128,7 @@ DatabaseCommand_SetDynamicPlaylistRevision::postCommitHook() m_addedmap, m_applied ); } - else + else*/ { if ( m_mode == OnDemand ) rawPl->setRevision( newrev(), @@ -169,19 +158,9 @@ DatabaseCommand_SetDynamicPlaylistRevision::exec( DatabaseImpl* lib ) DatabaseCommand_SetPlaylistRevision::exec( lib ); QVariantList newcontrols; - if ( m_controlsV.isEmpty() && !m_controls.isEmpty() ) + foreach( const QVariant& v, m_controls ) { - foreach( const dyncontrol_ptr& control, m_controls ) - { - newcontrols << control->id(); - } - } - else if( !m_controlsV.isEmpty() ) - { - foreach( const QVariant& v, m_controlsV ) - { - newcontrols << v.toMap().value( "id" ); - } + newcontrols << v.toMap().value( "id" ); } QJson::Serializer ser; @@ -209,34 +188,18 @@ DatabaseCommand_SetDynamicPlaylistRevision::exec( DatabaseImpl* lib ) TomahawkSqlQuery controlsQuery = lib->newquery(); controlsQuery.prepare( "INSERT INTO dynamic_playlist_controls( id, playlist, selectedType, match, input ) " "VALUES( ?, ?, ?, ?, ? )" ); - if ( m_controlsV.isEmpty() && !m_controls.isEmpty() ) - { - foreach ( const dyncontrol_ptr& control, m_controls ) - { - qDebug() << "inserting dynamic control:" << control->id() << m_playlistguid << control->selectedType() << control->match() << control->input(); - controlsQuery.addBindValue( control->id() ); - controlsQuery.addBindValue( m_playlistguid ); - controlsQuery.addBindValue( control->selectedType() ); - controlsQuery.addBindValue( control->match() ); - controlsQuery.addBindValue( control->input() ); - controlsQuery.exec(); - } - } - else + foreach ( const QVariant& v, m_controls ) { - foreach ( const QVariant& v, m_controlsV ) - { - QVariantMap control = v.toMap(); - qDebug() << "inserting dynamic control from JSON:" << control.value( "id" ) << m_playlistguid << control.value( "selectedType" ) << control.value( "match" ) << control.value( "input" ); - controlsQuery.addBindValue( control.value( "id" ) ); - controlsQuery.addBindValue( m_playlistguid ); - controlsQuery.addBindValue( control.value( "selectedType" ) ); - controlsQuery.addBindValue( control.value( "match" ) ); - controlsQuery.addBindValue( control.value( "input" ) ); + QVariantMap control = v.toMap(); + qDebug() << "inserting dynamic control from JSON:" << control.value( "id" ) << m_playlistguid << control.value( "selectedType" ) << control.value( "match" ) << control.value( "input" ); + controlsQuery.addBindValue( control.value( "id" ) ); + controlsQuery.addBindValue( m_playlistguid ); + controlsQuery.addBindValue( control.value( "selectedType" ) ); + controlsQuery.addBindValue( control.value( "match" ) ); + controlsQuery.addBindValue( control.value( "input" ) ); - controlsQuery.exec(); - } + controlsQuery.exec(); } if ( m_applied ) @@ -252,6 +215,7 @@ DatabaseCommand_SetDynamicPlaylistRevision::exec( DatabaseImpl* lib ) } } + void DatabaseCommand_SetDynamicPlaylistRevision::setPlaylist( DynamicPlaylist* pl ) { diff --git a/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.h b/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.h index a23f39ddd..6a81d98b6 100644 --- a/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.h +++ b/src/libtomahawk/database/DatabaseCommand_SetDynamicPlaylistRevision.h @@ -45,7 +45,7 @@ public: const QList& entries, const QString& type, GeneratorMode mode, - const QList< dyncontrol_ptr >& controls ); + const QVariantList& controls ); explicit DatabaseCommand_SetDynamicPlaylistRevision( const source_ptr& s, const QString& playlistguid, @@ -53,7 +53,7 @@ public: const QString& oldrev, const QString& type, GeneratorMode mode, - const QList< dyncontrol_ptr >& controls ); + const QVariantList& controls ); QString commandname() const { return "setdynamicplaylistrevision"; } @@ -64,7 +64,7 @@ public: void setControlsV( const QVariantList& vlist ) { - m_controlsV = vlist; + m_controls = vlist; } QVariantList controlsV(); @@ -80,8 +80,7 @@ public: private: QString m_type; GeneratorMode m_mode; - QList< dyncontrol_ptr > m_controls; - QList< QVariant > m_controlsV; + QVariantList m_controls; // ARG i hate sharedpointers sometimes DynamicPlaylist* m_playlist; // Only used if setting revision of a non-autoloaded playlist, as those aren't able to be looked up by guid diff --git a/src/libtomahawk/playlist/dynamic/DynamicPlaylist.cpp b/src/libtomahawk/playlist/dynamic/DynamicPlaylist.cpp index 57f61dd6f..c7269cd1d 100644 --- a/src/libtomahawk/playlist/dynamic/DynamicPlaylist.cpp +++ b/src/libtomahawk/playlist/dynamic/DynamicPlaylist.cpp @@ -185,7 +185,7 @@ void DynamicPlaylist::createNewRevision( const QString& newrev, const QString& oldrev, const QString& type, - const QList< dyncontrol_ptr>& controls, + const QVariantList& controls, const QList< plentry_ptr >& entries ) { Q_ASSERT( m_source->isLocal() || newrev == oldrev ); @@ -233,7 +233,7 @@ void DynamicPlaylist::createNewRevision( const QString& newrev, const QString& oldrev, const QString& type, - const QList< dyncontrol_ptr>& controls ) + const QVariantList& controls ) { Q_ASSERT( m_source->isLocal() || newrev == oldrev ); @@ -275,19 +275,19 @@ DynamicPlaylist::loadRevision( const QString& rev ) connect( cmd, SIGNAL( done( QString, bool, QString, - QList< QVariantMap >, + QVariantList, bool ) ), SLOT( setRevision( QString, bool, QString, - QList< QVariantMap >, + QVariantList, bool) ) ); } else if ( m_generator->mode() == Static ) { connect( cmd, SIGNAL( done( QString, QList< QString >, QList< QString >, QString, - QList< QVariantMap >, + QVariantList, bool, QMap< QString, Tomahawk::plentry_ptr >, bool ) ), @@ -295,7 +295,7 @@ DynamicPlaylist::loadRevision( const QString& rev ) QList< QString >, QList< QString >, QString, - QList< QVariantMap >, + QVariantList, bool, QMap< QString, Tomahawk::plentry_ptr >, bool ) ) ); @@ -376,7 +376,7 @@ DynamicPlaylist::setRevision( const QString& rev, const QList< QString >& neworderedguids, const QList< QString >& oldorderedguids, const QString& type, - const QList< dyncontrol_ptr >& controls, + const QVariantList& controls, bool is_newest_rev, const QMap< QString, plentry_ptr >& addedmap, bool applied ) @@ -391,7 +391,7 @@ DynamicPlaylist::setRevision( const QString& rev, Q_ARG( QList , neworderedguids ), Q_ARG( QList , oldorderedguids ), Q_ARG( QString , type ), - QGenericArgument( "QList< Tomahawk::dyncontrol_ptr > " , (const void*)&controls ), + Q_ARG( QVariantList , controls ), Q_ARG( bool, is_newest_rev ), QGenericArgument( "QMap< QString,Tomahawk::plentry_ptr > " , (const void*)&addedmap ), Q_ARG( bool, applied ) ); @@ -421,42 +421,11 @@ DynamicPlaylist::setRevision( const QString& rev, } -void -DynamicPlaylist::setRevision( const QString& rev, - const QList< QString >& neworderedguids, - const QList< QString >& oldorderedguids, - const QString& type, - const QList< QVariantMap>& controlsV, - bool is_newest_rev, - const QMap< QString, Tomahawk::plentry_ptr >& addedmap, - bool applied ) -{ - if ( QThread::currentThread() != thread() ) - { - QMetaObject::invokeMethod( this, - "setRevision", - Qt::BlockingQueuedConnection, - Q_ARG( QString, rev ), - Q_ARG( QList , neworderedguids ), - Q_ARG( QList , oldorderedguids ), - Q_ARG( QString , type ), - QGenericArgument( "QList< QVariantMap > " , (const void*)&controlsV ), - Q_ARG( bool, is_newest_rev ), - QGenericArgument( "QMap< QString,Tomahawk::plentry_ptr > " , (const void*)&addedmap ), - Q_ARG( bool, applied ) ); - return; - } - - QList controls = variantsToControl( controlsV ); - setRevision( rev, neworderedguids, oldorderedguids, type, controls, is_newest_rev, addedmap, applied ); -} - - void DynamicPlaylist::setRevision( const QString& rev, bool is_newest_rev, const QString& type, - const QList< dyncontrol_ptr >& controls, + const QVariantList& controls, bool applied ) { if ( QThread::currentThread() != thread() ) @@ -498,32 +467,7 @@ DynamicPlaylist::setRevision( const QString& rev, } -void -DynamicPlaylist::setRevision( const QString& rev, - bool is_newest_rev, - const QString& type, - const QList< QVariantMap >& controlsV, - bool applied ) -{ - if ( QThread::currentThread() != thread() ) - { - QMetaObject::invokeMethod( this, - "setRevision", - Qt::BlockingQueuedConnection, - Q_ARG( QString, rev ), - Q_ARG( bool, is_newest_rev ), - Q_ARG( QString, type ), - QGenericArgument( "QList< QVariantMap >" , (const void*)&controlsV ), - Q_ARG( bool, applied ) ); - return; - } - - QList controls = variantsToControl( controlsV ); - setRevision( rev, is_newest_rev, type, controls, applied ); -} - - -QList< dyncontrol_ptr > +/*QList< dyncontrol_ptr > DynamicPlaylist::variantsToControl( const QList< QVariantMap >& controlsV ) { QList realControls; @@ -534,7 +478,7 @@ DynamicPlaylist::variantsToControl( const QList< QVariantMap >& controlsV ) realControls << control; } return realControls; -} +}*/ void diff --git a/src/libtomahawk/playlist/dynamic/DynamicPlaylist.h b/src/libtomahawk/playlist/dynamic/DynamicPlaylist.h index 2a86bbb02..d66d13947 100644 --- a/src/libtomahawk/playlist/dynamic/DynamicPlaylist.h +++ b/src/libtomahawk/playlist/dynamic/DynamicPlaylist.h @@ -49,10 +49,10 @@ class DatabaseCommand_LoadDynamicPlaylist; struct DynQueueItem : RevisionQueueItem { QString type; - QList controls; + QVariantList controls; int mode; - DynQueueItem( const QString& nRev, const QString& oRev, const QString& typ, const QList< dyncontrol_ptr >& ctrls, int m, const QList< plentry_ptr >& e, bool latest ) : + DynQueueItem( const QString& nRev, const QString& oRev, const QString& typ, const QVariantList& ctrls, int m, const QList< plentry_ptr >& e, bool latest ) : RevisionQueueItem( nRev, oRev, e, latest ), type( typ ), controls( ctrls ), mode( m ) {} }; @@ -125,9 +125,9 @@ public slots: // want to update the playlist from the model? // generate a newrev using uuid() and call this: // if this is a static playlist, pass it a new list of entries. implicitly sets mode to static - void createNewRevision( const QString& newrev, const QString& oldrev, const QString& type, const QList< dyncontrol_ptr>& controls, const QList< plentry_ptr >& entries ); + void createNewRevision( const QString& newrev, const QString& oldrev, const QString& type, const QVariantList& controls, const QList< plentry_ptr >& entries ); // if it is ondemand, no entries are needed implicitly sets mode to ondemand - void createNewRevision( const QString& newrev, const QString& oldrev, const QString& type, const QList< dyncontrol_ptr>& controls ); + void createNewRevision( const QString& newrev, const QString& oldrev, const QString& type, const QVariantList& controls ); void reportCreated( const Tomahawk::dynplaylist_ptr& self ); void reportDeleted( const Tomahawk::dynplaylist_ptr& self ); @@ -142,15 +142,7 @@ public slots: const QList& neworderedguids, const QList& oldorderedguids, const QString& type, - const QList< QVariantMap >& controls, - bool is_newest_rev, - const QMap< QString, Tomahawk::plentry_ptr >& addedmap, - bool applied ); - void setRevision( const QString& rev, - const QList& neworderedguids, - const QList& oldorderedguids, - const QString& type, - const QList< Tomahawk::dyncontrol_ptr >& controls, + const QVariantList& controls, bool is_newest_rev, const QMap< QString, Tomahawk::plentry_ptr >& addedmap, bool applied ); @@ -158,13 +150,9 @@ public slots: void setRevision( const QString& rev, bool is_newest_rev, const QString& type, - const QList< QVariantMap>& controls, - bool applied ); - void setRevision( const QString& rev, - bool is_newest_rev, - const QString& type, - const QList< Tomahawk::dyncontrol_ptr>& controls, + const QVariantList& controls, bool applied ); + private: // called from loadAllPlaylists DB cmd via databasecollection (in GUI thread) explicit DynamicPlaylist( const source_ptr& src, @@ -192,8 +180,6 @@ private: void checkRevisionQueue(); - QList< dyncontrol_ptr > variantsToControl( const QList< QVariantMap >& controlsV ); - geninterface_ptr m_generator; bool m_autoLoad; diff --git a/src/libtomahawk/playlist/dynamic/DynamicPlaylistRevision.cpp b/src/libtomahawk/playlist/dynamic/DynamicPlaylistRevision.cpp index d14737b07..ea7048eb3 100644 --- a/src/libtomahawk/playlist/dynamic/DynamicPlaylistRevision.cpp +++ b/src/libtomahawk/playlist/dynamic/DynamicPlaylistRevision.cpp @@ -23,7 +23,7 @@ using namespace Tomahawk; -DynamicPlaylistRevision::DynamicPlaylistRevision(const PlaylistRevision &other) +DynamicPlaylistRevision::DynamicPlaylistRevision( const PlaylistRevision &other ) { revisionguid = other.revisionguid; oldrevisionguid = other.oldrevisionguid; diff --git a/src/libtomahawk/playlist/dynamic/DynamicPlaylistRevision.h b/src/libtomahawk/playlist/dynamic/DynamicPlaylistRevision.h index 1001da59f..96af9273b 100644 --- a/src/libtomahawk/playlist/dynamic/DynamicPlaylistRevision.h +++ b/src/libtomahawk/playlist/dynamic/DynamicPlaylistRevision.h @@ -29,7 +29,7 @@ struct DLLEXPORT DynamicPlaylistRevision : PlaylistRevision { public: - QList< dyncontrol_ptr > controls; + QVariantList controls; Tomahawk::GeneratorMode mode; QString type; diff --git a/src/libtomahawk/playlist/dynamic/GeneratorFactory.cpp b/src/libtomahawk/playlist/dynamic/GeneratorFactory.cpp index 75838998e..d5ed4effc 100644 --- a/src/libtomahawk/playlist/dynamic/GeneratorFactory.cpp +++ b/src/libtomahawk/playlist/dynamic/GeneratorFactory.cpp @@ -40,14 +40,14 @@ GeneratorFactory::create ( const QString& type ) } -dyncontrol_ptr +/*dyncontrol_ptr GeneratorFactory::createControl( const QString& generatorType, const QString& controlType ) { if( generatorType.isEmpty() || !s_factories.contains( generatorType ) ) return dyncontrol_ptr(); return s_factories.value( generatorType )->createControl( controlType ); -} +}*/ void diff --git a/src/libtomahawk/playlist/dynamic/GeneratorFactory.h b/src/libtomahawk/playlist/dynamic/GeneratorFactory.h index 3cbb30968..421c39e7a 100644 --- a/src/libtomahawk/playlist/dynamic/GeneratorFactory.h +++ b/src/libtomahawk/playlist/dynamic/GeneratorFactory.h @@ -46,7 +46,7 @@ public: * Create a control for this generator, not tied to this generator itself. Used when loading dynamic * playlists from a dbcmd. */ - virtual dyncontrol_ptr createControl( const QString& controlType = QString() ) = 0; +// virtual dyncontrol_ptr createControl( const QString& controlType = QString() ) = 0; virtual QStringList typeSelectors() const = 0; }; @@ -59,7 +59,7 @@ class DLLEXPORT GeneratorFactory public: static geninterface_ptr create( const QString& type ); // only used when loading from dbcmd - static dyncontrol_ptr createControl( const QString& generatorType, const QString& controlType = QString() ); +// static dyncontrol_ptr createControl( const QString& generatorType, const QString& controlType = QString() ); static void registerFactory( const QString& type, GeneratorFactoryInterface* interface ); static QStringList types(); diff --git a/src/libtomahawk/playlist/dynamic/GeneratorInterface.cpp b/src/libtomahawk/playlist/dynamic/GeneratorInterface.cpp index 9cfb12c76..13805b0c2 100644 --- a/src/libtomahawk/playlist/dynamic/GeneratorInterface.cpp +++ b/src/libtomahawk/playlist/dynamic/GeneratorInterface.cpp @@ -34,17 +34,6 @@ Tomahawk::GeneratorInterface::~GeneratorInterface() } -QList< Tomahawk::dyncontrol_ptr > -Tomahawk::GeneratorInterface::controls() -{ -// if( m_controls.isEmpty() ) { // return a default control (so the user can add more) -// return QList< Tomahawk::dyncontrol_ptr >() << createControl(); -// } - - return m_controls; -} - - QPixmap Tomahawk::GeneratorInterface::logo() { @@ -52,38 +41,15 @@ Tomahawk::GeneratorInterface::logo() } -void -Tomahawk::GeneratorInterface::addControl( const Tomahawk::dyncontrol_ptr& control ) +QVariantList +Tomahawk::GeneratorInterface::controls() const { - m_controls << control; + return m_controls; } void -Tomahawk::GeneratorInterface::clearControls() -{ - m_controls.clear(); -} - - -void -Tomahawk::GeneratorInterface::setControls( const QList< Tomahawk::dyncontrol_ptr >& controls ) +Tomahawk::GeneratorInterface::setControls( const QVariantList& controls ) { m_controls = controls; } - - -void -Tomahawk::GeneratorInterface::removeControl( const Tomahawk::dyncontrol_ptr& control ) -{ - m_controls.removeAll( control ); -} - - -Tomahawk::dyncontrol_ptr -Tomahawk::GeneratorInterface::createControl( const QString& type ) -{ - Q_UNUSED( type ); - Q_ASSERT( false ); - return dyncontrol_ptr(); -} diff --git a/src/libtomahawk/playlist/dynamic/GeneratorInterface.h b/src/libtomahawk/playlist/dynamic/GeneratorInterface.h index fd0746a5b..3a6d7fbdf 100644 --- a/src/libtomahawk/playlist/dynamic/GeneratorInterface.h +++ b/src/libtomahawk/playlist/dynamic/GeneratorInterface.h @@ -47,6 +47,7 @@ class DLLEXPORT GeneratorInterface : public QObject { Q_OBJECT Q_PROPERTY( QString type READ type ) + Q_PROPERTY( QString summary READ sentenceSummary) /// oh qjson. Q_PROPERTY( int mode READ mode WRITE setMode ) @@ -55,12 +56,6 @@ public: explicit GeneratorInterface( QObject* parent = 0 ); virtual ~GeneratorInterface(); - // Can't make it pure otherwise we can't shove it in QVariants :-/ - // empty QString means use default - /// The generator will keep track of all the controls it creates. No need to tell it about controls - /// you ask it to create - virtual dyncontrol_ptr createControl( const QString& type = QString() ); - /// A logo to display for this generator, if it has one virtual QPixmap logo(); @@ -98,17 +93,17 @@ public: */ virtual bool onDemandSteerable() const { return false; } + /** - * Returns a widget used to steer the OnDemand dynamic playlist. - * If this generator doesn't support this (and returns false for - * \c onDemandSteerable) this will be null. The generator is responsible - * for reacting to changes in the widget. - * - * Steering widgets may emit a \c steeringChanged() signal, which will cause the model to toss any - * upcoming tracks and re-fetch them. - * + * Returns the controls for this station. */ - virtual QWidget* steeringWidget() { return 0; } + virtual QVariantList controls() const; + + /** + * Sets the controls (for example when loaded from database) + */ + virtual void setControls( const QVariantList& controls ); + /// The type of this generator QString type() const { return m_type; } @@ -116,22 +111,20 @@ public: int mode() const { return (int)m_mode; } void setMode( int mode ) { m_mode = (GeneratorMode)mode; } - // control functions - QList< dyncontrol_ptr > controls(); - void addControl( const dyncontrol_ptr& control ); - void clearControls(); - void setControls( const QList< dyncontrol_ptr>& controls ); - void removeControl( const dyncontrol_ptr& control ); + virtual bool startFromTrack( const Tomahawk::query_ptr& query ) = 0; + virtual bool startFromArtist( const Tomahawk::artist_ptr& artist ) = 0; + virtual bool startFromGenre( const QString& genre ) = 0; signals: void error( const QString& title, const QString& body); void generated( const QList< Tomahawk::query_ptr>& queries ); void nextTrackGenerated( const Tomahawk::query_ptr& track ); + void summaryChanged(); protected: QString m_type; GeneratorMode m_mode; - QList< dyncontrol_ptr > m_controls; + QVariantList m_controls; }; typedef QSharedPointer geninterface_ptr; diff --git a/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.h b/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.h index 7513763dc..ce991026b 100644 --- a/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.h +++ b/src/libtomahawk/playlist/dynamic/database/DatabaseGenerator.h @@ -36,10 +36,10 @@ namespace Tomahawk DatabaseFactory() {} virtual GeneratorInterface* create(); - virtual dyncontrol_ptr createControl( const QString& controlType = QString() ); +// virtual dyncontrol_ptr createControl( const QString& controlType = QString() ); // TO create a special SQL resolver that consists of a pre-baked SQL query and a description of it - virtual dyncontrol_ptr createControl( const QString& sql, DatabaseCommand_GenericSelect::QueryType type, const QString& summary ); +// virtual dyncontrol_ptr createControl( const QString& sql, DatabaseCommand_GenericSelect::QueryType type, const QString& summary ); virtual QStringList typeSelectors() const; }; @@ -55,8 +55,8 @@ namespace Tomahawk explicit DatabaseGenerator( QObject* parent = 0 ); virtual ~DatabaseGenerator(); - virtual dyncontrol_ptr createControl( const QString& type = QString() ); - virtual dyncontrol_ptr createControl( const QString& sql, DatabaseCommand_GenericSelect::QueryType type, const QString& summary ); +/* virtual dyncontrol_ptr createControl( const QString& type = QString() ); + virtual dyncontrol_ptr createControl( const QString& sql, DatabaseCommand_GenericSelect::QueryType type, const QString& summary );*/ virtual QPixmap logo(); virtual void generate ( int number = -1 ); diff --git a/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp b/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp index fdaf4df40..9edac4ccc 100644 --- a/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp +++ b/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.cpp @@ -61,11 +61,11 @@ EchonestFactory::create() } -dyncontrol_ptr +/*dyncontrol_ptr EchonestFactory::createControl( const QString& controlType ) { return dyncontrol_ptr( new EchonestControl( controlType, typeSelectors() ) ); -} +}*/ QStringList @@ -160,12 +160,12 @@ EchonestGenerator::setupCatalogs() // qDebug() << "ECHONEST:" << m_logo.size(); } -dyncontrol_ptr +/*dyncontrol_ptr EchonestGenerator::createControl( const QString& type ) { m_controls << dyncontrol_ptr( new EchonestControl( type, GeneratorFactory::typeSelectors( m_type ) ) ); return m_controls.last(); -} +}*/ QPixmap EchonestGenerator::logo() @@ -176,11 +176,11 @@ QPixmap EchonestGenerator::logo() void EchonestGenerator::knownCatalogsChanged() { - // Refresh all contrls +/* // Refresh all contrls foreach( const dyncontrol_ptr& control, m_controls ) { control.staticCast< EchonestControl >()->updateWidgetsFromData(); - } + }*/ } @@ -188,7 +188,7 @@ void EchonestGenerator::generate( int number ) { // convert to an echonest query, and fire it off - qDebug() << Q_FUNC_INFO; +/* qDebug() << Q_FUNC_INFO; qDebug() << "Generating playlist with" << m_controls.size(); foreach( const dyncontrol_ptr& ctrl, m_controls ) qDebug() << ctrl->selectedType() << ctrl->match() << ctrl->input(); @@ -202,7 +202,16 @@ EchonestGenerator::generate( int number ) } catch( std::runtime_error& e ) { qWarning() << "Got invalid controls!" << e.what(); emit error( "Filters are not valid", e.what() ); - } + }*/ + + QList< query_ptr > queries; + queries << Query::get("Colour Haze", "All", QString(), uuid(), true); + queries << Query::get("Colour Haze", "Sun", QString(), uuid(), true); + queries << Query::get("Colour Haze", "Zen", QString(), uuid(), true); + queries << Query::get("Colour Haze", "Outside", QString(), uuid(), true); + queries << Query::get("Colour Haze", "Dirt", QString(), uuid(), true); + + emit generated( queries ); } @@ -226,6 +235,81 @@ EchonestGenerator::startOnDemand() } +bool +EchonestGenerator::startFromTrack( const Tomahawk::query_ptr& query ) +{ + tDebug() << "Generating station content by query:" << query->toString(); + + Echonest::DynamicPlaylist::PlaylistParamData data; + data.first = Echonest::DynamicPlaylist::SongId; + data.second = query->track()->artist() + " " + query->track()->track(); + + Echonest::DynamicPlaylist::PlaylistParams params; + params.append( Echonest::DynamicPlaylist::PlaylistParamData( Echonest::DynamicPlaylist::Type, Echonest::DynamicPlaylist::SongRadioType ) ); + params << data; + + // FIXME! + + return true; +} + + +bool +EchonestGenerator::startFromArtist( const Tomahawk::artist_ptr& artist ) +{ + tDebug() << "Generating station content by artist:" << artist->name(); + + if ( !m_dynPlaylist->sessionId().isNull() ) + { + // Running session, delete it + QNetworkReply* deleteReply = m_dynPlaylist->deleteSession(); + connect( deleteReply, SIGNAL( finished() ), deleteReply, SLOT( deleteLater() ) ); + } + + connect( this, SIGNAL( paramsGenerated( Echonest::DynamicPlaylist::PlaylistParams ) ), this, SLOT( doStartOnDemand( Echonest::DynamicPlaylist::PlaylistParams ) ) ); + + Echonest::DynamicPlaylist::PlaylistParamData data; + data.first = Echonest::DynamicPlaylist::Artist; + data.second = artist->name(); + + Echonest::DynamicPlaylist::PlaylistParams params; + params << data; + // params.append( Echonest::DynamicPlaylist::PlaylistParamData( Echonest::DynamicPlaylist::Type, Echonest::DynamicPlaylist::SongRadioType ) ); + emit paramsGenerated( params ); + + return true; +} + + +bool +EchonestGenerator::startFromGenre( const QString& genre ) +{ + tDebug() << "Generating station content by genre:" << genre; + + if ( !m_dynPlaylist->sessionId().isNull() ) + { + // Running session, delete it + QNetworkReply* deleteReply = m_dynPlaylist->deleteSession(); + connect( deleteReply, SIGNAL( finished() ), deleteReply, SLOT( deleteLater() ) ); + } + + connect( this, SIGNAL( paramsGenerated( Echonest::DynamicPlaylist::PlaylistParams ) ), this, SLOT( doGenerate( Echonest::DynamicPlaylist::PlaylistParams ) ) ); + + setProperty( "number", 20 ); + + Echonest::DynamicPlaylist::PlaylistParamData data; + data.first = Echonest::DynamicPlaylist::Description; + data.second = genre; + + Echonest::DynamicPlaylist::PlaylistParams params; + params << data; + params.append( Echonest::DynamicPlaylist::PlaylistParamData( Echonest::DynamicPlaylist::Type, Echonest::DynamicPlaylist::ArtistDescriptionType ) ); + emit paramsGenerated( params ); + + return true; +} + + void EchonestGenerator::doGenerate( const Echonest::DynamicPlaylist::PlaylistParams& paramsIn ) { @@ -308,7 +392,7 @@ void EchonestGenerator::getParams() throw( std::runtime_error ) { Echonest::DynamicPlaylist::PlaylistParams params; - foreach( const dyncontrol_ptr& control, m_controls ) { +/* foreach( const dyncontrol_ptr& control, m_controls ) { params.append( control.dynamicCast()->toENParam() ); } @@ -343,7 +427,7 @@ EchonestGenerator::getParams() throw( std::runtime_error ) } else { emit paramsGenerated( params ); - } + }*/ } @@ -440,7 +524,7 @@ EchonestGenerator::userCatalogs() return s_catalogs->catalogs().keys(); } -bool +/*bool EchonestGenerator::onlyThisArtistType( Echonest::DynamicPlaylist::ArtistTypeEnum type ) const throw( std::runtime_error ) { bool only = true; @@ -460,7 +544,7 @@ EchonestGenerator::onlyThisArtistType( Echonest::DynamicPlaylist::ArtistTypeEnum } return false; -} +}*/ Echonest::DynamicPlaylist::ArtistTypeEnum @@ -477,7 +561,7 @@ EchonestGenerator::appendRadioType( Echonest::DynamicPlaylist::PlaylistParams& p /// 3. artist-description: If all the artist entries are Description. If some were but not all, error out. /// 4. artist-radio: If all the artist entries are Similar To. If some were but not all, error out. /// 5. song-radio: If all the artist entries are Similar To. If some were but not all, error out. - bool someCatalog = false; +/* bool someCatalog = false; bool genreType = false; foreach( const dyncontrol_ptr& control, m_controls ) { if ( control->selectedType() == "User Radio" ) @@ -498,7 +582,7 @@ EchonestGenerator::appendRadioType( Echonest::DynamicPlaylist::PlaylistParams& p else if( onlyThisArtistType( Echonest::DynamicPlaylist::SongRadioType ) ) params.append( Echonest::DynamicPlaylist::PlaylistParamData( Echonest::DynamicPlaylist::Type, Echonest::DynamicPlaylist::SongRadioType ) ); else // no artist or song or description types. default to artist-description - params.append( Echonest::DynamicPlaylist::PlaylistParamData( Echonest::DynamicPlaylist::Type, Echonest::DynamicPlaylist::ArtistDescriptionType ) ); + params.append( Echonest::DynamicPlaylist::PlaylistParamData( Echonest::DynamicPlaylist::Type, Echonest::DynamicPlaylist::ArtistDescriptionType ) );*/ return static_cast< Echonest::DynamicPlaylist::ArtistTypeEnum >( params.last().second.toInt() ); } @@ -529,7 +613,7 @@ EchonestGenerator::sentenceSummary() * NOTE / TODO: In order for the sentence to be grammatically correct, we must follow the EN API rules. That means we can't have multiple of some types of filters, * and all Artist types must be the same. The filters aren't checked at the moment until Generate / Play is pressed. Consider doing a check on hide as well. */ - QList< dyncontrol_ptr > allcontrols = m_controls; +/* QList< dyncontrol_ptr > allcontrols = m_controls; QString sentence = "Songs "; /// 1. Collect all required filters @@ -612,7 +696,9 @@ EchonestGenerator::sentenceSummary() sentence += "and " + sorting.dynamicCast< EchonestControl >()->summary() + "."; } - return sentence; + return sentence;*/ + + return "This is a station!"; } void diff --git a/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.h b/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.h index 5f8777abb..4375a5153 100644 --- a/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.h +++ b/src/libtomahawk/playlist/dynamic/echonest/EchonestGenerator.h @@ -60,7 +60,7 @@ public: EchonestFactory(); virtual GeneratorInterface* create(); - virtual dyncontrol_ptr createControl( const QString& controlType = QString() ); +// virtual dyncontrol_ptr createControl( const QString& controlType = QString() ); virtual QStringList typeSelectors() const; }; @@ -71,7 +71,7 @@ public: explicit EchonestGenerator( QObject* parent = 0 ); virtual ~EchonestGenerator(); - virtual dyncontrol_ptr createControl( const QString& type = QString() ); +// virtual dyncontrol_ptr createControl( const QString& type = QString() ); virtual QPixmap logo(); virtual void generate ( int number = -1 ); virtual void startOnDemand(); @@ -80,6 +80,10 @@ public: virtual bool onDemandSteerable() const { return false; } virtual QWidget* steeringWidget() { return 0; } + virtual bool startFromTrack( const Tomahawk::query_ptr& query ); + virtual bool startFromArtist( const Tomahawk::artist_ptr& artist ); + virtual bool startFromGenre( const QString& genre ); + static QStringList styles(); static QStringList moods(); static QStringList genres(); @@ -118,7 +122,7 @@ private: query_ptr queryFromSong( const Echonest::Song& song ); Echonest::DynamicPlaylist::ArtistTypeEnum appendRadioType( Echonest::DynamicPlaylist::PlaylistParams& params ) const throw( std::runtime_error ); - bool onlyThisArtistType( Echonest::DynamicPlaylist::ArtistTypeEnum type ) const throw( std::runtime_error ); +// bool onlyThisArtistType( Echonest::DynamicPlaylist::ArtistTypeEnum type ) const throw( std::runtime_error ); void loadStylesMoodsAndGenres(); diff --git a/src/sourcetree/items/CategoryItems.cpp b/src/sourcetree/items/CategoryItems.cpp index 3696baa26..ce505f107 100644 --- a/src/sourcetree/items/CategoryItems.cpp +++ b/src/sourcetree/items/CategoryItems.cpp @@ -163,7 +163,7 @@ CategoryAddItem::dropMimeData( const QMimeData* data, Qt::DropAction ) QString firstArtist; // now we want to add each artist as a filter... - QList< dyncontrol_ptr > contrls; +/* QList< dyncontrol_ptr > contrls; while ( !stream.atEnd() ) { QString artist; @@ -183,7 +183,7 @@ CategoryAddItem::dropMimeData( const QMimeData* data, Qt::DropAction ) QString name = firstArtist.isEmpty() ? tr( "New Station" ) : tr( "%1 Station" ).arg( firstArtist ); newpl->createNewRevision( uuid(), newpl->currentrevision(), newpl->type(), contrls ); newpl->setProperty( "newname", name ); - connect( newpl.data(), SIGNAL( dynamicRevisionLoaded( Tomahawk::DynamicPlaylistRevision ) ), this, SLOT( playlistToRenameLoaded() ) ); + connect( newpl.data(), SIGNAL( dynamicRevisionLoaded( Tomahawk::DynamicPlaylistRevision ) ), this, SLOT( playlistToRenameLoaded() ) );*/ ViewManager::instance()->show( newpl ); return true; @@ -295,7 +295,7 @@ CategoryAddItem::parsedDroppedTracks( const QList< query_ptr >& tracks ) newpl->setMode( OnDemand ); // now we want to add each query as a song or similar artist filter... - QList< dyncontrol_ptr > controls; +/* QList< dyncontrol_ptr > controls; foreach ( const Tomahawk::query_ptr& q, tracks ) { dyncontrol_ptr c = newpl->generator()->createControl( "Song" ); @@ -303,7 +303,7 @@ CategoryAddItem::parsedDroppedTracks( const QList< query_ptr >& tracks ) controls << c; } - newpl->createNewRevision( uuid(), newpl->currentrevision(), newpl->type(), controls ); + newpl->createNewRevision( uuid(), newpl->currentrevision(), newpl->type(), controls );*/ ViewManager::instance()->show( newpl ); connect( newpl.data(), SIGNAL( dynamicRevisionLoaded( Tomahawk::DynamicPlaylistRevision ) ), this, SLOT( playlistToRenameLoaded() ) );