lsa-planer
LSA-Planer Professional – Planungssoftware für Lichtsignalanlagen nach RiLSA 2015 und § 45 StVO. EUPL-1.2.
| 1 | /** |
| 2 | * Vertrag zwischen Renderer und Electron-Hauptprozess. |
| 3 | * |
| 4 | * Diese Datei wird von BEIDEN Seiten eingebunden - vom Hauptprozess ueber |
| 5 | * tsconfig.electron.json und vom Renderer ueber den Alias "@shared". Dadurch |
| 6 | * kann ein Kanal nicht mehr auf einer Seite umbenannt werden, ohne dass die |
| 7 | * andere Seite beim Uebersetzen bricht. |
| 8 | * |
| 9 | * Im Altbestand waren die Kanalnamen an drei Stellen als Zeichenketten |
| 10 | * hinterlegt (Renderer, preload.js, main.js). Der Renderer rief unter anderem |
| 11 | * Kanaele auf, die im preload gar nicht angeboten wurden; der Aufruf lief still |
| 12 | * ins Leere, und die zugehoerige Schaltflaeche tat nichts. |
| 13 | */ |
| 14 | |
| 15 | export const IPC = { |
| 16 | saveFile: 'lsa:save-file', |
| 17 | openFile: 'lsa:open-file', |
| 18 | writeFile: 'lsa:write-file', |
| 19 | readFile: 'lsa:read-file', |
| 20 | setDirty: 'lsa:set-dirty', |
| 21 | menuCommand: 'lsa:menu-command', |
| 22 | requestClose: 'lsa:request-close', |
| 23 | closeResponse: 'lsa:close-response', |
| 24 | logError: 'lsa:log-error', |
| 25 | logPath: 'lsa:log-path', |
| 26 | fetchMapImage: 'lsa:fetch-map-image', |
| 27 | oeffneVerweis: 'lsa:oeffne-verweis', |
| 28 | } as const; |
| 29 | |
| 30 | /** |
| 31 | * Die Ziele, die sich aus dem Programm heraus oeffnen lassen. |
| 32 | * |
| 33 | * EIN SCHLUESSEL UND KEINE ADRESSE - das ist der ganze Punkt dieses Kanals. |
| 34 | * `shell.openExternal` gibt eine Zeichenkette an das Betriebssystem; naehme |
| 35 | * dieser Kanal eine Adresse entgegen, koennte eine praeparierte Projektdatei |
| 36 | * ueber jeden Weg, der Projektdaten in die Oberflaeche traegt, bestimmen, was |
| 37 | * sich oeffnet. Genau so liess sich im Altbestand ueber den Dateipfad |
| 38 | * beliebiger Code ausfuehren. |
| 39 | * |
| 40 | * Der Hauptprozess bildet den Schluessel auf eine dort fest hinterlegte Adresse |
| 41 | * ab. Aus dem Renderer kommt nie mehr als eines dieser drei Woerter, und ein |
| 42 | * viertes bricht schon beim Uebersetzen. |
| 43 | */ |
| 44 | export type Verweisziel = 'internetseite' | 'quellcode' | 'unterstuetzung'; |
| 45 | |
| 46 | /** Abruf eines Kartenbilds beim amtlichen Dienst. */ |
| 47 | export interface KartenAnfrage { |
| 48 | readonly url: string; |
| 49 | } |
| 50 | |
| 51 | export interface KartenAntwort { |
| 52 | readonly ok: boolean; |
| 53 | /** Bilddaten als Daten-URL; nur bei ok === true belegt. */ |
| 54 | readonly datenUrl: string | null; |
| 55 | readonly fehler: string | null; |
| 56 | } |
| 57 | |
| 58 | /** Meldung an das Fehlerprotokoll. */ |
| 59 | export interface ErrorReport { |
| 60 | /** Wo ist der Fehler aufgetreten? */ |
| 61 | readonly quelle: string; |
| 62 | readonly nachricht: string; |
| 63 | readonly stapel?: string; |
| 64 | /** Zustand der Anwendung zum Zeitpunkt des Fehlers, fuer die Einordnung. */ |
| 65 | readonly zustand?: Record<string, string | number | boolean>; |
| 66 | } |
| 67 | |
| 68 | export type IpcChannel = (typeof IPC)[keyof typeof IPC]; |
| 69 | |
| 70 | export interface FileDialogFilter { |
| 71 | readonly name: string; |
| 72 | readonly extensions: readonly string[]; |
| 73 | } |
| 74 | |
| 75 | export interface SaveFileRequest { |
| 76 | readonly defaultName: string; |
| 77 | readonly filters: readonly FileDialogFilter[]; |
| 78 | readonly data: string | Uint8Array; |
| 79 | } |
| 80 | |
| 81 | export interface SaveFileResult { |
| 82 | readonly ok: boolean; |
| 83 | readonly canceled: boolean; |
| 84 | readonly filePath: string | null; |
| 85 | readonly error: string | null; |
| 86 | } |
| 87 | |
| 88 | export interface OpenFileResult { |
| 89 | readonly ok: boolean; |
| 90 | readonly canceled: boolean; |
| 91 | readonly filePath: string | null; |
| 92 | readonly content: string | null; |
| 93 | readonly error: string | null; |
| 94 | } |
| 95 | |
| 96 | /** Befehle, die das Anwendungsmenue an den Renderer sendet. */ |
| 97 | export type MenuCommand = |
| 98 | 'neu' | 'oeffnen' | 'speichern' | 'speichern-unter' | 'export' | 'hilfe' | 'ueber'; |