Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39ebaa84c5 | ||
|
|
1b587edaaa | ||
|
|
46035ccd5d | ||
|
|
b79d42d56d |
+1
-1
@@ -3,7 +3,7 @@
|
||||
"discord": {
|
||||
"enabled": true,
|
||||
"client_id": "1548023494976086127",
|
||||
"update_interval_seconds": 5,
|
||||
"update_interval_seconds": 15,
|
||||
"show_idle_presence": true
|
||||
},
|
||||
"updates": {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
"""Playtube - ein eigenstaendiger YouTube- & YouTube-Music-Player mit Discord Rich Presence."""
|
||||
|
||||
__app_name__ = "Playtube"
|
||||
__version__ = "2.1.0"
|
||||
__version__ = "2.1.2"
|
||||
|
||||
+21
-6
@@ -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"):
|
||||
@@ -119,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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user