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:
@@ -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 );
|
||||||
|
}
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user