1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-07-31 11:20:22 +02:00

* Fixed TWK-758: Sorting playlist by album position.

This commit is contained in:
Christian Muehlhaeuser
2012-03-15 08:42:05 +01:00
parent 042ccbe730
commit 6342e6a9f8
2 changed files with 38 additions and 19 deletions

View File

@@ -69,7 +69,7 @@ TrackProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParen
return false; return false;
const Tomahawk::query_ptr& q = pi->query(); const Tomahawk::query_ptr& q = pi->query();
if( q.isNull() ) // uh oh? filter out invalid queries i guess if ( q.isNull() ) // uh oh? filter out invalid queries i guess
return false; return false;
Tomahawk::result_ptr r; Tomahawk::result_ptr r;
@@ -190,7 +190,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c
album1 = r->album()->name(); album1 = r->album()->name();
track1 = r->track(); track1 = r->track();
albumpos1 = r->albumpos(); albumpos1 = r->albumpos();
discnumber1 = r->discnumber(); discnumber1 = qMax( 1, (int)r->discnumber() );
bitrate1 = r->bitrate(); bitrate1 = r->bitrate();
mtime1 = r->modificationTime(); mtime1 = r->modificationTime();
id1 = r->trackId(); id1 = r->trackId();
@@ -203,7 +203,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c
album2 = r->album()->name(); album2 = r->album()->name();
track2 = r->track(); track2 = r->track();
albumpos2 = r->albumpos(); albumpos2 = r->albumpos();
discnumber2 = r->discnumber(); discnumber2 = qMax( 1, (int)r->discnumber() );
bitrate2 = r->bitrate(); bitrate2 = r->bitrate();
mtime2 = r->modificationTime(); mtime2 = r->modificationTime();
id2 = r->trackId(); id2 = r->trackId();
@@ -223,7 +223,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c
{ {
if ( album1 == album2 ) if ( album1 == album2 )
{ {
if( discnumber1 == discnumber2 ) if ( discnumber1 == discnumber2 )
{ {
if ( albumpos1 == albumpos2 ) if ( albumpos1 == albumpos2 )
return id1 < id2; return id1 < id2;
@@ -243,7 +243,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c
{ {
if ( album1 == album2 ) if ( album1 == album2 )
{ {
if( discnumber1 == discnumber2 ) if ( discnumber1 == discnumber2 )
{ {
if ( albumpos1 == albumpos2 ) if ( albumpos1 == albumpos2 )
return id1 < id2; return id1 < id2;
@@ -277,6 +277,18 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c
return size1 < size2; return size1 < size2;
} }
else if ( left.column() == TrackModel::AlbumPos ) // sort by album pos
{
if ( discnumber1 != discnumber2 )
{
return discnumber1 < discnumber2;
}
else
{
if ( albumpos1 != albumpos2 )
return albumpos1 < albumpos2;
}
}
const QString& lefts = sourceModel()->data( left ).toString(); const QString& lefts = sourceModel()->data( left ).toString();
const QString& rights = sourceModel()->data( right ).toString(); const QString& rights = sourceModel()->data( right ).toString();

View File

@@ -301,28 +301,35 @@ TreeProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) co
albumpos2 = p2->query()->albumpos(); albumpos2 = p2->query()->albumpos();
discnumber2 = p2->query()->discnumber(); discnumber2 = p2->query()->discnumber();
} }
if ( !p1->result().isNull() )
{
if ( albumpos1 == 0 )
albumpos1 = p1->result()->albumpos();
if ( discnumber1 == 0 )
discnumber1 = p1->result()->discnumber();
}
if ( !p2->result().isNull() )
{
if ( albumpos2 == 0 )
albumpos2 = p2->result()->albumpos();
if ( discnumber2 == 0 )
discnumber2 = p2->result()->discnumber();
}
discnumber1 = qMax( 1, (int)discnumber1 );
discnumber2 = qMax( 1, (int)discnumber2 );
if ( albumpos1 == 0 && !p1->result().isNull() ) if ( discnumber1 != discnumber2 )
albumpos1 = p1->result()->albumpos(); {
if ( discnumber1 == 0 && !p1->result().isNull() )
discnumber1 = p1->result()->discnumber();
if ( albumpos2 == 0 && !p2->result().isNull() )
albumpos2 = p2->result()->albumpos();
if ( discnumber2 == 0 && !p2->result().isNull() )
discnumber2 = p2->result()->discnumber();
const QString& lefts = textForItem( p1 );
const QString& rights = textForItem( p2 );
if( discnumber1 != discnumber2 )
return discnumber1 < discnumber2; return discnumber1 < discnumber2;
}
else else
{ {
if ( albumpos1 != albumpos2 ) if ( albumpos1 != albumpos2 )
return albumpos1 < albumpos2; return albumpos1 < albumpos2;
} }
const QString& lefts = textForItem( p1 );
const QString& rights = textForItem( p2 );
if ( lefts == rights ) if ( lefts == rights )
return (qint64)&p1 < (qint64)&p2; return (qint64)&p1 < (qint64)&p2;