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