1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-12 09:04:33 +02:00

* Fixed TWK-281: Ignore leading the when sorting by artist name.

This commit is contained in:
Christian Muehlhaeuser
2011-09-06 06:35:14 +02:00
parent 1f955ae8d5
commit dc11760640
8 changed files with 28 additions and 15 deletions

View File

@@ -75,6 +75,7 @@ Artist::Artist( unsigned int id, const QString& name )
, m_currentItem( 0 ) , m_currentItem( 0 )
, m_currentTrack( 0 ) , m_currentTrack( 0 )
{ {
m_sortname = DatabaseImpl::sortname( name, true );
} }

View File

@@ -45,6 +45,7 @@ public:
unsigned int id() const { return m_id; } unsigned int id() const { return m_id; }
QString name() const { return m_name; } QString name() const { return m_name; }
QString sortname() const { return m_sortname; }
virtual QList<Tomahawk::query_ptr> tracks(); virtual QList<Tomahawk::query_ptr> tracks();
@@ -80,6 +81,7 @@ private slots:
private: private:
unsigned int m_id; unsigned int m_id;
QString m_name; QString m_name;
QString m_sortname;
QList<Tomahawk::query_ptr> m_queries; QList<Tomahawk::query_ptr> m_queries;
result_ptr m_currentItem; result_ptr m_currentItem;

View File

@@ -448,9 +448,16 @@ DatabaseImpl::getTrackFids( int tid )
QString 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;
} }

View File

@@ -59,7 +59,7 @@ public:
QList< QPair<int, float> > searchTable( const QString& table, const QString& name, uint limit = 10 ); QList< QPair<int, float> > searchTable( const QString& table, const QString& name, uint limit = 10 );
QList< int > getTrackFids( int tid ); 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 artist( int id );
QVariantMap album( int id ); QVariantMap album( int id );

View File

@@ -309,8 +309,8 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c
const Tomahawk::query_ptr& q1 = p1->query(); const Tomahawk::query_ptr& q1 = p1->query();
const Tomahawk::query_ptr& q2 = p2->query(); const Tomahawk::query_ptr& q2 = p2->query();
QString artist1 = q1->artist(); QString artist1 = q1->artistSortname();
QString artist2 = q2->artist(); QString artist2 = q2->artistSortname();
QString album1 = q1->album(); QString album1 = q1->album();
QString album2 = q2->album(); QString album2 = q2->album();
QString track1 = q1->track(); QString track1 = q1->track();
@@ -324,7 +324,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c
if ( q1->numResults() ) if ( q1->numResults() )
{ {
const Tomahawk::result_ptr& r = q1->results().at( 0 ); const Tomahawk::result_ptr& r = q1->results().at( 0 );
artist1 = r->artist()->name(); artist1 = r->artist()->sortname();
album1 = r->album()->name(); album1 = r->album()->name();
track1 = r->track(); track1 = r->track();
albumpos1 = r->albumpos(); albumpos1 = r->albumpos();
@@ -336,7 +336,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c
if ( q2->numResults() ) if ( q2->numResults() )
{ {
const Tomahawk::result_ptr& r = q2->results().at( 0 ); const Tomahawk::result_ptr& r = q2->results().at( 0 );
artist2 = r->artist()->name(); artist2 = r->artist()->sortname();
album2 = r->album()->name(); album2 = r->album()->name();
track2 = r->track(); track2 = r->track();
albumpos2 = r->albumpos(); albumpos2 = r->albumpos();

View File

@@ -360,15 +360,15 @@ TreeProxyModel::textForItem( TreeModelItem* item ) const
if ( !item->artist().isNull() ) if ( !item->artist().isNull() )
{ {
return item->artist()->name(); return DatabaseImpl::sortname( item->artist()->name(), true );
} }
else if ( !item->album().isNull() ) else if ( !item->album().isNull() )
{ {
return item->album()->name(); return DatabaseImpl::sortname( item->album()->name() );
} }
else if ( !item->result().isNull() ) else if ( !item->result().isNull() )
{ {
return item->result()->track(); return DatabaseImpl::sortname( item->result()->track() );
} }
return QString(); return QString();

View File

@@ -117,13 +117,13 @@ Query::updateSortNames()
{ {
if ( isFullTextQuery() ) if ( isFullTextQuery() )
{ {
m_artistSortname = DatabaseImpl::sortname( m_fullTextQuery ); m_artistSortname = DatabaseImpl::sortname( m_fullTextQuery, true );
m_albumSortname = m_artistSortname; m_albumSortname = DatabaseImpl::sortname( m_fullTextQuery );
m_trackSortname = m_artistSortname; m_trackSortname = m_albumSortname;
} }
else else
{ {
m_artistSortname = DatabaseImpl::sortname( m_artist ); m_artistSortname = DatabaseImpl::sortname( m_artist, true );
m_albumSortname = DatabaseImpl::sortname( m_album ); m_albumSortname = DatabaseImpl::sortname( m_album );
m_trackSortname = DatabaseImpl::sortname( m_track ); m_trackSortname = DatabaseImpl::sortname( m_track );
} }
@@ -393,7 +393,7 @@ float
Query::howSimilar( const Tomahawk::result_ptr& r ) Query::howSimilar( const Tomahawk::result_ptr& r )
{ {
// result values // 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 rAlbumname = DatabaseImpl::sortname( r->album()->name() );
const QString rTrackname = DatabaseImpl::sortname( r->track() ); const QString rTrackname = DatabaseImpl::sortname( r->track() );

View File

@@ -91,6 +91,9 @@ public:
QString toString() const; QString toString() const;
QString resultHint() const { return m_resultHint; } 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 artist() const { return m_artist; }
QString album() const { return m_album; } QString album() const { return m_album; }
QString track() const { return m_track; } QString track() const { return m_track; }