From 22ed03c8fae4364a180bcfef39e38c3cc43dbf41 Mon Sep 17 00:00:00 2001 From: Erik Thiele Date: Mon, 22 Jun 2026 21:39:20 +0200 Subject: [PATCH] Fehler behoben Stay on first slide --- config.json | 36 +++++------------------------------- history.json | 26 +++++++++++++------------- templates/player.html | 23 ++++++++++++----------- 3 files changed, 30 insertions(+), 55 deletions(-) diff --git a/config.json b/config.json index 8c24715..f32b8d4 100755 --- a/config.json +++ b/config.json @@ -96,11 +96,14 @@ "screens": { "lobby": { "playlist": [ - "welcome.html", + { + "name": "welcome.html", + "enabled": true + }, { "url": "https://dva-stage.cancom-ds.de/", "zoom": 1.0, - "enabled": false + "enabled": true } ], "interval": 10, @@ -124,35 +127,6 @@ "https://cdn.brandfetch.io/weisenburger.de/logo?c=1idyd4Tpb2nKaXIIc8T" ] } - }, - "dva": { - "screens": { - "dva": { - "playlist": [ - { - "url": "https://dva-stage.cancom-ds.de/", - "zoom": 1.0, - "enabled": true - } - ], - "interval": 10, - "show_images": true, - "show_videos": true, - "newsticker_text": "Wichtige Meldung", - "newsticker_enabled": false, - "stay_on_first": true, - "custom_url": "https://npm.teamthiele.de/nginx/proxy", - "custom_url_label": "Reverse Proxy", - "custom_url_enabled": false, - "custom_url_target": "overlay", - "custom_url_position": "top-center", - "voice_agent_enabled": true, - "voice_agent_label": "", - "voice_agent_target": "overlay", - "voice_agent_position": "top-left", - "voice_agent_show_image": false - } - } } }, "admin": { diff --git a/history.json b/history.json index 2d9f960..1c06143 100644 --- a/history.json +++ b/history.json @@ -8,13 +8,13 @@ { "timestamp": "2026-06-20 16:38:54", "action": "user_updated", - "detail": "User 'test1@test.de' bearbeitet (Rolle: superuser \u2192 user)", + "detail": "User 'test1@test.de' bearbeitet (Rolle: superuser → user)", "user": "erik.thiele@cancom.de" }, { "timestamp": "2026-06-20 16:38:19", "action": "site_deleted", - "detail": "Standort 'wdqwsqws' gel\u00f6scht", + "detail": "Standort 'wdqwsqws' gelöscht", "user": "erik.thiele@cancom.de" }, { @@ -38,7 +38,7 @@ { "timestamp": "2026-06-20 16:29:59", "action": "site_deleted", - "detail": "Standort 'qwsqwsqs' gel\u00f6scht", + "detail": "Standort 'qwsqwsqs' gelöscht", "user": "erik.thiele@cancom.de" }, { @@ -56,7 +56,7 @@ { "timestamp": "2026-06-20 16:29:33", "action": "site_deleted", - "detail": "Standort 'wsqwdsqws' gel\u00f6scht", + "detail": "Standort 'wsqwdsqws' gelöscht", "user": "erik.thiele@cancom.de" }, { @@ -68,7 +68,7 @@ { "timestamp": "2026-06-20 16:27:58", "action": "site_deleted", - "detail": "Standort 'sdwqdwddd' gel\u00f6scht", + "detail": "Standort 'sdwqdwddd' gelöscht", "user": "erik.thiele@cancom.de" }, { @@ -80,31 +80,31 @@ { "timestamp": "2026-06-20 16:26:50", "action": "site_deleted", - "detail": "Standort 'test1' gel\u00f6scht", + "detail": "Standort 'test1' gelöscht", "user": "erik.thiele@cancom.de" }, { "timestamp": "2026-06-20 16:26:43", "action": "site_deleted", - "detail": "Standort 'test2' gel\u00f6scht", + "detail": "Standort 'test2' gelöscht", "user": "erik.thiele@cancom.de" }, { "timestamp": "2026-06-20 16:26:40", "action": "screen_deleted", - "detail": "Screen 'dasdsfs' an Standort 'test2' gel\u00f6scht", + "detail": "Screen 'dasdsfs' an Standort 'test2' gelöscht", "user": "erik.thiele@cancom.de" }, { "timestamp": "2026-06-20 16:26:36", "action": "screen_deleted", - "detail": "Screen 'asdwedwed' an Standort 'test2' gel\u00f6scht", + "detail": "Screen 'asdwedwed' an Standort 'test2' gelöscht", "user": "erik.thiele@cancom.de" }, { "timestamp": "2026-06-20 16:22:12", "action": "site_deleted", - "detail": "Standort 'dwedwed' gel\u00f6scht", + "detail": "Standort 'dwedwed' gelöscht", "user": "erik.thiele@cancom.de" }, { @@ -134,7 +134,7 @@ { "timestamp": "2026-06-20 16:19:27", "action": "screen_deleted", - "detail": "Screen 'test2' an Standort 'test2' gel\u00f6scht", + "detail": "Screen 'test2' an Standort 'test2' gelöscht", "user": "erik.thiele@cancom.de" }, { @@ -158,7 +158,7 @@ { "timestamp": "2026-06-20 16:16:32", "action": "password_changed", - "detail": "Passwort f\u00fcr User 'erik.thiele@cancom.de' ge\u00e4ndert", + "detail": "Passwort für User 'erik.thiele@cancom.de' geändert", "user": "erik.thiele@cancom.de" }, { @@ -170,7 +170,7 @@ { "timestamp": "2026-06-20 16:14:03", "action": "user_updated", - "detail": "User 'test1@test.de' bearbeitet (Rolle: user \u2192 superuser)", + "detail": "User 'test1@test.de' bearbeitet (Rolle: user → superuser)", "user": "admin" }, { diff --git a/templates/player.html b/templates/player.html index d7659d7..096867e 100755 --- a/templates/player.html +++ b/templates/player.html @@ -321,11 +321,8 @@ // Player-JavaScript // ═════════════════════════════════════════════════════ -let playerTimer = null; - // ─── Custom-URL/Voice-Agent-Overlay (open/close mit Zurück-Button-Position-Tracking) ─── function openOverlay(url, pos) { - if (playerTimer) clearTimeout(playerTimer); document.getElementById("overlay").style.display = "block"; document.getElementById("overlay-iframe").src = url; var backBtn = document.getElementById("overlay-back"); @@ -361,6 +358,7 @@ const site = "{{ site }}"; let normalIndex = 0; let prioIndex = 0; let mode = "normal"; // "normal" | "prio" + const img = document.getElementById("image"); const vid = document.getElementById("video"); const iframe = document.getElementById("iframe"); @@ -462,7 +460,6 @@ function playNext() { iframe.style.height = `100vh`; iframe.style.transform = `translate(-50%, -50%)`; } - if (!stayOnFirst) playerTimer = setTimeout(playNext, interval); return; } @@ -479,12 +476,10 @@ function playNext() { iframe.style.width = `100vw`; iframe.style.height = `100vh`; iframe.style.transform = `translate(-50%, -50%)`; - if (!stayOnFirst) playerTimer = setTimeout(playNext, interval); } else { // Bild (jpg/png) img.style.display = "block"; img.src = src; - if (!stayOnFirst) playerTimer = setTimeout(playNext, interval); } } @@ -498,18 +493,14 @@ async function checkForUpdates() { 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) { + if (lastHash && lastHash !== hash && !wasStopped) { location.reload(true); } lastHash = hash; @@ -565,6 +556,16 @@ async function checkForUpdates() { // ─── Start ─── playNext(); + +// Zyklischer Durchlauf: alle `interval` ms vorrücken, wenn stayOnFirst aus ist +// und kein Video aktiv läuft (Videos steuern sich via onended) +setInterval(function() { + if (!stayOnFirst && vid.style.display !== "block") { + playNext(); + } +}, interval); + +// Config-Änderungen erkennen (stayOnFirst, Playlist) setInterval(checkForUpdates, 5000);