import DropTwoCore import Foundation /// Ein Element in der Dateiliste der Oberfläche, mit seinem aktuellen /// Verarbeitungsstatus. Rein UI-seitig — die eigentliche Logik steckt in /// `ConversionPipeline`/`JobQueue` in DropTwoCore. struct DropItem: Identifiable { let id: UUID let sourceURL: URL var status: Status enum Status { case waiting case running(progress: Double) case skipped(SkipReason) case rejected(RejectionReason) case succeeded(croppedDestination: URL) case failed(message: String) /// Nutzer hat sich bei einer Overwrite-Rückfrage bewusst fürs /// Überspringen entschieden — kein Fehler, aber sichtbar im Verlauf. case skippedByUser(reason: String) /// Fehlerliste statt stiller Abbrüche: alles außer "läuft"/"fertig"/ /// "bewusst vom Nutzer übersprungen" braucht sichtbare Aufmerksamkeit. var needsAttention: Bool { switch self { case .skipped, .rejected, .failed: return true case .waiting, .running, .succeeded, .skippedByUser: return false } } } init(sourceURL: URL) { self.id = UUID() self.sourceURL = sourceURL self.status = .waiting } var fileName: String { sourceURL.lastPathComponent } }