README: Stand nach dem Praxistest

Die Tabelle stand noch auf „Phase 0 steht". Inzwischen laufen Anmeldung,
Blättern und Wiedergabe am echten Server — auf iPhone und iPad. Die
offenen Punkte sind jetzt einzeln benannt statt pauschal „ungeprüft".

Dazu ein Abschnitt über die drei Fehler, die kein Test gefunden hätte,
weil sie in Annahmen über fremde Bibliotheken steckten: VLCKits Thread,
die nicht verknüpfende Auth-Seite von Plex, und der Download-Task, der
auch bei 404 als erfolgreich gilt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-09-11 22:33:30 +02:00
co-authored by Claude Opus 5
parent 6150b018ec
commit eea81aad2f
+31 -14
View File
@@ -7,8 +7,8 @@ Der Name ist ein Platzhalter. Siehe [`Flixy/Branding.swift`](Flixy/Branding.swif
## Stand
Phase 0 (Fundament) steht. Die App startet, die Navigation ist begehbar, die
Inhalte folgen in Phase 1.
Alle sechs Phasen sind gebaut. Anmeldung, Blättern und Wiedergabe laufen am
echten Server; der Rest ist unterschiedlich weit geprüft.
Der Fahrplan steht in
[`docs/superpowers/specs/2026-09-11-flixy-design.md`](docs/superpowers/specs/2026-09-11-flixy-design.md).
@@ -16,15 +16,29 @@ Der Fahrplan steht in
| Phase | Inhalt | Stand |
|---|---|---|
| 0 | Projektgerüst, Design-Tokens, Navigation | ✅ |
| 1 | Anmeldung, Bibliothek, DirectPlay | ✅ Anmeldung am Server geprüft, der Rest nicht |
| 2 | Transcoding, adaptive Bitrate, Spuren, Sync | ✅ gebaut, ungeprüft |
| 3 | Download-Engine und Offline-Wiedergabe | ✅ gebaut, ungeprüft |
| 4 | Download-Intelligenz | ✅ gebaut; komprimierte Downloads ungeprüft |
| 5 | Feinschliff und Personalisierung | ✅ gebaut, ungeprüft |
| 6 | Live-TV mit EPG | ✅ gebaut, an keinem DVR geprüft |
| 1 | Anmeldung, Bibliothek, DirectPlay | ✅ am Server geprüft, iPhone und iPad |
| 2 | Transcoding, adaptive Bitrate, Spuren, Sync | ✅ Wiedergabe geprüft; Transcoding selbst noch nicht erzwungen |
| 3 | Download-Engine und Offline-Wiedergabe | ⚠️ Downloads starten, Offline-Wiedergabe noch nicht bestätigt |
| 4 | Download-Intelligenz | ⚠️ komprimierte Downloads ungeprüft |
| 5 | Feinschliff und Personalisierung | ✅ gebaut, teilweise geprüft |
| 6 | Live-TV mit EPG | ⚠️ Empfänger werden gefunden, Sender noch nicht bestätigt |
„Ungeprüft" heißt: die Logik ist von Tests abgedeckt, die Oberfläche wurde aber
noch nie mit einem echten Bestand gesehen.
„Ungeprüft" heißt: die Logik ist von Tests abgedeckt, an einem echten Bestand
aber noch nicht gesehen.
### Was der Praxistest gelehrt hat
Drei Fehler, die kein Test gefunden hätte, weil sie in Annahmen über fremde
Bibliotheken steckten — sie stehen als Warnung im jeweiligen Quelltext:
- **VLCKit ruft seinen Delegaten vom eigenen Thread**, nicht über die
Hauptwarteschlange. `MainActor.assumeIsolated` brach die App beim Drücken
auf Play hart ab.
- **`app.plex.tv/auth` verknüpft den Code nicht**, wenn man im Browser schon
bei Plex angemeldet ist — es springt auf watch.plex.tv weiter. `plex.tv/link`
tut es zuverlässig.
- **`URLSessionDownloadTask` gilt auch bei 404 als erfolgreich** und legt die
Fehlerseite als Datei ab.
## Aufbau
@@ -96,10 +110,13 @@ Die Oberfläche wird von Hand im Simulator geprüft.
`Content-Length` mitschickt (ohne sie gibt es keinen Fortschrittsbalken und
kein Fortsetzen) und ob die Datei durchsuchbar ist. Original bleibt solange
Voreinstellung. Siehe `transcodedDownloadURL` in `PlexServer+Playback.swift`.
2. **Live-TV.** Der am schlechtesten dokumentierte Teil der Plex-API — es gibt
keine offizielle Beschreibung. Die Modelle sind durchgehend nachsichtig
gebaut, und ohne eingerichteten Empfänger erklärt die App das, statt einen
Fehler zu zeigen.
Ein Fehlschlag erscheint immerhin als solcher — die Plausibilitätsprüfung in
`DownloadCoordinator.implausibility` verwirft Fehlerseiten und abgebrochene
Übertragungen, statt sie als fertig zu verbuchen.
2. **Live-TV: die Senderliste.** Dass die Empfänger unter `Dvr` gefunden
werden, ist geprüft. Ob `/livetv/dvrs/{id}/channels` die Sender liefert,
nicht. Die Ansicht unterscheidet beide Fälle: „Kein Empfänger eingerichtet"
gegen „Keine Sender" — daran ist ablesbar, wo es hakt.
3. **App-Größe.** Die iOS-Slice von VLCKit ist unstripped 239 MB. Was davon im
fertigen Archiv übrig bleibt, ist noch nicht gemessen.
4. **Große Dateien im Hintergrund.** Das Verhalten mit einem 40-GB-Remux — vor