diff --git a/src/libtomahawk/Query.cpp b/src/libtomahawk/Query.cpp index c8f6cfef1..dfd5236e4 100644 --- a/src/libtomahawk/Query.cpp +++ b/src/libtomahawk/Query.cpp @@ -151,6 +151,7 @@ Query::init() d->solved = false; d->playable = false; d->saveResultHint = false; + d->score = 0.0; } @@ -196,7 +197,7 @@ Query::addResults( const QList< Tomahawk::result_ptr >& newresults ) }*/ d->results << newresults; - qStableSort( d->results.begin(), d->results.end(), Query::resultSorter ); + qStableSort( d->results.begin(), d->results.end(), std::bind( &Query::resultSorter, this, std::placeholders::_1, std::placeholders::_2 ) ); // hook up signals, and check solved status foreach( const result_ptr& rp, newresults ) @@ -265,8 +266,8 @@ Query::onResultStatusChanged() { Q_D( Query ); QMutexLocker lock( &d->mutex ); - if ( d->results.count() ) - qStableSort( d->results.begin(), d->results.end(), Query::resultSorter ); + if ( !d->results.isEmpty() ) + qStableSort( d->results.begin(), d->results.end(), std::bind( &Query::resultSorter, this, std::placeholders::_1, std::placeholders::_2 ) ); } checkResults(); @@ -404,8 +405,8 @@ Query::id() const bool Query::resultSorter( const result_ptr& left, const result_ptr& right ) { - const float ls = left->isOnline() ? left->score() : 0.0; - const float rs = right->isOnline() ? right->score() : 0.0; + const float ls = left->isOnline() ? howSimilar( left ) : 0.0; + const float rs = right->isOnline() ? howSimilar( right ) : 0.0; if ( ls == rs ) { @@ -509,6 +510,10 @@ void Query::checkResults() { Q_D( Query ); + if ( !d->results.isEmpty() ) + { + d->score = howSimilar( d->results.first() ); + } bool playable = false; bool solved = false; @@ -521,7 +526,7 @@ Query::checkResults() if ( rp->playable() ) playable = true; - if ( rp->isOnline() && rp->score() > 0.99 ) + if ( rp->isOnline() && howSimilar( rp ) > 0.99 ) { solved = true; } @@ -602,6 +607,14 @@ Query::toString() const } +float +Query::score() const +{ + Q_D( const Query ); + return d->score; +} + + // TODO make clever (ft. featuring live (stuff) etc) float Query::howSimilar( const Tomahawk::result_ptr& r ) @@ -716,4 +729,3 @@ Query::setWeakRef( QWeakPointer weakRef ) Q_D( Query ); d->ownRef = weakRef; } - diff --git a/src/libtomahawk/Query.h b/src/libtomahawk/Query.h index 1b9bb9342..0e27fdf1e 100644 --- a/src/libtomahawk/Query.h +++ b/src/libtomahawk/Query.h @@ -79,6 +79,9 @@ public: /// true when any result has been found (score may be less than 1.0) bool playable() const; + float score() const; + void setScore( float score ); + Tomahawk::Resolver* currentResolver() const; QList< QPointer< Tomahawk::Resolver > > resolvedBy() const; @@ -109,7 +112,7 @@ public: void setWeakRef( QWeakPointer< Tomahawk::Query > weakRef ); /// sorter for list of results - static bool resultSorter( const result_ptr& left, const result_ptr& right ); + bool resultSorter( const result_ptr& left, const result_ptr& right ); signals: void resultsAdded( const QList& ); diff --git a/src/libtomahawk/Result.cpp b/src/libtomahawk/Result.cpp index b989b0ea8..81665c20c 100644 --- a/src/libtomahawk/Result.cpp +++ b/src/libtomahawk/Result.cpp @@ -102,7 +102,6 @@ Result::Result( const QString& url, const track_ptr& track ) , m_bitrate( 0 ) , m_size( 0 ) , m_modtime( 0 ) - , m_score( 0 ) , m_fileId( 0 ) , m_track( track ) { @@ -169,13 +168,6 @@ Result::mimetype() const } -float -Result::score() const -{ - return m_score; -} - - RID Result::id() const { @@ -209,7 +201,7 @@ Result::playable() const } else { - return score() > 0.0; + return true; //FIXME } } @@ -226,7 +218,7 @@ Result::toVariant() const m.insert( "size", size() ); m.insert( "bitrate", bitrate() ); m.insert( "duration", m_track->duration() ); - m.insert( "score", score() ); +// m.insert( "score", score() ); m.insert( "sid", id() ); m.insert( "discnumber", m_track->discnumber() ); m.insert( "albumpos", m_track->albumpos() ); @@ -243,9 +235,8 @@ Result::toString() const { if ( m_track ) { - return QString( "Result(%1, score: %2) %3 - %4%5 (%6)" ) + return QString( "Result(%1) %2 - %3%4 (%5)" ) .arg( id() ) - .arg( m_score ) .arg( m_track->artist() ) .arg( m_track->track() ) .arg( m_track->album().isEmpty() ? QString() : QString( " on %1" ).arg( m_track->album() ) ) @@ -253,9 +244,8 @@ Result::toString() const } else { - return QString( "Result(%1, score: %2) (%3)" ) + return QString( "Result(%1) (%2)" ) .arg( id() ) - .arg( m_score ) .arg( m_url ); } } @@ -478,13 +468,6 @@ Result::modificationTime() const } -void -Result::setScore( float score ) -{ - m_score = score; -} - - void Result::setFileId( unsigned int id ) { diff --git a/src/libtomahawk/Result.h b/src/libtomahawk/Result.h index 5a99ac73e..470cfa9a5 100644 --- a/src/libtomahawk/Result.h +++ b/src/libtomahawk/Result.h @@ -89,7 +89,6 @@ public: */ ResultProvider* resolvedBy() const; - float score() const; RID id() const; bool isOnline() const; bool playable() const; @@ -112,7 +111,6 @@ public: unsigned int size() const; unsigned int modificationTime() const; - void setScore( float score ); void setFileId( unsigned int id ); void setRID( RID id ) { m_rid = id; } @@ -174,8 +172,6 @@ private: unsigned int m_bitrate; unsigned int m_size; unsigned int m_modtime; - float m_score; - unsigned int m_fileId; track_ptr m_track;