From 1d2bb5be6280deb71da033c69f823fafb8687d17 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 16 Mar 2011 12:22:50 +0100 Subject: [PATCH] * Made sure to call resolve in the right thread. --- src/libtomahawk/database/databaseresolver.h | 1 + src/libtomahawk/resolver.h | 4 +++- src/resolvers/qtscriptresolver.cpp | 7 +++++++ src/resolvers/qtscriptresolver.h | 3 +-- src/resolvers/scriptresolver.h | 3 +-- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/libtomahawk/database/databaseresolver.h b/src/libtomahawk/database/databaseresolver.h index fa553a118..d2877c0c5 100644 --- a/src/libtomahawk/database/databaseresolver.h +++ b/src/libtomahawk/database/databaseresolver.h @@ -20,6 +20,7 @@ public: virtual unsigned int preference() const { return 100; } virtual unsigned int timeout() const { return 2500; } +public slots: virtual void resolve( const Tomahawk::query_ptr& query ); private slots: diff --git a/src/libtomahawk/resolver.h b/src/libtomahawk/resolver.h index 68528a1e3..ce20baa34 100644 --- a/src/libtomahawk/resolver.h +++ b/src/libtomahawk/resolver.h @@ -30,13 +30,15 @@ public: virtual unsigned int weight() const = 0; virtual unsigned int preference() const { return 100; }; virtual unsigned int timeout() const = 0; - virtual void resolve( const Tomahawk::query_ptr& query ) = 0; //virtual QWidget * configUI() { return 0; }; //etc PluginAPI * api() const { return m_api; } +public slots: + virtual void resolve( const Tomahawk::query_ptr& query ) = 0; + private: PluginAPI * m_api; }; diff --git a/src/resolvers/qtscriptresolver.cpp b/src/resolvers/qtscriptresolver.cpp index cf4ec225e..5498ca7bb 100644 --- a/src/resolvers/qtscriptresolver.cpp +++ b/src/resolvers/qtscriptresolver.cpp @@ -47,6 +47,13 @@ QtScriptResolver::~QtScriptResolver() void QtScriptResolver::resolve( const Tomahawk::query_ptr& query ) { + if ( QThread::currentThread() != thread() ) + { + qDebug() << "Reinvoking in correct thread:" << Q_FUNC_INFO; + QMetaObject::invokeMethod( this, "resolve", Qt::QueuedConnection, Q_ARG( Tomahawk::query_ptr, query ) ); + return; + } + qDebug() << Q_FUNC_INFO << query->toString(); QString eval = QString( "resolve( '%1', '%2', '%3', '%4' );" ) .arg( query->id().replace( "'", "\\'" ) ) diff --git a/src/resolvers/qtscriptresolver.h b/src/resolvers/qtscriptresolver.h index cb791ad5a..3c1971ad2 100644 --- a/src/resolvers/qtscriptresolver.h +++ b/src/resolvers/qtscriptresolver.h @@ -45,9 +45,8 @@ public: virtual unsigned int preference() const { return m_preference; } virtual unsigned int timeout() const { return m_timeout; } - virtual void resolve( const Tomahawk::query_ptr& query ); - public slots: + virtual void resolve( const Tomahawk::query_ptr& query ); virtual void stop(); private slots: diff --git a/src/resolvers/scriptresolver.h b/src/resolvers/scriptresolver.h index 097a4a39e..e21d52e64 100644 --- a/src/resolvers/scriptresolver.h +++ b/src/resolvers/scriptresolver.h @@ -24,13 +24,12 @@ public: virtual unsigned int preference() const { return m_preference; } virtual unsigned int timeout() const { return m_timeout; } - virtual void resolve( const Tomahawk::query_ptr& query ); - signals: void finished(); public slots: virtual void stop(); + virtual void resolve( const Tomahawk::query_ptr& query ); private slots: void readStderr();