Commander-Wünsche vom 02.09.2026 vor der Freigabe von 5.4.0 (die deshalb nie veröffentlicht wurde): Kern: kern/index.ts ist nur noch Bootstrap und Router; Dienste in kern/dienste/ (Einstellungen, Werkzeuge, Laufwerke, Erkennung, Vorgänge, Speicher, Benachrichtigung, Automatik), Kontext in kern/kontext.ts, Protokoll-Datei in gemeinsam/protokoll.ts, Platz-Rechnung in gemeinsam/platz.ts. Oberfläche: fenster/App.tsx ist nur noch der Rahmen; bausteine.tsx, dialoge/, uebersicht/ (LaufwerkKachel, KompressionsKarte, SpeicherKarte, VerlaufKarte), einstellungen/ (Karten je Funktion, SprachAuswahl), einrichtung/ (ErstEinrichtung, PosterHintergrund). Neu: Bibliothek weg, dafür Verlauf; Speicher-und-Bilanz-Karte (statfs); LED-Fußleiste; MakeMKV-Kopf in die Einstellungen; Sprach-Chips mit Dropdown statt Allgemeinem Preset; Karten Automatik/Benachrichtigung/Allgemein/Update; Durchsuchen bei Werkzeugen; Arbeitsordner lokal (Encode dort, dann in die Ablage); Platz-Prüfung vor dem Rip (Dialog und Kern); Automatik mit Countdown; Serien-Merker über Discs; Rettungs-Abbild mit Nullen nur nach gesehenen Lesefehlern (kern/rip/rettung.ts, Phase rettet, iso:-Quelle); Warteschlange pausieren; Discord/Telegram-Benachrichtigung; Protokoll-Datei je Tag; Fensterlage 80 % mittig, gemerkt; Erst-Einrichtung in acht Schritten vor dem Poster-Grid. Beweise: 413 Tests (neu: speicher, benachrichtigung, automatik, rettung, fensterlage, protokoll, kleinkram-550), drei Typprüfungen, Klick-Beweis mit 29 Schritten inklusive Erst-Einrichtung (zweiter Start mit RIPPY_START_BEREICH=einrichtung), Bilder beweise/klick/01…09. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
43 lines
1.9 KiB
TypeScript
43 lines
1.9 KiB
TypeScript
// Der gemeinsame Kontext der Kern-Dienste (5.5.0, Separation of Concerns):
|
|
// Jeder Dienst bekommt genau das hier — die Datenbank, die Wege nach
|
|
// draußen und das Protokoll — statt auf Modul-Globale zu greifen. So ist
|
|
// jeder Dienst für sich lesbar und mit einem Fake-Kontext testbar.
|
|
import type { DbStatus, KernNachricht } from '../gemeinsam/nachrichten'
|
|
import type { Protokoll } from '../gemeinsam/protokoll'
|
|
import type { Datenbank } from './speicher/db'
|
|
|
|
export interface KernKontext {
|
|
/** null, wenn die Datenbank nicht zu öffnen war — der Kern läuft trotzdem (R4). */
|
|
readonly db: Datenbank | null
|
|
readonly dbStatus: DbStatus
|
|
/** Nur ans Fenster (wenn eins verbunden ist). */
|
|
anFenster(nachricht: KernNachricht): void
|
|
/** Ans Haupt UND ans Fenster — für alles, was Tray/Taskleiste/Updater brauchen. */
|
|
anHauptUndFenster(nachricht: KernNachricht): void
|
|
/** Eine Zeile ohne Warnzeichen fürs Ereignis-Protokoll — und in die Datei. */
|
|
hinweis(text: string): void
|
|
/** Eine Zeile MIT Warnzeichen (kern-fehler) — und in die Datei. */
|
|
fehler(text: string): void
|
|
readonly protokoll: Protokoll
|
|
/** Der Gerüst-Beweis (--smoke-kern): ohne Netz, ohne MakeMKV, ohne Takte. */
|
|
readonly smoke: boolean
|
|
}
|
|
|
|
/** --datenbank=<pfad> kommt vom Haupt (der Kern kennt Electrons app.getPath
|
|
* nicht — er ist ein reiner Node-Prozess). */
|
|
export function datenbankPfadAusArgv(argv: readonly string[]): string | null {
|
|
for (const arg of argv) {
|
|
if (arg.startsWith('--datenbank=')) {
|
|
const pfad = arg.slice('--datenbank='.length)
|
|
if (pfad.length > 0) return pfad
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
|
|
/** Einstellung lesen mit Vorgabe — die eine Quelle (§ 6.7). */
|
|
export function einstellung(kontext: Pick<KernKontext, 'db'>, schluessel: string, vorgabe = ''): string {
|
|
const wert = kontext.db?.einstellungLesen(schluessel)
|
|
return wert === null || wert === undefined ? vorgabe : wert
|
|
}
|