diff --git a/app.py b/app.py index 080be97..564bcc1 100755 --- a/app.py +++ b/app.py @@ -737,7 +737,7 @@ def player(site, screen): @app.route("/playlist///hash") def playlist_hash(site, screen): """Berechnet einen MD5-Hash über die aktuelle Konfiguration (Screen + Priority). - Ändert sich der Hash, lädt der Player automatisch neu.""" + Gibt JSON mit Hash und aktuellem stay_on_first-Wert zurück.""" config = load_config() relevant = { @@ -748,7 +748,10 @@ def playlist_hash(site, screen): } blob = json.dumps(relevant, sort_keys=True).encode() - return hashlib.md5(blob).hexdigest() + h = hashlib.md5(blob).hexdigest() + + screen_cfg = config.get("sites", {}).get(site, {}).get("screens", {}).get(screen, {}) + return {"hash": h, "stay_on_first": screen_cfg.get("stay_on_first", False)} # ------------------------------------------------- diff --git a/templates/player.html b/templates/player.html index 17d0c26..d7659d7 100755 --- a/templates/player.html +++ b/templates/player.html @@ -352,10 +352,10 @@ updateClock(); const normalFiles = {{ normal_files | tojson }}; const prioFiles = {{ prio_files | tojson }}; const interval = {{ interval }} * 1000; -const stayOnFirst = {{ "true" if stay_on_first else "false" }}; - const screen = "{{ screen }}"; - const site = "{{ site }}"; - // stayOnFirst: Player bleibt auf erstem Element (kein Timer/Advance) +let stayOnFirst = {{ "true" if stay_on_first else "false" }}; +const screen = "{{ screen }}"; +const site = "{{ site }}"; +// stayOnFirst: Player bleibt auf erstem Element (kein Timer/Advance) // ─── Player-Status ─── let normalIndex = 0; @@ -488,13 +488,27 @@ function playNext() { } } -// ─── Auto-Reload bei Playlist-Änderungen ─── +// ─── Auto-Reload bei Playlist-Änderungen + dynamisches stayOnFirst ─── let lastHash = null; async function checkForUpdates() { try { const res = await fetch(`/playlist/${site}/${screen}/hash`, { cache: "no-store" }); - const hash = await res.text(); + const data = await res.json(); + const hash = data.hash; + const serverStayOnFirst = data.stay_on_first; + + // Dynamisch stayOnFirst vom Server übernehmen + const wasStopped = stayOnFirst === true; + stayOnFirst = serverStayOnFirst; + + // Wenn stayOnFirst gerade ausgeschaltet wurde → sofort weiterlaufen + if (wasStopped && !stayOnFirst) { + if (playerTimer) clearTimeout(playerTimer); + playNext(); + } + + // Hash-Änderung → Seite komplett neu laden if (lastHash && lastHash !== hash) { location.reload(true); }