Fix order of single-track album tracks.

This commit is contained in:
craig
2012-01-04 19:16:16 +00:00
parent 7dad99ec88
commit 1f8cb70747
3 changed files with 20 additions and 6 deletions

View File

@@ -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));
}
}

View File

@@ -81,6 +81,7 @@ public:
QPixmap *cover;
bool updated;
bool coverRequested;
bool isSingleTracks;
};
AlbumsModel(QObject *parent=0);

View File

@@ -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;
}
}