diff --git a/src/libtomahawk/Query.cpp b/src/libtomahawk/Query.cpp index 98a54a610..51c7741fc 100644 --- a/src/libtomahawk/Query.cpp +++ b/src/libtomahawk/Query.cpp @@ -622,6 +622,10 @@ float Query::howSimilar( const Tomahawk::result_ptr& r ) { Q_D( Query ); + if (d->howSimilarCache.find(r->id()) != d->howSimilarCache.end()) + { + return d->howSimilarCache[r->id()]; + } // result values const QString& rArtistname = r->track()->artistSortname(); const QString& rAlbumname = r->track()->albumSortname(); @@ -678,12 +682,16 @@ Query::howSimilar( const Tomahawk::result_ptr& r ) const int mlatr = qMax( artistTrackname.length(), rArtistTrackname.length() ); const float dcatr = (float)( mlatr - atrdist ) / mlatr; - return qMax( dctrk, qMax( dcatr, qMax( dcart, dcalb ) ) ); + float resultScore = qMax( dctrk, qMax( dcatr, qMax( dcart, dcalb ) ) ); + d->howSimilarCache[r->id()] = resultScore; + return resultScore; } else { // weighted, so album match is worth less than track title - return ( dcart * 4 + dcalb + dctrk * 5 ) / 10; + float resultScore = ( dcart * 4 + dcalb + dctrk * 5 ) / 10; + d->howSimilarCache[r->id()] = resultScore; + return resultScore; } } diff --git a/src/libtomahawk/Query_p.h b/src/libtomahawk/Query_p.h index 635c8bbc6..f3de7f009 100644 --- a/src/libtomahawk/Query_p.h +++ b/src/libtomahawk/Query_p.h @@ -4,6 +4,7 @@ #include "Query.h" #include +#include namespace Tomahawk { @@ -58,6 +59,8 @@ private: mutable QMutex mutex; QWeakPointer< Tomahawk::Query > ownRef; + + std::map howSimilarCache; }; } // Tomahawk