Fix: Discord RPC hat nie Daten empfangen (runJavaScript-Bug)
Wurzelursache gefunden: page().runJavaScript() liefert bei einem direkt zurueckgegebenen JS-Objekt in dieser PySide6/QtWebEngine-Version zuverlaessig nur einen leeren String statt das Objekt (Zahlen/Strings funktionieren, Objekte nicht). Dadurch schlug 'isinstance(result, dict)' in BrowserTab._on_media_probe_result IMMER fehl, mediaInfoChanged wurde nie emittiert, MainWindow._on_media_info nie aufgerufen und der DiscordRPCWorker damit nie mit echten Daten gefuettert (Warteschlange blieb fuer immer leer, der Worker hat sich nie mal mit Discord verbunden). Fix: media_probe.py gibt jetzt JSON.stringify(...) zurueck, browser.py parst den String mit json.loads(). Per isoliertem Test verifiziert (Songtitel erscheint jetzt korrekt im Fenstertitel, Discord-Update wird erfolgreich gesendet). Ausserdem: PLAYTUBE_DEBUG=1 Env-Var fuer Debug-Logging in browser.py/discord_rpc.py, Exceptions in discord_rpc.py werden jetzt sichtbar geloggt statt verschluckt, neue Discord Client-ID. Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
+19
-2
@@ -3,6 +3,8 @@ Profil (eigener Datenordner, kein System-Browser-Profil) und periodischem Ausles
|
||||
der aktuellen Wiedergabe fuer Discord Rich Presence."""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
from PySide6.QtCore import QTimer, Signal, QUrl
|
||||
@@ -162,5 +164,20 @@ class BrowserTab(QWebEngineView):
|
||||
self.page().runJavaScript(MEDIA_PROBE_JS, self._on_media_probe_result)
|
||||
|
||||
def _on_media_probe_result(self, result) -> None:
|
||||
if isinstance(result, dict):
|
||||
self.mediaInfoChanged.emit(result)
|
||||
# runJavaScript() liefert JS-Objekte ueber diese Bruecke nicht zuverlaessig
|
||||
# als dict (siehe media_probe.py) - das Probe-Skript gibt daher einen
|
||||
# JSON-String zurueck, der hier geparst wird.
|
||||
info = None
|
||||
if isinstance(result, str) and result:
|
||||
try:
|
||||
info = json.loads(result)
|
||||
except json.JSONDecodeError:
|
||||
info = None
|
||||
elif isinstance(result, dict):
|
||||
info = result
|
||||
|
||||
if os.environ.get("PLAYTUBE_DEBUG"):
|
||||
print(f"[media-probe:{self._home_url}] roh={result!r} geparst={info!r}", flush=True)
|
||||
|
||||
if isinstance(info, dict):
|
||||
self.mediaInfoChanged.emit(info)
|
||||
|
||||
Reference in New Issue
Block a user