- Systemfenster mit Toolbar (Dateien, Zielordner, Start), Tabelle mit
Standbild samt Ausschnitt, Ausschnitt-Knopf, Status als Text; das ganze
Fenster nimmt Dateien an. Folgt hell/dunkel des Systems, Gold nur als Akzent.
- Ausschnitt-Ansicht: Rahmen ziehen, Mittig setzen (Z/Doppelklick), Marken
setzen (M), per Hover-×, Rechtsklick oder ⌫ löschen, eigene Zeitleiste.
- Zielordner immer sichtbar; Start fragt ihn ab, statt still ausgegraut zu sein.
- Fehlendes Format im Namen wird beim Reinziehen gezeigt, mit "4x5 anhängen"
pro Datei oder für alle.
- Sparkle-Updater wird jetzt tatsächlich gestartet (vorher nur eingebunden),
plus "Nach Updates suchen …" im App-Menü.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ShKCZzkdZhym6mHuPqXQAT
Schritt 5 der Umsetzungsreihenfolge.
ReviewSheet zeigt die Quelldatei per AVKit VideoPlayer (Scrubbing,
Play/Pause etc. kommen dadurch kostenlos mit) und blendet oben/unten
abgedunkelte Balken plus einen hellen Rahmen für die bleibende 4:5-
Fläche ein. Die Geometrie kommt direkt aus
CropEngine.targetSize(forSourceSize:) — die Vorschau zeigt also exakt
das, was beim tatsächlichen Crop rauskommt, keine zweite Berechnung.
Erreichbar über einen Vorschau-Button pro Zeile in der Dateiliste.
Bewusst noch nicht enthalten (README, "Danach"-Liste): verstellbarer
vertikaler Crop-Offset — die Ansicht ist reine Framing-Kontrolle.
Schließt eine MVP-Lücke: README verlangt "überschreiben nur nach
Rückfrage", bisher landete CropEngineError.destinationAlreadyExists
nur als Fehler in der Liste.
ConversionPipeline.previewDestination berechnet den Zielpfad einer
Datei, ohne irgendetwas anzufassen — damit kann die Oberfläche vor dem
Start prüfen, ob Konflikte bestehen, statt es mitten im Batch zu
entdecken. Bei Konflikten zeigt ConversionCoordinator einen Sammel-
Alert (Ersetzen/Überspringen/Abbrechen) für den ganzen Batch; eine
Datei-für-Datei-Auswahl wäre für das MVP unverhältnismäßig viel UI für
einen Randfall.
Neuer DropItem.Status-Fall .skippedByUser unterscheidet eine bewusste
Nutzerentscheidung von einem echten Fehler/Reject.
Schritt 4 der Umsetzungsreihenfolge.
- AppSettings: Quell-/Zielordner über Security-Scoped Bookmarks,
überlebt einen Neustart.
- DropZoneView: Drag & Drop plus Dateiauswahl-Dialog, öffnet im
konfigurierten Quellordner.
- ConversionCoordinator treibt JobQueue an, sortiert neue Dateien nach
zuletzt geändert, hält Fortschritt/Status pro Datei nach.
- FileListView zeigt Fortschritt und hebt Problemfälle (übersprungen/
abgelehnt/fehlgeschlagen) sichtbar hervor — keine stillen Abbrüche.
- CoreErrors+LocalizedError: deutsche Klartexte für die Core-Fehler-
Enums leben bewusst im App-Target, nicht im UI-freien Core.
- AppIcon aus assets/icon.svg gebaut (alle 10 macOS-Icongrößen via
rsvg-convert, ImageMagicks eingebauter SVG-Renderer hat den
Rahmen-Stroke verschluckt).
Bewusst ausgeklammert (spätere Schritte): Review-Ansicht, Menu-Bar-
Betrieb, Signierung/Notarisierung/Sparkle, Overwrite-Rückfrage-Dialog.