From 976731ab6cc88b88a71179f9ed4b27cbdc3c54da Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
Date: Fri, 29 Mar 2019 17:01:31 +0100
Subject: [PATCH] command/playlist: invoke the RemoteTagScanner on all newly
 added songs

Closes https://github.com/MusicPlayerDaemon/MPD/issues/234
---
 NEWS                             |  2 ++
 src/command/PlaylistCommands.cxx | 14 +++++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index b93d711b5..7c1efe15d 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,6 @@
 ver 0.21.7 (not yet released)
+* input
+  - qobuz/tidal: scan tags when loading a playlist
 * require Meson 0.49.0 for native libgcrypt-config support
 * fix build failure with -Dlocal_socket=false
 * Haiku
diff --git a/src/command/PlaylistCommands.cxx b/src/command/PlaylistCommands.cxx
index 858cd2029..89b64ff6f 100644
--- a/src/command/PlaylistCommands.cxx
+++ b/src/command/PlaylistCommands.cxx
@@ -20,6 +20,7 @@
 #include "config.h"
 #include "PlaylistCommands.hxx"
 #include "Request.hxx"
+#include "Instance.hxx"
 #include "db/DatabasePlaylist.hxx"
 #include "CommandError.hxx"
 #include "PlaylistSave.hxx"
@@ -27,6 +28,7 @@
 #include "PlaylistError.hxx"
 #include "db/PlaylistVector.hxx"
 #include "SongLoader.hxx"
+#include "song/DetachedSong.hxx"
 #include "BulkEdit.hxx"
 #include "playlist/PlaylistQueue.hxx"
 #include "playlist/Print.hxx"
@@ -76,11 +78,21 @@ handle_load(Client &client, Request args, gcc_unused Response &r)
 
 	const ScopeBulkEdit bulk_edit(client.GetPartition());
 
+	auto &playlist = client.GetPlaylist();
+	const unsigned old_size = playlist.GetLength();
+
 	const SongLoader loader(client);
 	playlist_open_into_queue(uri,
 				 range.start, range.end,
-				 client.GetPlaylist(),
+				 playlist,
 				 client.GetPlayerControl(), loader);
+
+	/* invoke the RemoteTagScanner on all newly added songs */
+	auto &instance = client.GetInstance();
+	const unsigned new_size = playlist.GetLength();
+	for (unsigned i = old_size; i < new_size; ++i)
+		instance.LookupRemoteTag(playlist.queue.Get(i).GetURI());
+
 	return CommandResult::OK;
 }