diff --git a/include/tomahawk/tomahawkapp.h b/include/tomahawk/tomahawkapp.h index d4b7353d0..eedd68ab0 100644 --- a/include/tomahawk/tomahawkapp.h +++ b/include/tomahawk/tomahawkapp.h @@ -67,6 +67,7 @@ public: #endif void addScriptResolver( const QString& scriptPath ); + void removeScriptResolver( const QString& scriptPath ); signals: void settingsChanged(); diff --git a/src/scriptresolver.cpp b/src/scriptresolver.cpp index 755f2b415..bb74f13ef 100644 --- a/src/scriptresolver.cpp +++ b/src/scriptresolver.cpp @@ -21,6 +21,11 @@ ScriptResolver::ScriptResolver(const QString& exe) : m_proc.start( m_cmd ); } +ScriptResolver::~ScriptResolver() +{ + Tomahawk::Pipeline::instance()->removeResolver( this ); +} + void ScriptResolver::readStderr() { diff --git a/src/scriptresolver.h b/src/scriptresolver.h index a5164fbdb..8d83e3656 100644 --- a/src/scriptresolver.h +++ b/src/scriptresolver.h @@ -15,7 +15,8 @@ class ScriptResolver : public Tomahawk::Resolver Q_OBJECT public: explicit ScriptResolver(const QString& exe); - + virtual ~ScriptResolver(); + virtual QString name() const { return m_name; } virtual unsigned int weight() const { return m_weight; } virtual unsigned int preference() const { return m_preference; } @@ -23,6 +24,7 @@ public: virtual void resolve( const QVariant& v ); + QString exe() const { return m_cmd; } signals: public slots: diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index 03b41add8..3ebe57d94 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -348,7 +348,10 @@ SettingsDialog::removeScriptResolver() { // only one selection if( !ui->scriptList->selectedItems().isEmpty() ) { + QString resolver = ui->scriptList->selectedItems().first()->data( 1, Qt::DisplayRole ).toString(); delete ui->scriptList->takeTopLevelItem( ui->scriptList->indexOfTopLevelItem( ui->scriptList->selectedItems().first() ) ); + + TomahawkApp::instance()->removeScriptResolver( resolver ); } } diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp index 30a8c1290..f6b01fa19 100644 --- a/src/tomahawkapp.cpp +++ b/src/tomahawkapp.cpp @@ -333,6 +333,19 @@ TomahawkApp::addScriptResolver( const QString& path ) m_scriptResolvers << new ScriptResolver( path ); } +void +TomahawkApp::removeScriptResolver( const QString& path ) +{ + foreach( ScriptResolver* r, m_scriptResolvers ) { + if( r->exe() == path ) { + m_scriptResolvers.removeAll( r ); + + delete r; + return; + } + } +} + void TomahawkApp::initLocalCollection() {