diff --git a/include/tomahawk/tomahawkapp.h b/include/tomahawk/tomahawkapp.h index 768ae0184..d4b7353d0 100644 --- a/include/tomahawk/tomahawkapp.h +++ b/include/tomahawk/tomahawkapp.h @@ -19,6 +19,7 @@ #include "utils/tomahawkutils.h" +class ScriptResolver; class AudioEngine; class Database; class SipHandler; @@ -65,6 +66,8 @@ public: TomahawkWindow* mainWindow() const { return m_mainwindow; } #endif + void addScriptResolver( const QString& scriptPath ); + signals: void settingsChanged(); @@ -82,7 +85,8 @@ private: QList m_collections; QList m_plugins; - + QList m_scriptResolvers; + Database* m_database; AudioEngine* m_audioEngine; SipHandler* m_sipHandler; diff --git a/src/libtomahawk/tomahawksettings.cpp b/src/libtomahawk/tomahawksettings.cpp index 8a8f81bb8..4630c49e3 100644 --- a/src/libtomahawk/tomahawksettings.cpp +++ b/src/libtomahawk/tomahawksettings.cpp @@ -445,3 +445,21 @@ TomahawkSettings::setXmppBotPort( const int port ) { setValue( "xmppBot/port", -1 ); } + +void +TomahawkSettings::addScriptResolver(const QString& resolver) +{ + setValue( "script/resolvers", scriptResolvers() << resolver ); +} + +QStringList +TomahawkSettings::scriptResolvers() const +{ + return value( "script/resolvers" ).toStringList(); +} + +void +TomahawkSettings::setScriptResolvers( const QStringList& resolver ) +{ + setValue( "script/resolvers", resolver ); +} diff --git a/src/libtomahawk/tomahawksettings.h b/src/libtomahawk/tomahawksettings.h index b54298288..65fcf4261 100644 --- a/src/libtomahawk/tomahawksettings.h +++ b/src/libtomahawk/tomahawksettings.h @@ -109,6 +109,12 @@ public: int xmppBotPort() const; void setXmppBotPort( const int port ); + /// Script resolver settings + + QStringList scriptResolvers() const; + void setScriptResolvers( const QStringList& resolver ); + void addScriptResolver( const QString& resolver ); + private: static TomahawkSettings* s_instance; }; diff --git a/src/scriptresolver.cpp b/src/scriptresolver.cpp index bac5774d3..755f2b415 100644 --- a/src/scriptresolver.cpp +++ b/src/scriptresolver.cpp @@ -128,6 +128,7 @@ void ScriptResolver::resolve( const QVariant& v ) QVariantMap m = v.toMap(); m.insert( "_msgtype", "rq" ); const QByteArray msg = m_serializer.serialize( m ); + qDebug() << "ASKING SCRIPT RESOLVER TO RESOLVE:" << msg; sendMsg( msg ); } diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index 6845cc34e..03b41add8 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -72,6 +72,17 @@ SettingsDialog::SettingsDialog( QWidget *parent ) ui->lineEditLastfmPassword->setText(s->lastFmPassword() ); connect( ui->pushButtonTestLastfmLogin, SIGNAL( clicked( bool) ), this, SLOT( testLastFmLogin() ) ); + // SCRIPT RESOLVER + ui->removeScript->setEnabled( false ); + foreach( const QString& resolver, s->scriptResolvers() ) { + QFileInfo info( resolver ); + ui->scriptList->addTopLevelItem( new QTreeWidgetItem( QStringList() << info.baseName() << resolver ) ); + + } + connect( ui->scriptList, SIGNAL( itemClicked( QTreeWidgetItem*, int ) ), this, SLOT( scriptSelectionChanged() ) ); + connect( ui->addScript, SIGNAL( clicked( bool ) ), this, SLOT( addScriptResolver() ) ); + connect( ui->removeScript, SIGNAL( clicked( bool ) ), this, SLOT( removeScriptResolver() ) ); + connect( ui->buttonBrowse, SIGNAL( clicked() ), SLOT( showPathSelector() ) ); connect( ui->proxyButton, SIGNAL( clicked() ), SLOT( showProxySettings() ) ); connect( this, SIGNAL( rejected() ), SLOT( onRejected() ) ); @@ -113,6 +124,12 @@ SettingsDialog::~SettingsDialog() s->setLastFmUsername( ui->lineEditLastfmUsername->text() ); s->setLastFmPassword( ui->lineEditLastfmPassword->text() ); + QStringList resolvers; + for( int i = 0; i < ui->scriptList->topLevelItemCount(); i++ ) { + resolvers << ui->scriptList->topLevelItem( i )->data( 1, Qt::DisplayRole ).toString(); + } + s->setScriptResolvers( resolvers ); + if( rescan ) { MusicScanner* scanner = new MusicScanner(s->scannerPath() ); @@ -313,3 +330,34 @@ ProxyDialog::saveSettings() QNetworkProxy::setApplicationProxy( proxy ); } + +void +SettingsDialog::addScriptResolver() +{ + QString resolver = QFileDialog::getOpenFileName( this, tr( "Load script resolver file" ), qApp->applicationDirPath() ); + if( !resolver.isEmpty() ) { + QFileInfo info( resolver ); + ui->scriptList->addTopLevelItem( new QTreeWidgetItem( QStringList() << info.baseName() << resolver ) ); + + TomahawkApp::instance()->addScriptResolver( resolver ); + } +} + +void +SettingsDialog::removeScriptResolver() +{ + // only one selection + if( !ui->scriptList->selectedItems().isEmpty() ) { + delete ui->scriptList->takeTopLevelItem( ui->scriptList->indexOfTopLevelItem( ui->scriptList->selectedItems().first() ) ); + } +} + +void +SettingsDialog::scriptSelectionChanged() +{ + if( !ui->scriptList->selectedItems().isEmpty() ) { + ui->removeScript->setEnabled( true ); + } else { + ui->removeScript->setEnabled( false ); + } +} diff --git a/src/settingsdialog.h b/src/settingsdialog.h index 3d71d82c5..f02fcd5df 100644 --- a/src/settingsdialog.h +++ b/src/settingsdialog.h @@ -51,6 +51,10 @@ private slots: void testLastFmLogin(); void onLastFmFinished(); + void addScriptResolver(); + void scriptSelectionChanged(); + void removeScriptResolver(); + private: Ui::SettingsDialog *ui; diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui index 820c61ba8..34b3440bf 100644 --- a/src/settingsdialog.ui +++ b/src/settingsdialog.ui @@ -23,7 +23,7 @@ - 0 + 3 @@ -456,6 +456,110 @@ + + + Script Resolvers + + + + + + Loaded script resolvers: + + + + + + + + + true + + + QAbstractItemView::SingleSelection + + + false + + + false + + + true + + + 2 + + + false + + + true + + + 150 + + + true + + + true + + + + 1 + + + + + 2 + + + + + + + + + + + + + + :/data/images/list-add.png:/data/images/list-add.png + + + + + + + + + + + :/data/images/list-remove.png:/data/images/list-remove.png + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + @@ -470,7 +574,9 @@ - + + + buttonBox @@ -479,8 +585,8 @@ accept() - 398 - 374 + 402 + 348 157 @@ -495,8 +601,8 @@ reject() - 466 - 380 + 470 + 348 286 @@ -511,12 +617,12 @@ setVisible(bool) - 480 - 124 + 489 + 117 - 496 - 154 + 595 + 145 @@ -527,12 +633,12 @@ setVisible(bool) - 483 - 124 + 492 + 117 - 114 - 154 + 123 + 145 @@ -543,12 +649,12 @@ setVisible(bool) - 461 - 124 + 470 + 117 - 114 - 182 + 123 + 173 @@ -563,8 +669,8 @@ 112 - 439 - 163 + 594 + 172 diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp index eadf33f5a..b620e7649 100644 --- a/src/tomahawkapp.cpp +++ b/src/tomahawkapp.cpp @@ -321,10 +321,17 @@ TomahawkApp::setupPipeline() { // setup resolvers for local content, and (cached) remote collection content Pipeline::instance()->addResolver( new DatabaseResolver( 100 ) ); - -// new ScriptResolver("/home/rj/src/tomahawk-core/contrib/magnatune/magnatune-resolver.php"); + + // load script resolvers + foreach( QString resolver,TomahawkSettings::instance()->scriptResolvers() ) + addScriptResolver( resolver ); } +void +TomahawkApp::addScriptResolver( const QString& path ) +{ + m_scriptResolvers << new ScriptResolver( path ); +} void TomahawkApp::initLocalCollection()