From 98bce1b0da675715b2e5482c0ad61ba21135f62f Mon Sep 17 00:00:00 2001
From: Server-Bibliothek <server-bibliothek@lokal>
Date: Di, 04 Aug 2026 07:00:04 +0200
Subject: [PATCH] Add a desktop client that knows what is installed locally

---
 desktop/backend/__main__.py |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/desktop/backend/__main__.py b/desktop/backend/__main__.py
new file mode 100644
index 0000000..ecf3849
--- /dev/null
+++ b/desktop/backend/__main__.py
@@ -0,0 +1,52 @@
+"""Startpunkt: oeffnet ein natives Fenster und verbindet es mit der Api.
+
+Start:  py -m backend        (aus dem Ordner `desktop`, im aktivierten venv)
+
+Das Fenster nutzt das WebView2 von Windows — dieselbe Engine, die der Browser
+ohnehin mitbringt. Es wird also kein zweites Chromium ausgeliefert.
+"""
+
+from __future__ import annotations
+
+import sys
+from pathlib import Path
+
+import webview
+
+from .api import Api
+
+# Im Betrieb aus dem Quelltext liegt die gebaute Oberflaeche unter
+# <projekt>/frontend/dist; in der PyInstaller-exe im Bundle-Verzeichnis.
+if getattr(sys, "frozen", False):
+    _BASIS = Path(sys._MEIPASS)  # type: ignore[attr-defined]
+else:
+    _BASIS = Path(__file__).resolve().parent.parent
+
+FRONTEND_INDEX = _BASIS / "frontend" / "dist" / "index.html"
+
+_PLATZHALTER_HTML = """
+<!doctype html><html lang="de"><body style="font-family:sans-serif;padding:2rem">
+<h1>Oberfläche noch nicht gebaut</h1>
+<p>Im Ordner <code>desktop/frontend</code> einmal <code>npm install</code> und
+<code>npm run build</code> ausführen, dann erneut starten.</p>
+</body></html>
+"""
+
+
+def main() -> None:
+    api = Api()
+    gemeinsam = {
+        "js_api": api,
+        "width": 1100,
+        "height": 780,
+        "min_size": (820, 600),
+    }
+    if FRONTEND_INDEX.exists():
+        webview.create_window("Software-Bibliothek", url=str(FRONTEND_INDEX), **gemeinsam)
+    else:
+        webview.create_window("Software-Bibliothek", html=_PLATZHALTER_HTML, **gemeinsam)
+    webview.start(http_server=True)
+
+
+if __name__ == "__main__":
+    main()

--
Gitblit v1.9.3