update
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user