Fix locating songs from Spotify in the Media Library
This commit is contained in:
@@ -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 SongEntryMatcher(const Regex::Regex &rx, const MPD::Song &s);
|
||||||
|
|
||||||
bool MoveToTag(NC::Menu<PrimaryTag> &tags, const std::string &primary_tag);
|
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 {
|
struct SortSongs {
|
||||||
typedef NC::Menu<MPD::Song>::Item SongItem;
|
typedef NC::Menu<MPD::Song>::Item SongItem;
|
||||||
@@ -1049,7 +1049,7 @@ void MediaLibrary::locateSong(const MPD::Song &s)
|
|||||||
// they are not found.
|
// they are not found.
|
||||||
if (hasTwoColumns || !Albums.empty())
|
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.
|
// The album could not be found, insert it if in two column mode.
|
||||||
// See comment about tags not found above. This is the equivalent
|
// See comment about tags not found above. This is the equivalent
|
||||||
@@ -1060,7 +1060,7 @@ void MediaLibrary::locateSong(const MPD::Song &s)
|
|||||||
s.getMTime())));
|
s.getMTime())));
|
||||||
std::sort(Albums.beginV(), Albums.endV(), SortAlbumEntries());
|
std::sort(Albums.beginV(), Albums.endV(), SortAlbumEntries());
|
||||||
Albums.refresh();
|
Albums.refresh();
|
||||||
MoveToAlbum(Albums, primary_tag, s);
|
MoveToAlbum(Albums, primary_tag, s, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Songs.clearFilter();
|
Songs.clearFilter();
|
||||||
@@ -1159,7 +1159,8 @@ bool MoveToTag(NC::Menu<PrimaryTag> &tags, const std::string &primary_tag)
|
|||||||
return false;
|
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())
|
if (albums.empty())
|
||||||
return false;
|
return false;
|
||||||
@@ -1170,7 +1171,7 @@ bool MoveToAlbum(NC::Menu<AlbumEntry> &albums, const std::string &primary_tag, c
|
|||||||
auto equals_fun_argument = [&](AlbumEntry &e) {
|
auto equals_fun_argument = [&](AlbumEntry &e) {
|
||||||
return (isAlbumOnly || !hasTwoColumns || e.entry().tag() == primary_tag)
|
return (isAlbumOnly || !hasTwoColumns || e.entry().tag() == primary_tag)
|
||||||
&& e.entry().album() == album
|
&& 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()))
|
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);
|
albums.highlight(it-begin);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (consider_date)
|
||||||
return false;
|
{
|
||||||
|
// 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user