diff --git a/src/libtomahawk/network/servent.cpp b/src/libtomahawk/network/servent.cpp index 1c3fae85f..e85de3456 100644 --- a/src/libtomahawk/network/servent.cpp +++ b/src/libtomahawk/network/servent.cpp @@ -20,6 +20,7 @@ #include "portfwdthread.h" #include "tomahawksettings.h" +#include "utils/tomahawkutils.h" using namespace Tomahawk; @@ -42,7 +43,7 @@ Servent::Servent( QObject* parent ) s_instance = this; setProxy( QNetworkProxy::NoProxy ); - + { boost::function(result_ptr)> fac = boost::bind( &Servent::localFileIODeviceFactory, this, _1 ); @@ -760,9 +761,8 @@ Servent::localFileIODeviceFactory( const Tomahawk::result_ptr& result ) QSharedPointer Servent::httpIODeviceFactory( const Tomahawk::result_ptr& result ) { -/* qDebug() << Q_FUNC_INFO << result->url(); + qDebug() << Q_FUNC_INFO << result->url(); QNetworkRequest req( result->url() ); - QNetworkReply* reply = APP->nam()->get( req ); - return QSharedPointer( reply );*/ - return QSharedPointer(); + QNetworkReply* reply = TomahawkUtils::nam()->get( req ); + return QSharedPointer( reply ); } diff --git a/src/libtomahawk/pipeline.cpp b/src/libtomahawk/pipeline.cpp index 805b2f723..fcb535723 100644 --- a/src/libtomahawk/pipeline.cpp +++ b/src/libtomahawk/pipeline.cpp @@ -199,7 +199,7 @@ Pipeline::shuntNext() query_ptr q; { QMutexLocker lock( &m_mut ); - + if ( m_queries_pending.isEmpty() ) { emit idle(); @@ -255,7 +255,7 @@ Pipeline::shunt( const query_ptr& q ) lasttimeout = r->timeout(); // resolvers aren't allowed to block in this call: - //qDebug() << "Dispaching to resolver" << r->name(); + qDebug() << "Dispatching to resolver" << r->name(); { QMutexLocker lock( &m_mut ); @@ -267,7 +267,7 @@ Pipeline::shunt( const query_ptr& q ) state = m_qidsState.value( q->id() ); } - qDebug() << Q_FUNC_INFO << "inserting to qidsstate:" << q->id() << state + 1; +// qDebug() << Q_FUNC_INFO << "inserting to qidsstate:" << q->id() << state + 1; m_qidsState.insert( q->id(), state + 1 ); } diff --git a/src/scriptresolver.cpp b/src/scriptresolver.cpp index 01b560098..2c6583abb 100644 --- a/src/scriptresolver.cpp +++ b/src/scriptresolver.cpp @@ -2,12 +2,14 @@ #include +#include "artist.h" +#include "album.h" #include "pipeline.h" #include "sourcelist.h" -ScriptResolver::ScriptResolver(const QString& exe) : - Tomahawk::Resolver() +ScriptResolver::ScriptResolver( const QString& exe ) + : Tomahawk::Resolver() , m_cmd( exe ) , m_num_restarts( 0 ) , m_msgsize( 0 ) @@ -15,26 +17,29 @@ ScriptResolver::ScriptResolver(const QString& exe) : , m_stopped( false ) { qDebug() << Q_FUNC_INFO << exe; - connect( &m_proc, SIGNAL(readyReadStandardError()), SLOT(readStderr()) ); - connect( &m_proc, SIGNAL(readyReadStandardOutput()), SLOT(readStdout()) ); - connect( &m_proc, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(cmdExited(int,QProcess::ExitStatus)) ); + connect( &m_proc, SIGNAL( readyReadStandardError() ), SLOT( readStderr() ) ); + connect( &m_proc, SIGNAL( readyReadStandardOutput() ), SLOT( readStdout() ) ); + connect( &m_proc, SIGNAL( finished( int, QProcess::ExitStatus ) ), SLOT( cmdExited( int, QProcess::ExitStatus ) ) ); m_proc.start( m_cmd ); } + ScriptResolver::~ScriptResolver() { Tomahawk::Pipeline::instance()->removeResolver( this ); } -void ScriptResolver::readStderr() +void +ScriptResolver::readStderr() { qDebug() << "SCRIPT_STDERR" << m_cmd << m_proc.readAllStandardError(); } -void ScriptResolver::readStdout() +void +ScriptResolver::readStdout() { qDebug() << Q_FUNC_INFO << m_proc.bytesAvailable(); if( m_msgsize == 0 ) @@ -56,14 +61,17 @@ void ScriptResolver::readStdout() handleMsg( m_msg ); m_msgsize = 0; m_msg.clear(); - if( m_proc.bytesAvailable() ) QTimer::singleShot( 0, this, SLOT(readStdout()) ); + + if( m_proc.bytesAvailable() ) + QTimer::singleShot( 0, this, SLOT( readStdout() ) ); } } -void ScriptResolver::sendMsg( const QByteArray& msg ) +void +ScriptResolver::sendMsg( const QByteArray& msg ) { - qDebug() << Q_FUNC_INFO << m_ready << msg; + qDebug() << Q_FUNC_INFO << m_ready << msg << msg.length(); if( !m_ready ) return; @@ -74,9 +82,10 @@ void ScriptResolver::sendMsg( const QByteArray& msg ) } -void ScriptResolver::handleMsg( const QByteArray& msg ) +void +ScriptResolver::handleMsg( const QByteArray& msg ) { - qDebug() << Q_FUNC_INFO << msg.size() << QString::fromAscii(msg); + qDebug() << Q_FUNC_INFO << msg.size() << QString::fromAscii( msg ); bool ok; QVariant v = m_parser.parse( msg, &ok ); if( !ok || v.type() != QVariant::Map ) @@ -85,7 +94,7 @@ void ScriptResolver::handleMsg( const QByteArray& msg ) return; } QVariantMap m = v.toMap(); - const QString& msgtype = m.value( "_msgtype" ).toString(); + QString msgtype = m.value( "_msgtype" ).toString(); if( msgtype == "settings" ) { @@ -96,13 +105,25 @@ void ScriptResolver::handleMsg( const QByteArray& msg ) if( msgtype == "results" ) { QList< Tomahawk::result_ptr > results; - const QString& qid = m.value( "qid" ).toString(); - const QVariantList& reslist = m.value( "results" ).toList(); + const QString qid = m.value( "qid" ).toString(); + const QVariantList reslist = m.value( "results" ).toList(); Tomahawk::collection_ptr coll = SourceList::instance()->getLocal()->collection(); foreach( const QVariant& rv, reslist ) { - qDebug() << "RES" << rv; + QVariantMap m = rv.toMap(); + qDebug() << "RES" << m; + Tomahawk::result_ptr rp( new Tomahawk::Result() ); + Tomahawk::artist_ptr ap = Tomahawk::Artist::get( 0, m.value( "artist" ).toString(), coll ); + rp->setArtist( ap ); + rp->setAlbum( Tomahawk::Album::get( 0, m.value( "album" ).toString(), ap, coll ) ); + rp->setTrack( m.value( "track" ).toString() ); + rp->setDuration( m.value( "duration" ).toUInt() ); + 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->setRID( uuid() ); rp->setCollection( coll ); results << rp; } @@ -111,7 +132,8 @@ void ScriptResolver::handleMsg( const QByteArray& msg ) } -void ScriptResolver::cmdExited(int code, QProcess::ExitStatus status) +void +ScriptResolver::cmdExited( int code, QProcess::ExitStatus status ) { m_ready = false; qDebug() << Q_FUNC_INFO << "SCRIPT EXITED, code" << code << "status" << status << m_cmd; @@ -121,10 +143,10 @@ void ScriptResolver::cmdExited(int code, QProcess::ExitStatus status) { qDebug() << "*** Script resolver stopped "; emit finished(); - + return; } - + if( m_num_restarts < 10 ) { m_num_restarts++; @@ -138,32 +160,40 @@ void ScriptResolver::cmdExited(int code, QProcess::ExitStatus status) } -void ScriptResolver::resolve( const Tomahawk::query_ptr& query ) +void +ScriptResolver::resolve( const Tomahawk::query_ptr& query ) { -/* m.insert( "_msgtype", "rq" ); - const QByteArray msg = m_serializer.serialize( m ); + QVariantMap m; + m.insert( "_msgtype", "rq" ); + m.insert( "artist", query->artist() ); + m.insert( "track", query->track() ); + m.insert( "qid", query->id() ); + + const QByteArray msg = m_serializer.serialize( QVariant( m ) ); qDebug() << "ASKING SCRIPT RESOLVER TO RESOLVE:" << msg; - sendMsg( msg );*/ + sendMsg( msg ); } -void ScriptResolver::doSetup( const QVariantMap& m ) +void +ScriptResolver::doSetup( const QVariantMap& m ) { qDebug() << Q_FUNC_INFO << m; m_name = m.value( "name" ).toString(); m_weight = m.value( "weight", 0 ).toUInt(); m_timeout = m.value( "timeout", 5000 ).toUInt(); m_preference = m.value( "preference", 0 ).toUInt(); - qDebug() << "SCRIPT" << m_cmd << "READY, " << endl - << " name" << m_name << endl - << " weight" << m_weight << endl - << " timeout" << m_timeout << endl - << " preference" << m_preference - ; + qDebug() << "SCRIPT" << m_cmd << "READY," << endl + << "name" << m_name << endl + << "weight" << m_weight << endl + << "timeout" << m_timeout << endl + << "preference" << m_preference; + m_ready = true; Tomahawk::Pipeline::instance()->addResolver( this ); } + void ScriptResolver::stop() { diff --git a/src/scriptresolver.h b/src/scriptresolver.h index 5dd4c0902..6a43199d6 100644 --- a/src/scriptresolver.h +++ b/src/scriptresolver.h @@ -14,10 +14,11 @@ class ScriptResolver : public Tomahawk::Resolver { Q_OBJECT + public: - explicit ScriptResolver(const QString& exe); + 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; } @@ -26,17 +27,18 @@ public: virtual void resolve( const Tomahawk::query_ptr& query ); void stop(); - + QString exe() const { return m_cmd; } + signals: void finished(); - + public slots: private slots: void readStderr(); void readStdout(); - void cmdExited(int code, QProcess::ExitStatus status); + void cmdExited( int code, QProcess::ExitStatus status ); private: void handleMsg( const QByteArray& msg ); @@ -54,7 +56,6 @@ private: QJson::Parser m_parser; QJson::Serializer m_serializer; - }; #endif // SCRIPTRESOLVER_H