Admin html Ergänzungen Überschriften
This commit is contained in:
6
app.py
6
app.py
@@ -7,7 +7,7 @@ import generate_welcome_page
|
||||
from datetime import datetime
|
||||
|
||||
from flask import (
|
||||
Flask, render_template,
|
||||
Flask, jsonify, render_template,
|
||||
send_from_directory, redirect,
|
||||
request, abort
|
||||
)
|
||||
@@ -26,7 +26,7 @@ BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
MEDIA_DIR = os.path.join(BASE_DIR, "media")
|
||||
CONFIG_FILE = os.path.join(BASE_DIR, "config.json")
|
||||
|
||||
APP_VERSION = "4.0.2"
|
||||
APP_VERSION = "4.0.4"
|
||||
UPLOAD_EXTENSIONS = {".jpg", ".jpeg", ".png", ".mp4"}
|
||||
|
||||
app = Flask(__name__)
|
||||
@@ -117,7 +117,7 @@ def add_customer():
|
||||
|
||||
if request.method == "POST":
|
||||
customer_name = request.form.get("customer_name", "").strip()
|
||||
|
||||
print(f"🔍 APP.PY - Suche nach Kunde: '{customer_name}'")
|
||||
if not customer_name:
|
||||
error = "Kundenname erforderlich"
|
||||
else:
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
"url": "https://www.meteoblue.com/en/meteotv/d7b0fd",
|
||||
"zoom": 1.0
|
||||
},
|
||||
"Video_CANCOM_Jahresruckblick_2025.MP4",
|
||||
"Video_CANCOM_LIVE_2025_Stuttgart.MP4"
|
||||
],
|
||||
"newsticker_text": "Herzlich willkommen bei der CANCOM - wir w\u00fcnschen ihnen einen sch\u00f6nen Tag",
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
signage:
|
||||
|
||||
@@ -5,6 +5,7 @@ from openai import OpenAI
|
||||
# -------------------------------------------------
|
||||
# Customer / Willkommensseite
|
||||
# -------------------------------------------------
|
||||
|
||||
WELCOME_DIR = os.path.join(os.path.dirname(__file__), "media", "lobby")
|
||||
|
||||
os.makedirs(WELCOME_DIR, exist_ok=True)
|
||||
@@ -13,25 +14,27 @@ WELCOME_FILENAME = "welcome.html"
|
||||
|
||||
def get_openai_client():
|
||||
"""Initialize OpenAI client from environment variable"""
|
||||
api_key = os.getenv("OPENAI_API_KEY")
|
||||
# api_key = os.getenv("OPENAI_API_KEY")
|
||||
api_key = "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"
|
||||
if not api_key:
|
||||
raise ValueError("OPENAI_API_KEY environment variable not set")
|
||||
return OpenAI(api_key=api_key)
|
||||
|
||||
def get_brandfetch_logo(domain):
|
||||
"""Try to fetch a logo URL from Brandfetch CDN."""
|
||||
print(f"🔍 Versuche Brandfetch für Domain: {domain}")
|
||||
print(f"🔍 Generate - Versuche Brandfetch für Domain: {domain}")
|
||||
# Direct CDN URL construction - Brandfetch provides logos via cdn.brandfetch.io
|
||||
logo_url = f"https://cdn.brandfetch.io/{domain}?c=1idyd4Tpb2nKaXIIc8T"
|
||||
|
||||
# if validate_logo_url(logo_url):
|
||||
print(f"✅ Brandfetch Logo gefunden: {logo_url}")
|
||||
print(f"✅ Generate - Brandfetch Logo gefunden: {logo_url}")
|
||||
return logo_url
|
||||
|
||||
# return None
|
||||
|
||||
|
||||
def search_customer_logo(customer_name):
|
||||
print(f"✅ Generate - Suche nach Kundenlogo für: {customer_name}")
|
||||
"""Search for customer logo URL using OpenAI and web search"""
|
||||
try:
|
||||
client = get_openai_client()
|
||||
@@ -71,6 +74,7 @@ def search_customer_logo(customer_name):
|
||||
|
||||
|
||||
def generate_welcome_html(customer_name, logo_url):
|
||||
print(f"✅ Generate - Willkommensseite wird generiert für: {customer_name} mit Logo: {logo_url}")
|
||||
"""Generate a welcome page HTML with full-screen design"""
|
||||
# CANCOM SVG logo inline
|
||||
cancom_svg = '''<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xcs="https://www.xtool.com/pages/software" version="1.1" preserveAspectRatio="xMinYMin meet" width="61.682394106284505mm" height="9.909010347638684mm" viewBox="136.55880294685778 209.2954948261807 61.682394106284505 9.909010347638684" xcs:version="2.7.22"><style></style><path transform="matrix(0.158038,0,0,0.158038,133.2558,163.322122)" stroke="none" fill="currentColor" data-view-type="laser" d="M125.9,352.1h18.9L119,291.7h-16.2l-25,60.4h18.2l14.6-38.9L125.9,352.1z M323.6,322 c0,8.8-6.1,16.4-15.4,16.4c-9.1,0-15.4-7.6-15.4-16.4s6.1-16.4,15.2-16.4C317,305.6,323.6,313.4,323.6,322 M340.5,322.3 c0-17.4-13.4-31.3-32.3-31.3c-18.7,0-32.3,14.1-32.3,31.3c0,17.4,13.4,31.3,32.3,31.3C326.9,353.6,340.5,339.4,340.5,322.3 M230.4,322.5c0-8.8,6.1-16.4,14.9-16.4c3,0,5.8,0.8,8.1,2l6.6-13.4c-3-2-8.1-3.8-14.9-3.8c-18.2,0-31.6,14.1-31.6,31.3 c0,18.2,12.6,31.1,31.6,31.1c17.2,0,26-10.6,28.8-21l-13.6-5.6c-1.8,5.8-6.3,11.6-14.4,11.6C236.5,338.4,230.4,331.4,230.4,322.5 M38,322.5c0-8.8,6.1-16.4,14.9-16.4c3,0,5.8,0.8,8.1,2l6.6-13.4c-3-2-8.1-3.8-14.9-3.8c-18.4,0-31.8,14.1-31.8,31.3 c0,18.2,12.6,31.1,31.6,31.1c17.2,0,26-10.6,28.8-21l-13.6-5.6c-1.8,5.8-6.3,11.6-14.4,11.6C44,338.4,38,331.4,38,322.5 M191.8,352.1h14.4v-59.8H190v33.1l-25-33.1h-15.4v60.1h16.2v-34.1L191.8,352.1z M411.2,352.1v-59.8h-17.7l-14.4,23.2l-14.4-23.2 h-17.7v60.1h16.4V318l15.4,23.2h0.3l15.4-23.5v34.6L411.2,352.1L411.2,352.1z" fill-rule="nonzero"></path></svg>'''
|
||||
@@ -209,9 +213,9 @@ def save_welcome_page(customer_name, logo_url):
|
||||
f.write(html_content)
|
||||
if os.path.getsize(filepath) == 0:
|
||||
raise IOError("File not written")
|
||||
print(f"✅ Willkommensseite generiert für: {customer_name}")
|
||||
print(f"✅ Willkommensseite gespeichert in: {filepath}")
|
||||
print(f"✅ Willkommensseite gespeichert: {WELCOME_FILENAME}")
|
||||
print(f"✅ Generate - Willkommensseite generiert für: {customer_name}")
|
||||
print(f"✅ Generate - Willkommensseite gespeichert in: {filepath}")
|
||||
print(f"✅ Generate - Willkommensseite gespeichert: {WELCOME_FILENAME}")
|
||||
return WELCOME_FILENAME
|
||||
except Exception as e:
|
||||
print(f"❌ Error saving welcome page: {e}")
|
||||
@@ -234,8 +238,8 @@ def add_customer_to_lobby_playlist(html_filename):
|
||||
playlist.remove(full_filename)
|
||||
playlist.insert(0, full_filename)
|
||||
save_config(config)
|
||||
print(f"✅ Willkommensseite in Lobby-Playliste platziert")
|
||||
print(f"✅ Generate - Willkommensseite in Lobby-Playliste platziert")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"❌ Error adding to playlist: {e}")
|
||||
print(f"❌ Generate - Error adding to playlist: {e}")
|
||||
return False
|
||||
@@ -168,7 +168,7 @@
|
||||
</p>
|
||||
|
||||
<!-- Upload -->
|
||||
<h4>Medien hochladen</h4>
|
||||
<h4>Medien hochladen - ⚠ PRIORITY Playlist</h4>
|
||||
<form action="/admin/upload/priority"
|
||||
method="post" enctype="multipart/form-data">
|
||||
<div class="input-group mb-3">
|
||||
@@ -191,7 +191,7 @@
|
||||
</form>
|
||||
|
||||
<!-- Playlist -->
|
||||
<h4>Playlist Reihenfolge</h4>
|
||||
<h4>Playlist Reihenfolge - ⚠ PRIORITY Playlist</h4>
|
||||
|
||||
<ul class="list-group mb-3" id="playlist-priority">
|
||||
{% for file in priority_files %}
|
||||
@@ -322,7 +322,7 @@
|
||||
<hr>
|
||||
|
||||
<!-- Upload -->
|
||||
<h2>Medien hochladen / URL hinzufügen</h2>
|
||||
<h2>Medien hochladen / URL hinzufügen - {{ screen }}</h2>
|
||||
<form action="/admin/upload/{{ screen }}"
|
||||
method="post" enctype="multipart/form-data">
|
||||
<div class="input-group mb-3">
|
||||
@@ -347,7 +347,7 @@
|
||||
<hr>
|
||||
|
||||
<!-- Playlist -->
|
||||
<h2>Playlist Reihenfolge</h2>
|
||||
<h2>Playlist Reihenfolge - {{ screen }}</h2>
|
||||
|
||||
<ul class="list-group mb-3" id="playlist-{{ screen }}">
|
||||
{% for file in media_files[screen] %}
|
||||
|
||||
Reference in New Issue
Block a user