diff --git a/playtube/discord_rpc.py b/playtube/discord_rpc.py
index 8937c62..e01b1f0 100644
--- a/playtube/discord_rpc.py
+++ b/playtube/discord_rpc.py
@@ -259,9 +259,10 @@ class DiscordRPCWorker(QThread):
payload = build_presence_payload(item, self._session_start, start_ts, end_ts)
self._presence.update(**payload)
log_line(
- "[send] title=%r thumbnail=%r large_image=%r start=%s end=%s"
+ "[send] title=%r url=%r thumbnail=%r large_image=%r start=%s end=%s"
% (
item.get("title"),
+ item.get("url"),
item.get("thumbnail"),
payload.get("large_image"),
start_ts,
diff --git a/playtube/media_probe.py b/playtube/media_probe.py
index e44895b..aab7bc9 100644
--- a/playtube/media_probe.py
+++ b/playtube/media_probe.py
@@ -82,10 +82,18 @@ MEDIA_PROBE_JS = r"""
var videoId = videoIdFromUrl(location.href);
var title = null, subtitle = null, thumbnail = null;
+ // WICHTIG: die Video-ID aus der URL ist die zuverlaessigste Thumbnail-Quelle - sie
+ // wechselt garantiert synchron mit dem Titel. Das
in der YT-Music-Playerleiste
+ // (fruehere Praeferenz) wird von YouTube per Crossfade/Shadow-DOM animiert und
+ // aktualisiert sein src-Attribut dabei nachweislich NICHT zuverlaessig pro Titel -
+ // empirisch bestaetigt: dieselbe Thumbnail-URL blieb ueber mehrere komplett
+ // unterschiedliche Songs hinweg stehen, obwohl Titel/Zeit schon laengst gewechselt
+ // hatten. Das DOM-
dient nur noch als Fallback, falls keine Video-ID in der
+ // URL steckt.
if (isMusic) {
title = txt('.title.ytmusic-player-bar') || txt('ytmusic-player-bar .title');
subtitle = txt('.byline.ytmusic-player-bar') || txt('ytmusic-player-bar .byline');
- thumbnail = imgSrc('ytmusic-player-bar img, .image.ytmusic-player-bar img') || ytThumbnailUrl(videoId);
+ thumbnail = ytThumbnailUrl(videoId) || imgSrc('ytmusic-player-bar img, .image.ytmusic-player-bar img');
} else {
var t = document.title.replace(/ - YouTube$/, '');
title = t || null;
@@ -94,7 +102,7 @@ MEDIA_PROBE_JS = r"""
|| txt('#channel-name a')
|| txt('ytd-channel-name#channel-name a');
var imgY = document.querySelector('link[rel="image_src"]');
- thumbnail = (imgY ? imgY.href : null) || ytThumbnailUrl(videoId);
+ thumbnail = ytThumbnailUrl(videoId) || (imgY ? imgY.href : null);
}
var timeInfo = isMusic ? musicTimeInfo() : youtubeTimeInfo();