diff --git a/src/libtomahawk/resolvers/JSResolverHelper.cpp b/src/libtomahawk/resolvers/JSResolverHelper.cpp index 5aef37e2a..e7a7bc1c2 100644 --- a/src/libtomahawk/resolvers/JSResolverHelper.cpp +++ b/src/libtomahawk/resolvers/JSResolverHelper.cpp @@ -248,6 +248,11 @@ JSResolverHelper::parseTrack( const QVariantMap& track ) void JSResolverHelper::addUrlResult( const QString& url, const QVariantMap& result ) { + // It may seem a bit weird, but currently no slot should do anything + // more as we starting on a new URL and not task are waiting for it yet. + m_pendingUrl = QString(); + m_pendingAlbum = album_ptr(); + QString type = result.value( "type" ).toString(); if ( type == "artist" ) { @@ -259,8 +264,15 @@ JSResolverHelper::addUrlResult( const QString& url, const QVariantMap& result ) { QString name = result.value( "name" ).toString(); QString artist = result.value( "artist" ).toString(); - emit m_resolver->informationFound( url, Album::get( Artist::get( artist, true ), name ).objectCast() ); - + album_ptr album = Album::get( Artist::get( artist, true ), name ); + m_pendingUrl = url; + m_pendingAlbum = album; + connect( album.data(), SIGNAL( tracksAdded( QList, Tomahawk::ModelMode, Tomahawk::collection_ptr ) ), + SLOT( tracksAdded( QList, Tomahawk::ModelMode, Tomahawk::collection_ptr ) ) ); + if ( album->tracks().count() > 0 ) + { + emit m_resolver->informationFound( url, album.objectCast() ); + } } else if ( type == "track" ) { @@ -335,6 +347,19 @@ JSResolverHelper::reportCapabilities( const QVariant& v ) } +void +JSResolverHelper::tracksAdded( const QList&, const ModelMode, const collection_ptr&) +{ + // Check if we still are actively waiting + if ( m_pendingAlbum.isNull() || m_pendingUrl.isNull() ) + return; + + emit m_resolver->informationFound( m_pendingUrl, m_pendingAlbum.objectCast() ); + m_pendingAlbum = album_ptr(); + m_pendingUrl = QString(); +} + + void JSResolverHelper::setResolverConfig( const QVariantMap& config ) { diff --git a/src/libtomahawk/resolvers/JSResolverHelper.h b/src/libtomahawk/resolvers/JSResolverHelper.h index 188d43f76..9804c9a6a 100644 --- a/src/libtomahawk/resolvers/JSResolverHelper.h +++ b/src/libtomahawk/resolvers/JSResolverHelper.h @@ -74,6 +74,9 @@ public slots: void reportCapabilities( const QVariant& capabilities ); +private slots: + void tracksAdded( const QList& tracks, const Tomahawk::ModelMode, const Tomahawk::collection_ptr& collection ); + private: Tomahawk::query_ptr parseTrack( const QVariantMap& track ); void returnStreamUrl( const QString& streamUrl, boost::function< void( QSharedPointer< QIODevice >& ) > callback ); @@ -83,5 +86,7 @@ private: bool m_urlCallbackIsAsync; QVariantMap m_resolverConfig; JSResolver* m_resolver; + QString m_pendingUrl; + Tomahawk::album_ptr m_pendingAlbum; }; #endif // JSRESOLVERHELPER_H