Fix locating songs from Spotify in the Media Library

This commit is contained in:
Andrzej Rybczak
2020-12-20 15:13:55 +01:00
parent 985def83dc
commit 48f64f1aa0

View File

@@ -93,7 +93,7 @@ bool AlbumEntryMatcher(const Regex::Regex &rx, const NC::Menu<AlbumEntry>::Item
bool SongEntryMatcher(const Regex::Regex &rx, const MPD::Song &s);
bool MoveToTag(NC::Menu<PrimaryTag> &tags, const std::string &primary_tag);
bool MoveToAlbum(NC::Menu<AlbumEntry> &albums, const std::string &primary_tag, const MPD::Song &s);
bool MoveToAlbum(NC::Menu<AlbumEntry> &albums, const std::string &primary_tag, const MPD::Song &s, bool consider_date);
struct SortSongs {
typedef NC::Menu<MPD::Song>::Item SongItem;
@@ -1049,7 +1049,7 @@ void MediaLibrary::locateSong(const MPD::Song &s)
// they are not found.
if (hasTwoColumns || !Albums.empty())
{
if (!MoveToAlbum(Albums, primary_tag, s))
if (!MoveToAlbum(Albums, primary_tag, s, true))
{
// The album could not be found, insert it if in two column mode.
// See comment about tags not found above. This is the equivalent
@@ -1060,7 +1060,7 @@ void MediaLibrary::locateSong(const MPD::Song &s)
s.getMTime())));
std::sort(Albums.beginV(), Albums.endV(), SortAlbumEntries());
Albums.refresh();
MoveToAlbum(Albums, primary_tag, s);
MoveToAlbum(Albums, primary_tag, s, true);
}
Songs.clearFilter();
@@ -1159,7 +1159,8 @@ bool MoveToTag(NC::Menu<PrimaryTag> &tags, const std::string &primary_tag)
return false;
}
bool MoveToAlbum(NC::Menu<AlbumEntry> &albums, const std::string &primary_tag, const MPD::Song &s)
bool MoveToAlbum(NC::Menu<AlbumEntry> &albums, const std::string &primary_tag,
const MPD::Song &s, bool consider_date)
{
if (albums.empty())
return false;
@@ -1170,7 +1171,7 @@ bool MoveToAlbum(NC::Menu<AlbumEntry> &albums, const std::string &primary_tag, c
auto equals_fun_argument = [&](AlbumEntry &e) {
return (isAlbumOnly || !hasTwoColumns || e.entry().tag() == primary_tag)
&& e.entry().album() == album
&& (!Config.media_library_albums_split_by_date || e.entry().date() == date);
&& (!consider_date || !Config.media_library_albums_split_by_date || e.entry().date() == date);
};
if (equals_fun_argument(*albums.currentV()))
@@ -1183,8 +1184,15 @@ bool MoveToAlbum(NC::Menu<AlbumEntry> &albums, const std::string &primary_tag, c
albums.highlight(it-begin);
return true;
}
return false;
else if (consider_date)
{
// When trying to locate songs from Spotify the song usually has a date tag,
// but the entry in the library doesn't. So if that happens, try again and
// ignore the date.
return MoveToAlbum(albums, primary_tag, s, false);
}
else
return false;
}
}