diff --git a/models/musiclibraryitemalbum.h b/models/musiclibraryitemalbum.h index d7978cfa0..51a9b5875 100644 --- a/models/musiclibraryitemalbum.h +++ b/models/musiclibraryitemalbum.h @@ -111,7 +111,7 @@ private: Song::Type m_type; QSet m_singleTrackFiles; QString m_imageUrl; - // m_artists is used to cache the list of artists in a vraious artists albu + // m_artists is used to cache the list of artists in a various artists album // this is built when containsArtist() is called, and is mainly used by the // context view QSet m_artists; diff --git a/models/musiclibrarymodel.cpp b/models/musiclibrarymodel.cpp index b65d1ea7a..7cefdb4c6 100644 --- a/models/musiclibrarymodel.cpp +++ b/models/musiclibrarymodel.cpp @@ -579,26 +579,40 @@ QList MusicLibraryModel::getAlbumTracks(const Song &s) const QList MusicLibraryModel::getArtistAlbumsFirstTracks(const Song &song) const { - QString artist=song.isVariousArtists() ? song.artist : song.albumArtist(); + //QString artist=song.isVariousArtists() ? song.artist : song.albumArtist(); QString basicArtist=song.basicArtist(); QList tracks; + bool foundCurrent=false; + bool checkAll=!song.isVariousArtists() && song.albumArtist()!=basicArtist; + foreach (MusicLibraryItem *ar, rootItem->childItems()) { - if (static_cast(ar)->isVarious()) { + if (static_cast(ar)->isVarious() || checkAll) { foreach (MusicLibraryItem *al, static_cast(ar)->childItems()) { MusicLibraryItemAlbum *a=static_cast(al); if (a->containsArtist(basicArtist)) { - tracks.append(static_cast(a->childItems().first())->song()); + Song first=static_cast(a->childItems().first())->song(); + tracks.append(first); + if (!foundCurrent && first.album==song.album && first.albumArtist()==song.albumArtist()) { + foundCurrent=true; + } } } - } else if (ar->data()==artist || ar->data()==basicArtist) { + } else if (ar->data()==basicArtist) { // i.e. album-artist == basic artist (most cases!) foreach (MusicLibraryItem *al, static_cast(ar)->childItems()) { MusicLibraryItemContainer *a=static_cast(al); if (!a->childItems().isEmpty()) { - tracks.append(static_cast(a->childItems().first())->song()); + Song first=static_cast(a->childItems().first())->song(); + tracks.append(first); + if (!foundCurrent && first.album==song.album && first.albumArtist()==song.albumArtist()) { + foundCurrent=true; + } } } } } + if (!foundCurrent) { + tracks.append(song); + } return tracks; }