„Wartet" für immer, obwohl der Server längst fertig war

Der Eintrag ging nach einer 202 zurück auf „wartet" und rief danach
`resume`. Das nimmt aber nur auf, was **angehalten oder gescheitert**
ist — ein wartender lief in die Schutzklausel und kam nie wieder heraus.
Im Protokoll packte ffmpeg um, in der App stand „wartet", und dazwischen
lag nichts.

Jetzt wird die Warteschlange abgearbeitet statt ein einzelner Eintrag
aufgenommen; „wartet" steht darin.

Dazu zwei Dinge, um die du gebeten hast:

**Das Protokoll liest sich wie eine Kommandozeile.** Älteste Zeile oben,
neueste unten, die Ansicht steht am Ende. Mitgeschoben wird nur, wenn man
unten steht — wer hochgescrollt hat, liest etwas, und ihn bei jeder neuen
Zeile ans Ende zu reissen wäre, als nähme man ihm die Seite aus der Hand.

**Ein Tipp auf eine Kachel führt auf die Detailseite**, am Telefon wie am
iPad wie am Mac. Nur in „Weiterschauen" spielt er ab: dort steht der
Titel, *weil* man ihn angefangen hat. Vorher war es umgekehrt, mit dem
Argument „wer eine Kachel antippt, weiss schon, was er sehen will". Im
Gebrauch stimmte das nicht — wer nachsehen wollte, wie viele Staffeln
eine Serie hat, bekam den Film. Ein Umweg von einem Schritt ist
ärgerlich; eine Wiedergabe, die man nicht wollte, ist schlimmer.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-11 20:56:39 +02:00
co-authored by Claude Opus 5
parent ce5dc66047
commit 0a394b9b3b
5 changed files with 53 additions and 33 deletions
@@ -648,10 +648,14 @@ public final class DownloadCoordinator {
item.state = .waiting
save()
// **Nicht `resume`.** Das nimmt nur auf, was angehalten oder
// gescheitert ist — ein wartender Eintrag lief dort in die
// Schutzklausel und blieb für immer auf „wartet" stehen, während der
// Server längst fertig gepackt hatte. Die Warteschlange abzuarbeiten
// ist das, was hier gebraucht wird: `.waiting` steht darin.
Task { [weak self] in
try? await Task.sleep(for: Self.wartezeit)
guard let self else { return }
await self.resume(item)
await self?.startNextIfPossible()
}
}