When listing albums in context view, if can't find and for artist, try

composer.
Issue #1460
This commit is contained in:
Craig Drummond
2019-03-04 20:08:37 +00:00
committed by Craig Drummond
parent 0690393854
commit 138589aa0a
6 changed files with 21 additions and 6 deletions

View File

@@ -18,6 +18,8 @@
15. Add --fullscreen command-line option to start fullscreen.
16. For genres listed in "Composer Support" tweak, shown composer instead of
artist in context view and toolbar.
17. When listing albums in context view, if can't find and for artist, try
composer.
2.3.3
-----

View File

@@ -199,7 +199,7 @@ void ArtistView::update(const Song &s, bool force)
const QList<LibraryDb::Album> & ArtistView::getArtistAlbums()
{
if (artistAlbums.isEmpty() && !currentSong.isEmpty()) {
artistAlbums=MpdLibraryModel::self()->getArtistAlbums(currentSong.artist);
artistAlbums=MpdLibraryModel::self()->getArtistOrComposerAlbums(currentSong.artist);
}
return artistAlbums;
}

View File

@@ -978,7 +978,7 @@ QList<Song> LibraryDb::songs(const QStringList &files, bool allowPlaylists) cons
return songList;
}
QList<LibraryDb::Album> LibraryDb::getAlbumsWithArtist(const QString &artist)
QList<LibraryDb::Album> LibraryDb::getAlbumsWithArtistOrComposer(const QString &artist)
{
QList<LibraryDb::Album> albums;
if (0!=currentVersion && db) {
@@ -993,6 +993,19 @@ QList<LibraryDb::Album> LibraryDb::getAlbumsWithArtist(const QString &artist)
}
}
if (albums.isEmpty()) {
// No artist albums? Try composer...
SqlQuery query("distinct album, albumId, albumSort", *db);
query.addWhere("composer", artist);
query.exec();
DBUG << query.executedQuery();
while (query.next()) {
QString album=query.value(0).toString();
QString albumId=query.value(1).toString();
albums.append(Album(album.isEmpty() ? albumId : album, albumId, query.value(2).toString(), artist));
}
}
qSort(albums.begin(), albums.end(), albumsSortArAlYr);
return albums;

View File

@@ -125,7 +125,7 @@ public:
QList<Song> getTracks(int rowFrom, int count);
int trackCount();
QList<Song> songs(const QStringList &files, bool allowPlaylists=false) const;
QList<Album> getAlbumsWithArtist(const QString &artist);
QList<Album> getAlbumsWithArtistOrComposer(const QString &artist);
Album getRandomAlbum(const QString &genre, const QString &artist);
Album getRandomAlbum(const QStringList &genres, const QStringList &artists);
QSet<QString> get(const QString &type);

View File

@@ -605,9 +605,9 @@ QList<Song> SqlLibraryModel::songs(const QStringList &files, bool allowPlaylists
return db->songs(files, allowPlaylists);
}
QList<LibraryDb::Album> SqlLibraryModel::getArtistAlbums(const QString &artist) const
QList<LibraryDb::Album> SqlLibraryModel::getArtistOrComposerAlbums(const QString &artist) const
{
return db->getAlbumsWithArtist(artist);
return db->getAlbumsWithArtistOrComposer(artist);
}
void SqlLibraryModel::getDetails(QSet<QString> &artists, QSet<QString> &albumArtists, QSet<QString> &composers, QSet<QString> &albums, QSet<QString> &genres)

View File

@@ -165,7 +165,7 @@ public:
QList<Song> getAlbumTracks(const QString &artistId, const QString &albumId) const;
QList<Song> getAlbumTracks(const Song &song) const { return getAlbumTracks(song.albumArtistOrComposer(), song.albumId()); }
QList<Song> songs(const QStringList &files, bool allowPlaylists=false) const;
QList<LibraryDb::Album> getArtistAlbums(const QString &artist) const;
QList<LibraryDb::Album> getArtistOrComposerAlbums(const QString &artist) const;
void getDetails(QSet<QString> &artists, QSet<QString> &albumArtists, QSet<QString> &composers, QSet<QString> &albums, QSet<QString> &genres);
bool songExists(const Song &song);
LibraryDb::Album getRandomAlbum(const QStringList &genres, const QStringList &artists) const { return db->getRandomAlbum(genres, artists); }