Fix: Discord-Fortschrittszeit stackt bei Autoplay-Songwechseln
Ursache: start/end wurden nur gesendet, wenn 'playing' gerade true war. Bei jedem automatischen Songwechsel laedt das <video>-Element kurz neu, wodurch 'playing' fuer 1-2 Polls faelschlich false wird - in diesem Fenster fehlten start/end im Update komplett. Discord ersetzt 'timestamps' bei einem unvollstaendigen SET_ACTIVITY-Update offenbar nicht sauber, sondern behaelt die zuletzt bekannten (viel zu alten) Werte bei, wodurch die angezeigte Zeit ueber mehrere Songs hinweg immer weiter waechst statt pro Lied neu zu starten. Fix: start/end werden jetzt IMMER mitgeschickt, unabhaengig vom playing-Status (ein pausierter Titel zeigt dann einfach einen eingefrorenen statt gar keinen Fortschrittsbalken). Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
+12
-5
@@ -88,11 +88,18 @@ def build_presence_payload(info: dict[str, Any], session_start: int) -> dict[str
|
||||
|
||||
duration = info.get("duration") or 0
|
||||
current_time = info.get("currentTime") or 0
|
||||
if playing:
|
||||
start_ts = int(time.time() - current_time)
|
||||
payload["start"] = start_ts
|
||||
if duration and duration > 0:
|
||||
payload["end"] = start_ts + int(duration)
|
||||
# IMMER start/end mitschicken, unabhaengig vom playing-Status - nicht nur wenn
|
||||
# playing=true. Discord ersetzt "timestamps" bei einem SET_ACTIVITY-Update ohne
|
||||
# diese Felder offenbar nicht sauber, sondern behaelt intern die zuletzt bekannten
|
||||
# Werte bei ("stackt"). Waehrend eines Songwechsels ist "playing" durch das kurze
|
||||
# Neuladen des <video>-Elements oft fuer 1-2 Polls faelschlich false - wurden
|
||||
# start/end dann weggelassen, blieb Discords alte (viel zu weit zurueckliegende)
|
||||
# Zeit einfach stehen, bis irgendwann wieder echte Werte kamen. Ein pausierter
|
||||
# Titel zeigt so einfach einen eingefrorenen Fortschrittsbalken statt gar keinen.
|
||||
start_ts = int(time.time() - current_time)
|
||||
payload["start"] = start_ts
|
||||
if duration and duration > 0:
|
||||
payload["end"] = start_ts + int(duration)
|
||||
|
||||
url = info.get("url")
|
||||
if url and isinstance(url, str) and url.startswith("http"):
|
||||
|
||||
Reference in New Issue
Block a user