Spider-Man ist nicht 720p, er ist breit
Die Auflösung wurde allein aus der Höhe gebildet. Ein Kinoformat von 2.39:1 liegt als 1920×800 vor — nach der Höhe gerechnet kam „720p" heraus, und das stand so in der Oberfläche. Jetzt zählt die grössere von Breite und Höhe; Hochformat kippt damit nicht, und 4K-Breitbild heisst nicht mehr 1440p. Die Detailansicht hat zwei Leserschaften, und bisher bekamen beide dasselbe. Wer schauen will, sieht jetzt Laufzeit, Auflösung und die Sprachen — jede einmal, statt „Englisch · Englisch · Englisch · Englisch · Deutsch". Wer die Mediathek betreut, sieht darunter Dateiformat, Grösse und den Ordner. Der Ordner verrät eine falsche Zuordnung in einer Sekunde: steht über der Beschreibung „Hanni & Nanni 3" und der Ordner heisst „Hanni und Nanni", ist die Sache klar. Er kommt nur für Administratoren überhaupt vom Server — versteckt im Client wäre er weiterhin auslesbar. Ein geplanter Titel war unsichtbar. Das ist die Hälfte, die nichts bringt: dass er kommt, ist der Sinn des Planens. Er steht jetzt mit „Verfügbar ab …" in der Mediathek, und die Datei geht trotzdem nicht heraus — Download wie Strom lehnen bis zum Termin ab, auch für Administratoren. Wer vorziehen will, hat „Jetzt veröffentlichen"; eine Hintertür für eine Rolle wäre eine Regel, die manchmal gilt. Was ein Auffrischen geändert hat, steht jetzt unter „Zu prüfen" — in einer eigenen Gruppe mit „Zur Kenntnis" statt „Veröffentlichen". Diese Titel sind sichtbar; es gibt nichts freizugeben, nur etwas abzuhaken. Und das Protokoll sagt endlich, wo es knallt. „InvalidOperationException: Nullable object must have a value." ohne eine einzige Zeile Herkunft ist für niemanden eine Diagnose — weder für den Betreiber noch für mich. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f44779c899
commit
255eb7c2f0
@@ -278,22 +278,34 @@ public sealed class FlaroContext(DbContextOptions<FlaroContext> options) : DbCon
|
||||
|
||||
// **Die Freigaberegel, einmal und für jede Abfrage.**
|
||||
//
|
||||
// Ein Titel ist sichtbar, wenn ein Zeitpunkt gesetzt ist und er
|
||||
// erreicht wurde. Gerechnet statt gespeichert: damit stimmt es nach
|
||||
// einem Neustart, nach einer Zeitumstellung und auch dann, wenn der
|
||||
// Server zum geplanten Zeitpunkt gar nicht lief.
|
||||
// <b>Zwei Zustände, nicht einer.</b> Ohne Zeitpunkt wartet ein Titel
|
||||
// auf eine Entscheidung — den soll niemand sehen, er ist noch nicht
|
||||
// einmal geprüft. Mit einem Zeitpunkt in der Zukunft ist die
|
||||
// Entscheidung gefallen: er kommt, nur noch nicht. Den zu verstecken
|
||||
// hiesse, eine Vorfreude zu unterschlagen, die der Sinn des Planens
|
||||
// ist — bei Netflix steht „Ab 14. März" auf der Kachel, und genau das
|
||||
// soll hier auch stehen.
|
||||
//
|
||||
// <b>Sichtbar heisst nicht abspielbar.</b> Dass die Datei vor dem
|
||||
// Zeitpunkt nicht herausgeht, steht nicht hier, sondern bei der
|
||||
// Auslieferung — ein Filter, der etwas zeigt, darf nicht zugleich der
|
||||
// sein, der es herausgibt.
|
||||
//
|
||||
// Gerechnet statt gespeichert: damit stimmt es nach einem Neustart,
|
||||
// nach einer Zeitumstellung und auch dann, wenn der Server zum
|
||||
// geplanten Zeitpunkt gar nicht lief.
|
||||
b.Entity<Movie>().HasQueryFilter(m =>
|
||||
AuchUnveroeffentlichtes || (m.PublishAt != null && m.PublishAt <= Jetzt));
|
||||
AuchUnveroeffentlichtes || m.PublishAt != null);
|
||||
|
||||
b.Entity<Episode>().HasQueryFilter(f =>
|
||||
AuchUnveroeffentlichtes || (f.PublishAt != null && f.PublishAt <= Jetzt));
|
||||
AuchUnveroeffentlichtes || f.PublishAt != null);
|
||||
|
||||
// **Die Serie hängt an ihren Folgen.** Ein eigenes Feld gäbe zwei
|
||||
// Wahrheiten — eine veröffentlichte Serie, deren Folgen alle noch
|
||||
// warten, wäre ein leerer Eintrag in der Mediathek.
|
||||
b.Entity<Series>().HasQueryFilter(s =>
|
||||
AuchUnveroeffentlichtes
|
||||
|| Episodes.Any(f => f.SeriesId == s.Id && f.PublishAt != null && f.PublishAt <= Jetzt));
|
||||
|| Episodes.Any(f => f.SeriesId == s.Id && f.PublishAt != null));
|
||||
|
||||
b.Entity<ItemTranslation>(e =>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user