Files
rippy/rippy-windows/src/kern/kontext.ts
T
HitonabiandClaude Fable 5.1 3dc6798c79 feat(v5): 5.5.0 — Kern und Oberfläche aufgeteilt, Übersicht und Einstellungen neu, Erst-Einrichtung mit Poster-Kulisse
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>
2026-09-02 17:51:15 +02:00

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
}