Ergänzung Active Button
This commit is contained in:
30
app.py
30
app.py
@@ -12,10 +12,12 @@ import os
|
||||
import json
|
||||
import hashlib
|
||||
import re
|
||||
import time
|
||||
import generate_welcome_page # Logo-Suche und Willkommensseite-Generierung
|
||||
|
||||
from functools import wraps
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
from flask import (
|
||||
Flask, jsonify, render_template,
|
||||
@@ -40,7 +42,7 @@ CONFIG_FILE = os.path.join(BASE_DIR, "config.json") # Persistente Konfiguration
|
||||
USERS_FILE = os.path.join(BASE_DIR, "users.json") # User-Datenbank
|
||||
HISTORY_FILE = os.path.join(BASE_DIR, "history.json") # Aktivitätsverlauf
|
||||
|
||||
APP_VERSION = "6.0.2"
|
||||
APP_VERSION = "6.0.3"
|
||||
UPLOAD_EXTENSIONS = {".jpg", ".jpeg", ".png", ".mp4"}
|
||||
|
||||
app = Flask(__name__)
|
||||
@@ -68,7 +70,25 @@ def save_config(cfg):
|
||||
"""Schreibt das Config-Dict zurück in die config.json."""
|
||||
with open(CONFIG_FILE, "w") as f:
|
||||
json.dump(cfg, f, indent=2)
|
||||
f.flush()
|
||||
|
||||
|
||||
HEARTBEAT_DIR = Path("/tmp/signage-heartbeat")
|
||||
HEARTBEAT_TIMEOUT = 60 # Sekunden
|
||||
|
||||
|
||||
def record_heartbeat(site, screen):
|
||||
"""Aktualisiert den Heartbeat-Timestamp für einen Screen."""
|
||||
path = HEARTBEAT_DIR / site / screen
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
path.touch()
|
||||
|
||||
|
||||
def screen_is_active(site, screen):
|
||||
"""Prüft, ob ein Screen zuletzt innerhalb des Timeouts registriert wurde."""
|
||||
path = HEARTBEAT_DIR / site / screen
|
||||
if not path.exists():
|
||||
return False
|
||||
return (time.time() - path.stat().st_mtime) < HEARTBEAT_TIMEOUT
|
||||
|
||||
|
||||
def get_site_list(cfg):
|
||||
@@ -737,7 +757,9 @@ def player(site, screen):
|
||||
@app.route("/playlist/<site>/<screen>/hash")
|
||||
def playlist_hash(site, screen):
|
||||
"""Berechnet einen MD5-Hash über die aktuelle Konfiguration (Screen + Priority).
|
||||
Gibt JSON mit Hash und aktuellem stay_on_first-Wert zurück."""
|
||||
Gibt JSON mit Hash und aktuellem stay_on_first-Wert zurück.
|
||||
Zeichnet gleichzeitig den Heartbeat auf (Player aktiv)."""
|
||||
record_heartbeat(site, screen)
|
||||
config = load_config()
|
||||
|
||||
relevant = {
|
||||
@@ -921,7 +943,7 @@ def admin(site):
|
||||
|
||||
screens[screen_name] = screen_cfg
|
||||
media_files[screen_name] = files
|
||||
screen_status[screen_name] = "active" if files else "empty"
|
||||
screen_status[screen_name] = "online" if screen_is_active(current_site, screen_name) else "offline"
|
||||
|
||||
return render_template(
|
||||
"admin.html",
|
||||
|
||||
Reference in New Issue
Block a user