"""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()
|