This commit is contained in:
2026-04-22 22:33:46 +02:00
parent 7bf1e0dbb2
commit d4822fc8dc
5156 changed files with 829337 additions and 44 deletions

View File

@@ -3,11 +3,22 @@
"""
AZA Empfang - Schlanke Desktop-Huelle fuer die Empfangs-Weboberflaeche.
Standard: Laedt die Empfang-URL direkt im Fenster (kein iframe) — zuverlaessig
mit Edge WebView2 unter Windows.
Unabhaengig von AzA Office / Hauptfenster: Standard-URL ist die oeffentliche
Empfang-Instanz (empfang.aza-medwork.ch). Kein lokales Backend noetig.
Optional: Umgebungsvariable AZA_EMPFANG_IFRAME=1 aktiviert die alte iframe-Huelle
(Toolbar in HTML); dazu sollte der Server frame-embedding erlauben.
URL-Reihenfolge:
1) Umgebung AZA_EMPFANG_URL oder EMPFANG_URL (volle Basis, siehe unten)
2) backend_url.txt neben der EXE (optional, erste nicht-leere Zeile)
3) Im EXE-Bundle nur mit AZA_EMPFANG_USE_BUNDLED_URL=1
4) Fallback: https://empfang.aza-medwork.ch/empfang/
Lokale URLs (localhost / 127.0.0.1 / 192.168...): bei gebundelter EXE nur mit
AZA_EMPFANG_ALLOW_LOCAL=1, sonst Fallback auf (4) — damit die Huelle ohne
Haupt-App und ohne laufenden lokalen Server funktioniert.
Standard: Laedt die URL direkt im Fenster (kein iframe).
Optional: AZA_EMPFANG_IFRAME=1 = alte iframe-Huelle mit HTML-Toolbar.
"""
import json
@@ -36,13 +47,74 @@ def _user_dir():
return os.path.dirname(os.path.abspath(__file__))
def _empfang_url():
def _normalize_to_empfang_url(base: str) -> str:
"""Aus Basis-URL (Host oder .../empfang) wird .../empfang/ mit Slash am Ende."""
b = (base or "").strip().rstrip("/")
if not b:
b = _PUBLIC_EMPFANG_URL.rstrip("/")
if b.endswith("/empfang"):
return b + "/"
return b + "/empfang/"
def _is_local_or_lan_url(url: str) -> bool:
u = (url or "").lower()
if "localhost" in u or "127.0.0.1" in u:
return True
if u.startswith("http://192.168.") or u.startswith("http://10."):
return True
if u.startswith("https://192.168.") or u.startswith("https://10."):
return True
return False
def _read_backend_url_file_in_dir(dir_path: str) -> str | None:
try:
p = os.path.join(_data_dir(), "backend_url.txt")
p = os.path.join(dir_path, "backend_url.txt")
if not os.path.isfile(p):
return None
with open(p, "r", encoding="utf-8") as f:
return f.read().strip().rstrip("/") + "/empfang/"
for ln in f:
s = ln.strip()
if s and not s.startswith("#"):
return s.rstrip("/")
except Exception:
return _PUBLIC_EMPFANG_URL + "/empfang/"
return None
return None
def _empfang_url() -> str:
env = (
(os.environ.get("AZA_EMPFANG_URL") or os.environ.get("EMPFANG_URL") or "")
.strip()
)
if env:
return _normalize_to_empfang_url(env)
search_dirs: list[str] = [_user_dir()]
if getattr(sys, "frozen", False):
if os.environ.get("AZA_EMPFANG_USE_BUNDLED_URL", "").strip() == "1":
search_dirs.append(_data_dir())
else:
# Entwicklung: Skript-Verzeichnis (identisch zu _user_dir bei direktem Start)
dd = _data_dir()
if dd not in search_dirs:
search_dirs.append(dd)
raw: str | None = None
for d in search_dirs:
raw = _read_backend_url_file_in_dir(d)
if raw:
break
if raw:
if getattr(sys, "frozen", False) and _is_local_or_lan_url(raw):
if os.environ.get("AZA_EMPFANG_ALLOW_LOCAL", "").strip() != "1":
raw = None
if raw:
return _normalize_to_empfang_url(raw)
return _normalize_to_empfang_url(_PUBLIC_EMPFANG_URL)
_SETTINGS_FILE = os.path.join(_user_dir(), "empfang_app_settings.json")
@@ -370,6 +442,15 @@ def main():
background_color="#f0f4f8",
)
api = _Api(window, on_top, url)
window.expose(
api.toggle_on_top,
api.get_on_top,
api.open_in_browser,
api.get_version,
api.get_url,
api.get_public_url,
api.check_url,
)
def _reload():
try: