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:
+16
-4
@@ -7,6 +7,7 @@ versucht, ohne die App zu beeintraechtigen.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import queue
|
||||
import time
|
||||
from typing import Any
|
||||
@@ -156,8 +157,12 @@ class DiscordRPCWorker(QThread):
|
||||
self._presence = Presence(self._client_id)
|
||||
self._presence.connect()
|
||||
self._connected = True
|
||||
except Exception:
|
||||
if os.environ.get("PLAYTUBE_DEBUG"):
|
||||
print("[discord-rpc] verbunden", flush=True)
|
||||
except Exception as exc:
|
||||
self._connected = False
|
||||
if os.environ.get("PLAYTUBE_DEBUG"):
|
||||
print(f"[discord-rpc] Verbindung fehlgeschlagen: {exc!r}", flush=True)
|
||||
|
||||
def _send(self, item) -> None:
|
||||
if self._presence is None:
|
||||
@@ -165,14 +170,21 @@ class DiscordRPCWorker(QThread):
|
||||
try:
|
||||
if item is _IDLE_SENTINEL:
|
||||
if self._show_idle:
|
||||
self._presence.update(**build_idle_payload(self._session_start))
|
||||
payload = build_idle_payload(self._session_start)
|
||||
self._presence.update(**payload)
|
||||
else:
|
||||
payload = None
|
||||
self._presence.clear()
|
||||
else:
|
||||
self._presence.update(**build_presence_payload(item, self._session_start))
|
||||
except Exception:
|
||||
payload = build_presence_payload(item, self._session_start)
|
||||
self._presence.update(**payload)
|
||||
if os.environ.get("PLAYTUBE_DEBUG"):
|
||||
print(f"[discord-rpc] gesendet: {payload!r}", flush=True)
|
||||
except Exception as exc:
|
||||
# Discord evtl. geschlossen worden -> beim naechsten Mal neu verbinden.
|
||||
self._connected = False
|
||||
if os.environ.get("PLAYTUBE_DEBUG"):
|
||||
print(f"[discord-rpc] Senden fehlgeschlagen: {exc!r}", flush=True)
|
||||
|
||||
def _cleanup(self) -> None:
|
||||
if self._presence is not None:
|
||||
|
||||
Reference in New Issue
Block a user