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>
34 lines
1.4 KiB
TypeScript
34 lines
1.4 KiB
TypeScript
// Die Platz-Prüfung vor dem Rip (5.5.0) — EINE Rechnung für Kern und
|
|
// Fenster: Roh plus geschätzt 25 % für die Kompression, plus 2 GB Luft.
|
|
// Der Kern urteilt beim Start (index.ts ripMitPlatz — auch für die
|
|
// Automatik), der Dialog zeigt dasselbe Urteil schon vor dem Klick
|
|
// (TitelWahlDialog).
|
|
export const PLATZ_LUFT_BYTES = 2e9
|
|
export const KOMPRESSION_ANTEIL = 0.25
|
|
|
|
export interface PlatzUrteil {
|
|
/** Leer, wenn der Platz reicht — sonst der Grund in Klartext. */
|
|
text: string
|
|
/** true: nicht einmal der verlustfreie Rip passt — der Start wird verweigert. */
|
|
hart: boolean
|
|
}
|
|
|
|
export function gbText(bytes: number): string {
|
|
return `${(bytes / 1e9).toFixed(1).replace('.', ',')} GB`
|
|
}
|
|
|
|
export function platzUrteil(freiBytes: number, rohBytes: number, komprimiert: boolean): PlatzUrteil {
|
|
const noetig = rohBytes + (komprimiert ? rohBytes * KOMPRESSION_ANTEIL : 0) + PLATZ_LUFT_BYTES
|
|
if (freiBytes >= noetig) return { text: '', hart: false }
|
|
if (freiBytes < rohBytes + PLATZ_LUFT_BYTES) {
|
|
return {
|
|
text: `Zu wenig Platz: ${gbText(freiBytes)} frei, der Rip braucht ${gbText(rohBytes)} verlustfrei. Das geht schief — erst Platz schaffen (Einstellungen → Roh-Dateien).`,
|
|
hart: true,
|
|
}
|
|
}
|
|
return {
|
|
text: `Knapp: ${gbText(freiBytes)} frei, gebraucht werden etwa ${gbText(noetig)} (Roh plus Kompression). Aufräumen unter Roh-Dateien hilft.`,
|
|
hart: false,
|
|
}
|
|
}
|