1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-06 14:16:32 +02:00

* Properly sort artists & albums in search widget.

This commit is contained in:
Christian Muehlhaeuser
2012-06-27 05:22:01 +02:00
parent d7d8c5940f
commit 4a97e057be
2 changed files with 66 additions and 11 deletions

View File

@@ -113,9 +113,6 @@ SearchWidget::jumpToCurrentTrack()
void void
SearchWidget::onResultsFound( const QList<Tomahawk::result_ptr>& results ) 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 ) foreach( const Tomahawk::result_ptr& result, results )
{ {
if ( !result->collection().isNull() && !result->isOnline() ) if ( !result->collection().isNull() && !result->isOnline() )
@@ -125,36 +122,88 @@ SearchWidget::onResultsFound( const QList<Tomahawk::result_ptr>& results )
rl << result; rl << result;
Tomahawk::query_ptr q = result->toQuery(); Tomahawk::query_ptr q = result->toQuery();
q->setResolveFinished( true );
q->addResults( rl ); q->addResults( rl );
m_resultsModel->append( q ); m_resultsModel->append( q );
artists << result->artist(); m_artists << result->artist();
albums << result->album(); m_albums << result->album();
} }
m_artistsModel->append( artists );
m_albumsModel->append( albums );
} }
void void
SearchWidget::onAlbumsFound( const QList<Tomahawk::album_ptr>& albums ) SearchWidget::onAlbumsFound( const QList<Tomahawk::album_ptr>& albums )
{ {
m_albumsModel->append( albums ); m_albums << albums;
} }
void void
SearchWidget::onArtistsFound( const QList<Tomahawk::artist_ptr>& artists ) SearchWidget::onArtistsFound( const QList<Tomahawk::artist_ptr>& artists )
{ {
m_artistsModel->append( artists ); m_artists << artists;
} }
void void
SearchWidget::onQueryFinished() SearchWidget::onQueryFinished()
{ {
sortAlbums();
sortArtists();
m_resultsModel->finishLoading(); m_resultsModel->finishLoading();
} }
void
SearchWidget::sortArtists()
{
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();
qSort( floats.begin(), floats.end() );
for ( int i = floats.count() - 1; i >= 0; i-- )
{
sortedArtists << ars.value( floats.at( i ) );
}
m_artistsModel->clear();
m_artistsModel->append( sortedArtists );
}
void
SearchWidget::sortAlbums()
{
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();
qSort( floats.begin(), floats.end() );
for ( int i = floats.count() - 1; i >= 0; i-- )
{
sortedAlbums << ars.value( floats.at( i ) );
}
m_albumsModel->clear();
m_albumsModel->append( sortedAlbums );
}

View File

@@ -73,6 +73,9 @@ private slots:
void onQueryFinished(); void onQueryFinished();
private: private:
void sortArtists();
void sortAlbums();
Ui::SearchWidget *ui; Ui::SearchWidget *ui;
QString m_search; QString m_search;
@@ -80,7 +83,10 @@ private:
PlayableModel* m_artistsModel; PlayableModel* m_artistsModel;
PlayableModel* m_albumsModel; PlayableModel* m_albumsModel;
PlaylistModel* m_resultsModel; PlaylistModel* m_resultsModel;
QList< Tomahawk::query_ptr > m_queries; QList< Tomahawk::query_ptr > m_queries;
QList< Tomahawk::artist_ptr > m_artists;
QList< Tomahawk::album_ptr > m_albums;
}; };
#endif // NEWPLAYLISTWIDGET_H #endif // NEWPLAYLISTWIDGET_H