Server-Bibliothek
vor 17 Std. 98bce1b0da675715b2e5482c0ad61ba21135f62f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
 * 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;
}