diff --git a/src/libtomahawk/widgets/SearchWidget.cpp b/src/libtomahawk/widgets/SearchWidget.cpp index 4a3e1e541..38cbe2122 100644 --- a/src/libtomahawk/widgets/SearchWidget.cpp +++ b/src/libtomahawk/widgets/SearchWidget.cpp @@ -116,6 +116,8 @@ SearchWidget::jumpToCurrentTrack() void SearchWidget::onResultsFound( const QList<Tomahawk::result_ptr>& results ) { + QList<Tomahawk::artist_ptr> artists; + QList<Tomahawk::album_ptr> albums; foreach( const Tomahawk::result_ptr& result, results ) { if ( !result->collection().isNull() && !result->isOnline() ) @@ -129,32 +131,58 @@ SearchWidget::onResultsFound( const QList<Tomahawk::result_ptr>& results ) m_resultsModel->appendQuery( q ); - m_artists << result->artist(); - m_albums << result->album(); + artists << result->artist(); + albums << result->album(); } + + onArtistsFound( artists ); + onAlbumsFound( albums ); } void SearchWidget::onAlbumsFound( const QList<Tomahawk::album_ptr>& albums ) { - m_albums << albums; + foreach ( const Tomahawk::album_ptr& album, albums) + { + int distance = TomahawkUtils::levenshtein( m_search, album->name() ); + int maxlen = qMax( m_search.length(), album->name().length() ); + float score = (float)( maxlen - distance ) / maxlen; + + if ( score <= 0.1 ) + continue; + + m_albums.insert( score, album ); + tDebug() << Q_FUNC_INFO << "found album:" << album->name() << "score:" << score; + } + + updateAlbums(); } void SearchWidget::onArtistsFound( const QList<Tomahawk::artist_ptr>& artists ) { - m_artists << artists; + foreach ( const Tomahawk::artist_ptr& artist, artists ) + { + int distance = TomahawkUtils::levenshtein( m_search, artist->name() ); + int maxlen = qMax( m_search.length(), artist->name().length() ); + float score = (float)( maxlen - distance ) / maxlen; + + if ( score <= 0.1 ) + continue; + + m_artists.insert( score, artist ); + tDebug() << Q_FUNC_INFO << "found artist:" << artist->name() << "score:" << score; + } + + updateArtists(); } void SearchWidget::onQueryFinished() { - sortAlbums(); - sortArtists(); - m_artistsModel->finishLoading(); m_albumsModel->finishLoading(); m_resultsModel->finishLoading(); @@ -162,25 +190,15 @@ SearchWidget::onQueryFinished() void -SearchWidget::sortArtists() +SearchWidget::updateArtists() { - QMap< float, Tomahawk::artist_ptr > ars; QList< Tomahawk::artist_ptr > sortedArtists; - foreach ( const Tomahawk::artist_ptr& artist, m_artists ) - { - int distance = TomahawkUtils::levenshtein( m_search, artist->name() ); - int maxlen = qMax( m_search.length(), artist->name().length() ); - float score = (float)( maxlen - distance ) / maxlen; - - ars.insert( score, artist ); - } - - QList< float > floats = ars.keys(); + QList< float > floats = m_artists.keys(); qSort( floats.begin(), floats.end() ); for ( int i = floats.count() - 1; i >= 0; i-- ) { - sortedArtists << ars.value( floats.at( i ) ); + sortedArtists << m_artists.value( floats.at( i ) ); } m_artistsModel->clear(); @@ -189,25 +207,15 @@ SearchWidget::sortArtists() void -SearchWidget::sortAlbums() +SearchWidget::updateAlbums() { - QMap< float, Tomahawk::album_ptr > ars; QList< Tomahawk::album_ptr > sortedAlbums; - foreach ( const Tomahawk::album_ptr& album, m_albums ) - { - int distance = TomahawkUtils::levenshtein( m_search, album->name() ); - int maxlen = qMax( m_search.length(), album->name().length() ); - float score = (float)( maxlen - distance ) / maxlen; - - ars.insert( score, album ); - } - - QList< float > floats = ars.keys(); + QList< float > floats = m_albums.keys(); qSort( floats.begin(), floats.end() ); for ( int i = floats.count() - 1; i >= 0; i-- ) { - sortedAlbums << ars.value( floats.at( i ) ); + sortedAlbums << m_albums.value( floats.at( i ) ); } m_albumsModel->clear(); diff --git a/src/libtomahawk/widgets/SearchWidget.h b/src/libtomahawk/widgets/SearchWidget.h index 8955f8904..c4da8481e 100644 --- a/src/libtomahawk/widgets/SearchWidget.h +++ b/src/libtomahawk/widgets/SearchWidget.h @@ -72,8 +72,8 @@ private slots: void onQueryFinished(); private: - void sortArtists(); - void sortAlbums(); + void updateArtists(); + void updateAlbums(); Ui::SearchWidget *ui; @@ -84,8 +84,8 @@ private: PlaylistModel* m_resultsModel; QList< Tomahawk::query_ptr > m_queries; - QList< Tomahawk::artist_ptr > m_artists; - QList< Tomahawk::album_ptr > m_albums; + QMap< float, Tomahawk::artist_ptr > m_artists; + QMap< float, Tomahawk::album_ptr > m_albums; }; #endif // NEWPLAYLISTWIDGET_H