Fünf Aufmacher je Titel, und der Abspann zählt als Schluss
**Der Aufmacher darf wechseln.** Bisher hing hinter jedem Titel genau ein Hintergrundbild, und das Karussell war nach einer Woche ein Standbild. Jetzt lassen sich bis zu fünf Aufnahmen aussuchen — im Bilderdialog unter einem vierten Reiter, gespeist aus denselben Hintergründen. Welches gerade gilt, entscheidet der Server aus Uhrzeit und Kennung: alle fünf Stunden ein anderes, überall dasselbe — im Web, in der App, nach einem Neustart. Ein Zufall je Abruf hiesse, dass das Bild beim Blättern springt; eine gespeicherte Wahl hiesse einen Schreibvorgang je Titel und Fenster. Die Kennung geht mit in die Rechnung, damit nicht alle Titel im selben Augenblick umschalten. Plakat und Hintergrund bleiben unberührt. Sie stehen hinter Kacheln und Kopfzeilen, und dort soll nichts wechseln. **Und der Abspann zählt als Schluss.** Eine Serie hängt sechs Minuten Abspann an eine Folge von fünfundvierzig; neunzig Prozent liegen dann mittendrin, und die Folge gilt erst als gesehen, wenn man ihn sich ganz ansieht. Die Schwelle herunterzudrehen hiesse, jeden anderen Titel zu früh abzuhaken. Der erkannte Abspann ist die genauere Antwort auf dieselbe Frage — er zieht die Schwelle nach vorn, nie nach hinten. Dazu der Verlauf über dem Aufmacher: er war immer noch zu dunkel. Jetzt trägt der Schattenwurf der Schrift, was vorher eine Decke über dem ganzen Bild tat. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
8cf2118723
commit
1d70be0f99
@@ -95,6 +95,8 @@ enum Wire {
|
||||
let overview: String?
|
||||
let posterImage: String?
|
||||
let backdropImage: String?
|
||||
/// Das Bild, das jetzt im Aufmacher gilt — vom Server gewählt.
|
||||
let heroImage: String?
|
||||
let files: [File]
|
||||
let state: ItemState?
|
||||
/// Ab wann abspielbar. In der Zukunft heisst: noch nicht.
|
||||
@@ -108,6 +110,8 @@ enum Wire {
|
||||
let overview: String?
|
||||
let posterImage: String?
|
||||
let backdropImage: String?
|
||||
/// Das Bild, das jetzt im Aufmacher gilt — vom Server gewählt.
|
||||
let heroImage: String?
|
||||
let episodeCount: Int
|
||||
let seasons: [Int]
|
||||
let unwatchedCount: Int
|
||||
@@ -154,6 +158,8 @@ enum Wire {
|
||||
let year: Int?
|
||||
let posterImage: String?
|
||||
let backdropImage: String?
|
||||
/// Das Bild, das jetzt im Aufmacher gilt — vom Server gewählt.
|
||||
let heroImage: String?
|
||||
let state: ItemState
|
||||
/// Zu welcher Serie die Folge gehört.
|
||||
let seriesId: String?
|
||||
|
||||
@@ -16,6 +16,7 @@ extension Wire.Movie {
|
||||
duration: files.first?.durationSeconds.map { Int($0 * 1000) },
|
||||
thumb: posterImage,
|
||||
art: backdropImage,
|
||||
heroArt: heroImage,
|
||||
playCount: state?.playCount,
|
||||
resumeMilliseconds: state.map { Int($0.positionSeconds * 1000) },
|
||||
lastPlayedAt: state?.lastPlayedAt,
|
||||
@@ -37,6 +38,7 @@ extension Wire.Series {
|
||||
year: year,
|
||||
thumb: posterImage,
|
||||
art: backdropImage,
|
||||
heroArt: heroImage,
|
||||
// **Gesehene Folgen, nicht ungesehene.** Der Server zählt, was
|
||||
// offen ist — die App zeigt daraus die Plakette, rechnet aber
|
||||
// intern mit der Gegenzahl. Beides anzubieten hiesse, zwei Wege
|
||||
@@ -107,6 +109,7 @@ extension Wire.Started {
|
||||
// Serie ein Bild ausgesucht hatte, fand dort ein anderes vor.
|
||||
art: folge ? (seriesBackdropImage ?? backdropImage) : backdropImage,
|
||||
seriesThumb: folge ? posterImage : nil,
|
||||
heroArt: heroImage,
|
||||
index: episode,
|
||||
parentIndex: season,
|
||||
seriesTitle: folge ? title : nil,
|
||||
|
||||
Reference in New Issue
Block a user