Mediatheken stehen sofort da statt sich jedes Mal neu zu laden

Jeder Aufruf einer Mediathek war ein Serverabruf mit Ladekreis davor. Die
Plakate lagen längst auf der Platte; was fehlte, war die Liste, die sagt,
welche davon hierhergehören.

Jetzt liegt die erste Seite als Abzug daneben: beim Aufrufen steht sie
sofort da, der Server wird still nachgefragt, und man sieht in aller Regel
nichts davon. Antwortet er nicht, bleibt der Abzug stehen — eine Liste von
gestern ist im Zug brauchbarer als ein Fehlerbildschirm.

Bewusst nur die erste Seite. Stünden 240 gespeicherte Titel da und der
Server antwortet mit 60, müsste entweder die Liste vor den Augen schrumpfen
oder der Versatz fürs Nachladen wäre falsch.

Gespeichert wird ausserdem nur, was eine Kachel zeigt. Ein Titel aus einer
Listenabfrage bringt jede Spur jeder Datei mit — im Raster steht davon
nichts, und ausgepackt werden müsste es bei jedem Aufrufen, also genau da,
wo der Abzug Zeit sparen soll.

Die Mediathekenliste selbst wird nur als Rettungsanker gemerkt, nicht als
Beschleuniger: sie sofort zu zeigen hiesse, eine Sitzung für fertig zu
erklären, bevor feststeht, dass der Token noch gilt.

Abmelden räumt alles weg. Titel, Zusammenfassungen und Sehfortschritt sind
persönlich.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-28 15:59:15 +02:00
co-authored by Claude Opus 5
parent 18958aadbc
commit 2dbe260901
10 changed files with 573 additions and 24 deletions
@@ -4,7 +4,7 @@ import Foundation
///
/// Ein Film kann mehrfach vorliegen: als 4K-Remux und als kleine Fassung fürs
/// Handy. Welche gespielt wird, entscheidet der Nutzer oder die Voreinstellung.
public struct MediaVersion: Sendable, Equatable, Identifiable {
public struct MediaVersion: Sendable, Equatable, Identifiable, Codable {
public let id: String
public let container: String?
public let videoCodec: String?
@@ -93,7 +93,7 @@ public struct MediaVersion: Sendable, Equatable, Identifiable {
}
/// Eine Datei auf dem Server.
public struct MediaFile: Sendable, Equatable, Identifiable {
public struct MediaFile: Sendable, Equatable, Identifiable, Codable {
public let id: String
/// Der Pfad, über den die Datei abgerufen wird.
public let key: String?
@@ -150,8 +150,8 @@ public struct MediaFile: Sendable, Equatable, Identifiable {
}
/// Eine Spur in einer Datei.
public struct MediaStream: Sendable, Equatable, Identifiable {
public enum Kind: Sendable, Equatable { case video, audio, subtitle }
public struct MediaStream: Sendable, Equatable, Identifiable, Codable {
public enum Kind: String, Sendable, Equatable, Codable { case video, audio, subtitle }
public let id: String
public let kind: Kind