/**
|
* Typisierter Zugang zur Python-Seite.
|
*
|
* pywebview hängt seine Brücke erst ein, wenn das Fenster bereit ist, und meldet
|
* das über das Ereignis `pywebviewready`. Jeder Aufruf davor liefe ins Leere —
|
* deshalb wartet `bruecke()` einmalig darauf.
|
*/
|
import type { Software } from 'bibliothek-types';
|
|
/** Zustand einer Datei im Werkzeug-Ordner, ermittelt über ihre Prüfsumme. */
|
export type LokalerZustand = 'fehlt' | 'aktuell' | 'veraltet' | 'fremd';
|
|
export interface LokalerBefund {
|
zustand: LokalerZustand;
|
dateiname: string;
|
abgelegteVersion: string;
|
pfad: string;
|
}
|
|
/** Katalogeintrag, angereichert um das, was auf diesem Rechner liegt. */
|
export interface EintragMitBefund extends Software {
|
/** Nur bei eigenständigen Programmen gefüllt — bei Installern sagt der Ordner nichts. */
|
lokal: LokalerBefund | null;
|
/** Fließt dieser Eintrag in die Update-Meldung ein? */
|
ueberwacht: boolean;
|
}
|
|
export interface Einstellungen {
|
serverAdresse: string;
|
werkzeugOrdner: string;
|
}
|
|
interface PywebviewApi {
|
einstellungen(): Promise<{ einstellungen: Einstellungen; vorgaben: Einstellungen }>;
|
einstellungen_speichern(
|
serverAdresse: string,
|
werkzeugOrdner: string
|
): Promise<{ ok: boolean; einstellungen: Einstellungen; vorgaben: Einstellungen }>;
|
katalog(): Promise<{ ok: boolean; meldung?: string; eintraege: EintragMitBefund[]; ordner?: string }>;
|
herunterladen(
|
softwareId: number,
|
dateiname: string,
|
version: string,
|
programmart: string
|
): Promise<{ ok: boolean; meldung: string; pfad?: string }>;
|
ordner_oeffnen(unterordner?: string): Promise<{ ok: boolean }>;
|
verknuepfung_anlegen(pfad: string, name: string): Promise<{ ok: boolean; meldung?: string }>;
|
}
|
|
declare global {
|
interface Window {
|
pywebview?: { api: PywebviewApi };
|
}
|
}
|
|
let bereit: Promise<PywebviewApi> | undefined;
|
|
export function bruecke(): Promise<PywebviewApi> {
|
if (!bereit) {
|
bereit = new Promise((aufloesen) => {
|
if (window.pywebview?.api) {
|
aufloesen(window.pywebview.api);
|
return;
|
}
|
window.addEventListener('pywebviewready', () => aufloesen(window.pywebview!.api), { once: true });
|
});
|
}
|
return bereit;
|
}
|