diff --git a/config.json b/config.json index 6ca8691..8f55d84 100644 --- a/config.json +++ b/config.json @@ -3,7 +3,7 @@ "discord": { "enabled": true, "client_id": "1548023494976086127", - "update_interval_seconds": 5, + "update_interval_seconds": 15, "show_idle_presence": true }, "updates": { diff --git a/playtube/discord_rpc.py b/playtube/discord_rpc.py index 6acb9b0..5861bf7 100644 --- a/playtube/discord_rpc.py +++ b/playtube/discord_rpc.py @@ -126,7 +126,15 @@ class DiscordRPCWorker(QThread): def __init__(self, client_id: str, interval: float, show_idle: bool, parent=None): super().__init__(parent) self._client_id = client_id - self._interval = max(5.0, float(interval)) + # Discord ignoriert/verwirft Rich-Presence-Updates stillschweigend, wenn sie + # haeufiger als ca. alle 15 Sekunden gesendet werden (offizielle Grenze fuer + # SET_ACTIVITY). Wird diese Grenze unterschritten, landet zwar technisch jedes + # Update im Code, aber Discord uebernimmt nur einen Teil davon - nach aussen + # sieht das wie "eingefrorene" Bilder/Zeiten aus (Bild wechselt nicht, Fortschritt + # "stackt" beim Songwechsel), weil zufaellig immer wieder ein veraltetes Update + # durchkommt statt des aktuellen. Deshalb hartes Minimum von 15s, unabhaengig + # davon, was in der Konfiguration steht. + self._interval = max(15.0, float(interval)) self._show_idle = show_idle self._queue: "queue.Queue[dict | None | object]" = queue.Queue(maxsize=1) self._running = True diff --git a/playtube/settings_tab.py b/playtube/settings_tab.py index fd1f59e..0fd8ac0 100644 --- a/playtube/settings_tab.py +++ b/playtube/settings_tab.py @@ -60,9 +60,11 @@ class SettingsTab(QWidget): self._client_id = QLineEdit(str(discord_cfg.get("client_id", ""))) self._client_id.setPlaceholderText("Discord Application Client-ID") self._discord_interval = QSpinBox() - self._discord_interval.setRange(5, 120) + # Minimum 15s: Discord ignoriert Rich-Presence-Updates, die haeufiger kommen, + # stillschweigend (fuehrt zu "eingefrorenem" Bild/Fortschrittsbalken). + self._discord_interval.setRange(15, 120) self._discord_interval.setSuffix(" s") - self._discord_interval.setValue(int(discord_cfg.get("update_interval_seconds", 15))) + self._discord_interval.setValue(max(15, int(discord_cfg.get("update_interval_seconds", 15)))) self._show_idle = QCheckBox("Status anzeigen, wenn gerade nichts läuft") self._show_idle.setChecked(bool(discord_cfg.get("show_idle_presence", True))) discord_form.addRow(self._discord_enabled)