diff --git a/src/libtomahawk/artist.cpp b/src/libtomahawk/artist.cpp index abc06c467..ce0c43ab6 100644 --- a/src/libtomahawk/artist.cpp +++ b/src/libtomahawk/artist.cpp @@ -75,6 +75,7 @@ Artist::Artist( unsigned int id, const QString& name ) , m_currentItem( 0 ) , m_currentTrack( 0 ) { + m_sortname = DatabaseImpl::sortname( name, true ); } diff --git a/src/libtomahawk/artist.h b/src/libtomahawk/artist.h index 26d655b2a..ba0b47dd2 100644 --- a/src/libtomahawk/artist.h +++ b/src/libtomahawk/artist.h @@ -45,6 +45,7 @@ public: unsigned int id() const { return m_id; } QString name() const { return m_name; } + QString sortname() const { return m_sortname; } virtual QList tracks(); @@ -80,6 +81,7 @@ private slots: private: unsigned int m_id; QString m_name; + QString m_sortname; QList m_queries; result_ptr m_currentItem; diff --git a/src/libtomahawk/database/databaseimpl.cpp b/src/libtomahawk/database/databaseimpl.cpp index b8490ee2d..e042930ab 100644 --- a/src/libtomahawk/database/databaseimpl.cpp +++ b/src/libtomahawk/database/databaseimpl.cpp @@ -448,9 +448,16 @@ DatabaseImpl::getTrackFids( int tid ) QString -DatabaseImpl::sortname( const QString& str ) +DatabaseImpl::sortname( const QString& str, bool replaceArticle ) { - return str.toLower().trimmed().replace( QRegExp("[\\s]{2,}"), " " ); + QString s = str.toLower().trimmed().replace( QRegExp( "[\\s]{2,}" ), " " ); + + if ( replaceArticle && s.startsWith( "the " ) ) + { + s = s.right( s.length() - 4 ); + } + + return s; } diff --git a/src/libtomahawk/database/databaseimpl.h b/src/libtomahawk/database/databaseimpl.h index c7688b718..2e814f8f8 100644 --- a/src/libtomahawk/database/databaseimpl.h +++ b/src/libtomahawk/database/databaseimpl.h @@ -59,7 +59,7 @@ public: QList< QPair > searchTable( const QString& table, const QString& name, uint limit = 10 ); QList< int > getTrackFids( int tid ); - static QString sortname( const QString& str ); + static QString sortname( const QString& str, bool replaceArticle = false ); QVariantMap artist( int id ); QVariantMap album( int id ); diff --git a/src/libtomahawk/playlist/trackproxymodel.cpp b/src/libtomahawk/playlist/trackproxymodel.cpp index cbdd14a04..8d8954f24 100644 --- a/src/libtomahawk/playlist/trackproxymodel.cpp +++ b/src/libtomahawk/playlist/trackproxymodel.cpp @@ -309,8 +309,8 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c const Tomahawk::query_ptr& q1 = p1->query(); const Tomahawk::query_ptr& q2 = p2->query(); - QString artist1 = q1->artist(); - QString artist2 = q2->artist(); + QString artist1 = q1->artistSortname(); + QString artist2 = q2->artistSortname(); QString album1 = q1->album(); QString album2 = q2->album(); QString track1 = q1->track(); @@ -324,7 +324,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c if ( q1->numResults() ) { const Tomahawk::result_ptr& r = q1->results().at( 0 ); - artist1 = r->artist()->name(); + artist1 = r->artist()->sortname(); album1 = r->album()->name(); track1 = r->track(); albumpos1 = r->albumpos(); @@ -336,7 +336,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c if ( q2->numResults() ) { const Tomahawk::result_ptr& r = q2->results().at( 0 ); - artist2 = r->artist()->name(); + artist2 = r->artist()->sortname(); album2 = r->album()->name(); track2 = r->track(); albumpos2 = r->albumpos(); diff --git a/src/libtomahawk/playlist/treeproxymodel.cpp b/src/libtomahawk/playlist/treeproxymodel.cpp index 422ccc8aa..dd91c0dfd 100644 --- a/src/libtomahawk/playlist/treeproxymodel.cpp +++ b/src/libtomahawk/playlist/treeproxymodel.cpp @@ -360,15 +360,15 @@ TreeProxyModel::textForItem( TreeModelItem* item ) const if ( !item->artist().isNull() ) { - return item->artist()->name(); + return DatabaseImpl::sortname( item->artist()->name(), true ); } else if ( !item->album().isNull() ) { - return item->album()->name(); + return DatabaseImpl::sortname( item->album()->name() ); } else if ( !item->result().isNull() ) { - return item->result()->track(); + return DatabaseImpl::sortname( item->result()->track() ); } return QString(); diff --git a/src/libtomahawk/query.cpp b/src/libtomahawk/query.cpp index 4aa8e7444..bd4a863ce 100644 --- a/src/libtomahawk/query.cpp +++ b/src/libtomahawk/query.cpp @@ -117,13 +117,13 @@ Query::updateSortNames() { if ( isFullTextQuery() ) { - m_artistSortname = DatabaseImpl::sortname( m_fullTextQuery ); - m_albumSortname = m_artistSortname; - m_trackSortname = m_artistSortname; + m_artistSortname = DatabaseImpl::sortname( m_fullTextQuery, true ); + m_albumSortname = DatabaseImpl::sortname( m_fullTextQuery ); + m_trackSortname = m_albumSortname; } else { - m_artistSortname = DatabaseImpl::sortname( m_artist ); + m_artistSortname = DatabaseImpl::sortname( m_artist, true ); m_albumSortname = DatabaseImpl::sortname( m_album ); m_trackSortname = DatabaseImpl::sortname( m_track ); } @@ -393,7 +393,7 @@ float Query::howSimilar( const Tomahawk::result_ptr& r ) { // result values - const QString rArtistname = DatabaseImpl::sortname( r->artist()->name() ); + const QString rArtistname = r->artist()->sortname(); const QString rAlbumname = DatabaseImpl::sortname( r->album()->name() ); const QString rTrackname = DatabaseImpl::sortname( r->track() ); diff --git a/src/libtomahawk/query.h b/src/libtomahawk/query.h index dca702e27..4b12537d7 100644 --- a/src/libtomahawk/query.h +++ b/src/libtomahawk/query.h @@ -91,6 +91,9 @@ public: QString toString() const; QString resultHint() const { return m_resultHint; } + QString artistSortname() const { return m_artistSortname; } + QString albumSortname() const { return m_albumSortname; } + QString trackSortname() const { return m_trackSortname; } QString artist() const { return m_artist; } QString album() const { return m_album; } QString track() const { return m_track; }