diff --git a/src/musicscanner.cpp b/src/musicscanner.cpp index b4f72cce4..4777d95d3 100644 --- a/src/musicscanner.cpp +++ b/src/musicscanner.cpp @@ -82,7 +82,7 @@ DirLister::scanDir( QDir dir, int depth, DirLister::Mode mode ) return; } - tDebug( LOGVERBOSE ) << "DirLister::scanDir scanning: " << dir.canonicalPath() << " with mode " << mode; + tDebug( LOGVERBOSE ) << "DirLister::scanDir scanning:" << dir.canonicalPath() << "with mode" << mode; if( !dir.exists() ) { tDebug( LOGVERBOSE ) << "Dir no longer exists, not scanning"; diff --git a/src/sourcetree/items/collectionitem.cpp b/src/sourcetree/items/collectionitem.cpp index 66ded6924..bbb07e0a6 100644 --- a/src/sourcetree/items/collectionitem.cpp +++ b/src/sourcetree/items/collectionitem.cpp @@ -138,6 +138,18 @@ CollectionItem::text() const } +int +CollectionItem::IDValue() const +{ + if( m_source.isNull() ) + return -1; + if( m_source->isLocal() ) + return 0; + + return m_source->id(); +} + + int CollectionItem::peerSortValue() const { diff --git a/src/sourcetree/items/collectionitem.h b/src/sourcetree/items/collectionitem.h index 5b1f0341e..f0596866e 100644 --- a/src/sourcetree/items/collectionitem.h +++ b/src/sourcetree/items/collectionitem.h @@ -37,6 +37,7 @@ public: virtual void activate(); virtual QIcon icon() const; virtual int peerSortValue() const; + virtual int IDValue() const; Tomahawk::source_ptr source() const; diff --git a/src/sourcetree/items/playlistitems.cpp b/src/sourcetree/items/playlistitems.cpp index a67cd1f13..02cc4e453 100644 --- a/src/sourcetree/items/playlistitems.cpp +++ b/src/sourcetree/items/playlistitems.cpp @@ -87,6 +87,13 @@ PlaylistItem::peerSortValue() const } +int +PlaylistItem::IDValue() const +{ + return m_playlist->createdOn(); +} + + Qt::ItemFlags PlaylistItem::flags() const { @@ -244,6 +251,13 @@ DynamicPlaylistItem::peerSortValue() const } +int +DynamicPlaylistItem::IDValue() const +{ + return m_dynplaylist->createdOn(); +} + + void DynamicPlaylistItem::checkReparentHackNeeded( const DynamicPlaylistRevision& revision ) { diff --git a/src/sourcetree/items/playlistitems.h b/src/sourcetree/items/playlistitems.h index 7ae0d8a96..8febb2d78 100644 --- a/src/sourcetree/items/playlistitems.h +++ b/src/sourcetree/items/playlistitems.h @@ -38,6 +38,7 @@ public: virtual QIcon icon() const; virtual bool setData(const QVariant& v, bool role); virtual int peerSortValue() const; + virtual int IDValue() const; virtual bool activateCurrent(); @@ -67,6 +68,7 @@ public: virtual bool willAcceptDrag( const QMimeData* data ) const; virtual void activate(); virtual int peerSortValue() const; + virtual int IDValue() const; virtual QIcon icon() const; virtual bool activateCurrent(); diff --git a/src/sourcetree/items/sourcetreeitem.h b/src/sourcetree/items/sourcetreeitem.h index b8b971172..f8f57dc3f 100644 --- a/src/sourcetree/items/sourcetreeitem.h +++ b/src/sourcetree/items/sourcetreeitem.h @@ -55,6 +55,7 @@ public: virtual bool dropMimeData( const QMimeData*, Qt::DropAction ) { return false; } virtual bool setData( const QVariant&, bool ) { return false; } virtual int peerSortValue() const { return 0; } // How to sort relative to peers in the tree. + virtual int IDValue() const { return 0; } /// don't call me unless you are a sourcetreeitem. i prefer this to making everyone a friend void beginRowsAdded( int from, int to ) { emit beginChildRowsAdded( from, to ); } diff --git a/src/sourcetree/sourcesmodel.cpp b/src/sourcetree/sourcesmodel.cpp index 9e8ee3741..9e6bde4e7 100644 --- a/src/sourcetree/sourcesmodel.cpp +++ b/src/sourcetree/sourcesmodel.cpp @@ -106,6 +106,8 @@ SourcesModel::data( const QModelIndex& index, int role ) const return itemFromIndex( index )->icon(); case SourcesModel::SortRole: return itemFromIndex( index )->peerSortValue(); + case SourcesModel::IDRole: + return itemFromIndex( index )->IDValue(); } return QVariant(); } diff --git a/src/sourcetree/sourcesmodel.h b/src/sourcetree/sourcesmodel.h index cfcb62776..b67a4604f 100644 --- a/src/sourcetree/sourcesmodel.h +++ b/src/sourcetree/sourcesmodel.h @@ -61,7 +61,8 @@ public: enum Roles { SourceTreeItemRole = Qt::UserRole + 10, SourceTreeItemTypeRole = Qt::UserRole + 11, - SortRole = Qt::UserRole + 12 + SortRole = Qt::UserRole + 12, + IDRole = Qt::UserRole + 13 }; SourcesModel( QObject* parent = 0 ); diff --git a/src/sourcetree/sourcesproxymodel.cpp b/src/sourcetree/sourcesproxymodel.cpp index dfc300803..48f9423d3 100644 --- a/src/sourcetree/sourcesproxymodel.cpp +++ b/src/sourcetree/sourcesproxymodel.cpp @@ -94,5 +94,11 @@ SourcesProxyModel::lessThan( const QModelIndex& left, const QModelIndex& right ) if ( m_model->data( left, SourcesModel::SortRole ) != m_model->data( right, SourcesModel::SortRole ) ) return ( m_model->data( left, SourcesModel::SortRole ).toInt() < m_model->data( right, SourcesModel::SortRole ).toInt() ); - return QString::localeAwareCompare( left.data().toString().toLower(), right.data().toString().toLower() ) < 0; + const QString& lefts = left.data().toString().toLower(); + const QString& rights = right.data().toString().toLower(); + + if ( lefts == rights ) + return ( m_model->data( left, SourcesModel::IDRole ).toInt() < m_model->data( right, SourcesModel::IDRole ).toInt() ); + else + return QString::localeAwareCompare( lefts, rights ) < 0; }