namespace Flaro.Core.Playback; /// Wann ein Titel angefangen ist und wann er als gesehen gilt. /// /// /// /// Zwei Zahlen, die niemand raten kann. Wie lange man hineinschauen /// muss, damit es zählt, und ab welchem Anteil ein Film durch ist — das hängt /// davon ab, wie jemand schaut, nicht davon, was technisch richtig wäre. Beide /// standen als Konstante im Quelltext; jetzt stehen sie in den Einstellungen. /// /// /// Als Wert, nicht als Abfrage. bleibt damit /// ein reiner Typ: er rechnet, er liest nichts. Prüfbar ohne Datenbank, und /// derselbe Satz Regeln gilt für eine Meldung und für die Neubewertung aller /// vorhandenen Zeilen. /// /// /// /// /// Wie weit man gekommen sein muss, damit ein Titel in „Weiterschauen" steht. /// heisst: jede angefangene Sekunde zählt. /// /// Ab welchem Anteil der Laufzeit ein Titel gesehen ist. public readonly record struct Wiedergaberegeln(TimeSpan FortsetzenAb, double GesehenAnteil) { /// Was gilt, solange niemand etwas anderes eingestellt hat. /// /// /// Neunzig Sekunden, nicht null. Ohne Untergrenze genügte ein /// einziger Tick: wer im Aufmacher eine Sekunde hineinschaute, fand den /// Titel danach in „Weiterschauen" wieder. Eineinhalb Minuten sind lang /// genug, dass niemand aus Versehen hineinfällt, und kurz genug, dass eine /// abgebrochene Folge noch zählt. /// public static readonly Wiedergaberegeln Vorgabe = new(TimeSpan.FromSeconds(90), 0.90); /// Dieselben Regeln mit geprüften Werten. /// /// /// Was aus der Datenbank kommt, hat dort irgendwann jemand hineingeschrieben. /// Ein Anteil von 0 hiesse „alles ist gesehen", einer von 2 „nichts". /// public Wiedergaberegeln Geprueft() => new( FortsetzenAb < TimeSpan.Zero ? TimeSpan.Zero : FortsetzenAb, Math.Clamp(GesehenAnteil, 0.5, 1.0)); }