diff --git a/src/libtomahawk/playlist/trackproxymodel.cpp b/src/libtomahawk/playlist/trackproxymodel.cpp index 6b42a6051..b9e8b4629 100644 --- a/src/libtomahawk/playlist/trackproxymodel.cpp +++ b/src/libtomahawk/playlist/trackproxymodel.cpp @@ -69,7 +69,7 @@ TrackProxyModel::filterAcceptsRow( int sourceRow, const QModelIndex& sourceParen return false; 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; Tomahawk::result_ptr r; @@ -190,7 +190,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c album1 = r->album()->name(); track1 = r->track(); albumpos1 = r->albumpos(); - discnumber1 = r->discnumber(); + discnumber1 = qMax( 1, (int)r->discnumber() ); bitrate1 = r->bitrate(); mtime1 = r->modificationTime(); id1 = r->trackId(); @@ -203,7 +203,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c album2 = r->album()->name(); track2 = r->track(); albumpos2 = r->albumpos(); - discnumber2 = r->discnumber(); + discnumber2 = qMax( 1, (int)r->discnumber() ); bitrate2 = r->bitrate(); mtime2 = r->modificationTime(); id2 = r->trackId(); @@ -223,7 +223,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c { if ( album1 == album2 ) { - if( discnumber1 == discnumber2 ) + if ( discnumber1 == discnumber2 ) { if ( albumpos1 == albumpos2 ) return id1 < id2; @@ -243,7 +243,7 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c { if ( album1 == album2 ) { - if( discnumber1 == discnumber2 ) + if ( discnumber1 == discnumber2 ) { if ( albumpos1 == albumpos2 ) return id1 < id2; @@ -277,6 +277,18 @@ TrackProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) c 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& rights = sourceModel()->data( right ).toString(); diff --git a/src/libtomahawk/playlist/treeproxymodel.cpp b/src/libtomahawk/playlist/treeproxymodel.cpp index e9494f32e..ff2e3e9c9 100644 --- a/src/libtomahawk/playlist/treeproxymodel.cpp +++ b/src/libtomahawk/playlist/treeproxymodel.cpp @@ -301,28 +301,35 @@ TreeProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) co albumpos2 = p2->query()->albumpos(); 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() ) - 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 ) + if ( discnumber1 != discnumber2 ) + { return discnumber1 < discnumber2; + } else { if ( albumpos1 != albumpos2 ) return albumpos1 < albumpos2; } + const QString& lefts = textForItem( p1 ); + const QString& rights = textForItem( p2 ); if ( lefts == rights ) return (qint64)&p1 < (qint64)&p2;