Ein frischer JSONDecoder, drei Zeilen neben der Warnung davor
Im Web stand am Abspann „Nächste Folge", in der App nur „Abspann überspringen". Der Server war es nicht: beide fragen denselben Endpunkt, und der ordnet nach Staffel und dann nach Nummer — er findet also auch die erste Folge der nächsten Staffel. Es war `nachbar`. Die Stelle baute sich einen frischen `JSONDecoder()`, und der kennt das Datumsformat des Servers nicht. Solange die Nachbarfolge weder `publishAt` noch `lastPlayedAt` mitbrachte, ging es gut — mit eingeschalteter Prüfung bringt sie ein `publishAt`. Das `try?` schluckte den Fehler, und von aussen sah es aus, als gäbe es keine nächste Folge: kein Knopf, kein Hinweis, nichts. In `FlaroClient` steht seit je ein eingerichteter Dekoder, ausdrücklich nicht privat, „damit die Prüfungen denselben Dekoder benutzen" — und direkt darunter die Warnung, dass ein frischer an genau diesem Format scheitert. Diese eine Stelle las sie nicht. Vier Prüfungen dazu, darunter die mit Datumsangaben: mit dem alten Dekoder ist sie rot, mit dem neuen grün. Gegengeprüft, nicht behauptet. Die übrigen frischen Dekoder im Quelltext lesen nur, was dieselbe App vorher selbst geschrieben hat — Zwischenspeicher, Abzüge, Offline- Angaben. Die laufen rund und bleiben. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
ce4da992ea
commit
93f4dfd8e9
@@ -254,7 +254,14 @@ public actor FlaroBackend: MediaBackend {
|
||||
guard item.kind == .episode else { return nil }
|
||||
let daten = try await client.send(FlaroRequest(path: "/api/v1/episodes/\(item.id)/\(weg)"))
|
||||
guard !daten.isEmpty else { return nil }
|
||||
guard let folge = try? JSONDecoder().decode(Wire.Episode.self, from: daten) else { return nil }
|
||||
// **Der eingerichtete Dekoder, nicht ein frischer.** Ein frischer
|
||||
// kennt das Datumsformat des Servers nicht; sobald die Nachbarfolge
|
||||
// ein `publishAt` oder ein `lastPlayedAt` mitbringt — und mit
|
||||
// eingeschalteter Prüfung bringt sie es —, scheiterte das Lesen.
|
||||
// Das `try?` schluckte den Fehler, und von aussen sah es aus, als
|
||||
// gäbe es keine nächste Folge: der Knopf blieb weg.
|
||||
guard let folge = try? FlaroClient.decoder.decode(
|
||||
Wire.Episode.self, from: daten) else { return nil }
|
||||
return folge.neutral()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user