diff --git a/src/resolvers/qtscriptresolver.cpp b/src/resolvers/qtscriptresolver.cpp index 5498ca7bb..6924b234e 100644 --- a/src/resolvers/qtscriptresolver.cpp +++ b/src/resolvers/qtscriptresolver.cpp @@ -10,11 +10,15 @@ QtScriptResolver::QtScriptResolver( const QString& scriptPath ) : Tomahawk::ExternalResolver( scriptPath ) , m_engine( new ScriptEngine( this ) ) + , m_thread( new QThread( this ) ) , m_ready( false ) , m_stopped( false ) { qDebug() << Q_FUNC_INFO << scriptPath; + m_engine->moveToThread( m_thread ); + m_thread->start(); + QFile scriptFile( scriptPath ); scriptFile.open( QIODevice::ReadOnly ); m_engine->mainFrame()->setHtml( "
" ); @@ -47,13 +51,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; - } + QMetaObject::invokeMethod( m_engine, "resolve", Qt::QueuedConnection, Q_ARG( Tomahawk::query_ptr, query ) ); +} + +void +ScriptEngine::resolve( const Tomahawk::query_ptr& query ) +{ qDebug() << Q_FUNC_INFO << query->toString(); QString eval = QString( "resolve( '%1', '%2', '%3', '%4' );" ) .arg( query->id().replace( "'", "\\'" ) ) @@ -63,7 +67,7 @@ QtScriptResolver::resolve( const Tomahawk::query_ptr& query ) QList< Tomahawk::result_ptr > results; - QVariantMap m = m_engine->mainFrame()->evaluateJavaScript( eval ).toMap(); + QVariantMap m = mainFrame()->evaluateJavaScript( eval ).toMap(); qDebug() << "JavaScript Result:" << m; const QString qid = m.value( "qid" ).toString(); @@ -83,9 +87,9 @@ QtScriptResolver::resolve( const Tomahawk::query_ptr& query ) rp->setBitrate( m.value( "bitrate" ).toUInt() ); rp->setUrl( m.value( "url" ).toString() ); rp->setSize( m.value( "size" ).toUInt() ); - rp->setScore( m.value( "score" ).toFloat() * ( (float)weight() / 100.0 ) ); + rp->setScore( m.value( "score" ).toFloat() * ( (float)m_parent->weight() / 100.0 ) ); rp->setRID( uuid() ); - rp->setFriendlySource( m_name ); + rp->setFriendlySource( m_parent->name() ); rp->setMimetype( m.value( "mimetype" ).toString() ); if ( rp->mimetype().isEmpty() ) diff --git a/src/resolvers/qtscriptresolver.h b/src/resolvers/qtscriptresolver.h index 3c1971ad2..9df82a1f4 100644 --- a/src/resolvers/qtscriptresolver.h +++ b/src/resolvers/qtscriptresolver.h @@ -11,25 +11,32 @@ #include