Fix order of single-track album tracks.
This commit is contained in:
@@ -285,7 +285,7 @@ QVariant AlbumsModel::data(const QModelIndex &index, int role) const
|
||||
}
|
||||
return text.mid(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
@@ -360,6 +360,7 @@ void AlbumsModel::update(const MusicLibraryItemRoot *root)
|
||||
a->setSongs(albumItem);
|
||||
a->genres=albumItem->genres();
|
||||
a->updated=true;
|
||||
a->isSingleTracks=albumItem->isSingleTracks();
|
||||
items.append(a);
|
||||
changed=true;
|
||||
}
|
||||
@@ -422,9 +423,8 @@ AlbumsModel::AlbumItem::~AlbumItem()
|
||||
|
||||
void AlbumsModel::AlbumItem::setSongs(MusicLibraryItemAlbum *ai)
|
||||
{
|
||||
for (int j = 0; j < ai->childCount(); j++) {
|
||||
MusicLibraryItemSong *songItem = static_cast<MusicLibraryItemSong*>(ai->child(j));
|
||||
songs.append(new SongItem(songItem->song(), this));
|
||||
foreach (MusicLibraryItem *item, ai->children()) {
|
||||
songs.append(new SongItem(static_cast<MusicLibraryItemSong*>(item)->song(), this));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -81,6 +81,7 @@ public:
|
||||
QPixmap *cover;
|
||||
bool updated;
|
||||
bool coverRequested;
|
||||
bool isSingleTracks;
|
||||
};
|
||||
|
||||
AlbumsModel(QObject *parent=0);
|
||||
|
||||
@@ -98,8 +98,21 @@ bool AlbumsProxyModel::lessThan(const QModelIndex &left, const QModelIndex &righ
|
||||
if (l->isAlbum() && r->isAlbum()) {
|
||||
return static_cast<AlbumsModel::AlbumItem *>(l)->name.localeAwareCompare(static_cast<AlbumsModel::AlbumItem *>(r)->name)<0;
|
||||
} else if(!l->isAlbum() && !r->isAlbum()) {
|
||||
return static_cast<AlbumsModel::SongItem *>(l)->track<static_cast<AlbumsModel::SongItem *>(r)->track;
|
||||
const AlbumsModel::SongItem * const leftItem = static_cast<AlbumsModel::SongItem *>(left.internalPointer());
|
||||
const AlbumsModel::SongItem * const rightItem = static_cast<AlbumsModel::SongItem *>(right.internalPointer());
|
||||
bool singleTracks=leftItem->parent->isSingleTracks;
|
||||
|
||||
if (singleTracks) {
|
||||
int compare=leftItem->artistSong().localeAwareCompare(rightItem->artistSong());
|
||||
if (0!=compare) {
|
||||
return compare<0;
|
||||
}
|
||||
}
|
||||
if (leftItem->disc != rightItem->disc) {
|
||||
return leftItem->disc < rightItem->disc;
|
||||
}
|
||||
return leftItem->track < rightItem->track;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user