Die Markensuche lief stundenlang über 95 Serien, 4213 Folgen und 453
Filme und schrieb dabei fünf Zeilen, in denen Kennungen standen statt
Namen. „Markenerkennung für 4f3a…: 12 Marken." beantwortet keine der
Fragen, die in den letzten Tagen tatsächlich aufkamen — welche Staffel
nichts bekommen hat, warum, und ob die Serie überhaupt dran war.
Jetzt nennt jede Zeile den Titel, und es gibt eine je Serie, je Staffel
und je Folge:
„Biohackers": 2 Staffel(n), 18 Folge(n).
„Biohackers", Staffel 2: Vorspann in 8 von 8 Folge(n), Abspann in 1 von 8.
Biohackers S02E01 · Neuanfang: Vorspann 0:31–1:24, Abspann ab 41:12 (über das Bild).
Biohackers S02E07 · Letzte Fahrt: Vorspann 0:31–1:24, kein Abspann.
„Biohackers" fertig: 14 Marke(n).
Die Folgenzeilen werden **aus der Datenbank gelesen, nicht mitgezählt**:
so steht dort, was danach wirklich an der Folge hängt, und nicht, was
dieser eine Lauf geschrieben hat. Nur das beantwortet „warum kommt bei
dieser Folge kein Knopf?".
**Drei Gründe statt eines `false`.** `FilmAsync` gab für „keine Datei",
„schon durchsucht" und „nichts gefunden" dasselbe zurück, und von aussen
waren sie nicht zu unterscheiden. Jetzt sagt jeder seinen Namen.
**Und eine Live-Zeile bei der Mediathek**, wie der Scan sie hat. Sie
benutzt denselben Mechanismus — `Scanschritt` mit einer neuen Phase,
derselbe Endpunkt, ein eigenes Feld. Ein eigenes, weil der Scan sich auf
„fertig" setzt, sobald er die Markensuche angestossen hat; in sein Feld
geschrieben sähe er wieder laufend aus.
**Zwei Fehler sind dabei herausgefallen.** In `NachScanAsync` stand
`if (serien.Count == 0) return;` vor dem Filmteil — eine reine
Filmmediathek bekam nach einem Scan also nie eine Abspannsuche. Und die
fpcalc-Prüfung stand ganz oben und galt für beides, obwohl der Bildweg
fpcalc gar nicht braucht: ohne fpcalc fand der Server keinen einzigen
Filmabspann.
Dazu ein Suchfeld im Protokoll und tausend Anfangszeilen statt
dreihundert. Ohne das wäre eine Zeile je Folge keine Auskunft, sondern
eine Mauer — genau der Fall, gegen den sich `ScanCoordinator` für den
Scan schon einmal entschieden hat.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
56 lines
2.1 KiB
C#
56 lines
2.1 KiB
C#
using Flaro.Core.Library;
|
|
|
|
namespace Flaro.Core.Tests;
|
|
|
|
/// <summary>Der Satz, der in der Verwaltung mitläuft.</summary>
|
|
///
|
|
/// <remarks>
|
|
/// <b>Warum das geprüft wird.</b> Die Markensuche läuft über Stunden und
|
|
/// hat bisher gar nichts gemeldet — in der Verwaltung stand das Ergebnis
|
|
/// des längst beendeten Scans, während der Server noch jede Folge
|
|
/// durchhörte. Sie benutzt jetzt denselben Weg wie der Scan, und der Satz
|
|
/// entsteht hier, nicht in der Oberfläche: die Apps brauchen denselben.
|
|
/// </remarks>
|
|
public class ScanschrittTests
|
|
{
|
|
/// <summary>Mit Zähler, wenn die Gesamtzahl bekannt ist.</summary>
|
|
[Test]
|
|
public void Die_Markensuche_nennt_Titel_und_Zaehler()
|
|
{
|
|
var schritt = new Scanschritt(
|
|
Scanphase.Marken, "Biohackers S02E01 · Neuanfang", 12, 95);
|
|
|
|
Assert.That(schritt.Text(),
|
|
Is.EqualTo("Suche Vorspann und Abspann: Biohackers S02E01 · Neuanfang — 12 von 95"));
|
|
}
|
|
|
|
/// <summary>Ohne Gesamtzahl kein Zähler — „3 von 0" wäre eine Falschauskunft.</summary>
|
|
[Test]
|
|
public void Ohne_Gesamtzahl_steht_nur_der_Titel()
|
|
{
|
|
var schritt = new Scanschritt(Scanphase.Marken, "Arrival (2016)");
|
|
|
|
Assert.That(schritt.Text(), Is.EqualTo("Suche Vorspann und Abspann: Arrival (2016)"));
|
|
}
|
|
|
|
/// <summary>Die vorhandenen Phasen bleiben, wie sie waren.</summary>
|
|
///
|
|
/// <remarks>
|
|
/// Eine neue Phase in der Mitte der Aufzählung hätte die gespeicherten
|
|
/// Zahlen verschoben — hier steht, dass die Sätze unverändert sind.
|
|
/// </remarks>
|
|
[Test]
|
|
public void Der_Scan_sagt_weiterhin_dasselbe()
|
|
{
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(new Scanschritt(Scanphase.Pruefen, "a/b/c.mkv", 7, 9).Text(),
|
|
Is.EqualTo("Prüfe b/c.mkv — 7 von 9"));
|
|
Assert.That(new Scanschritt(Scanphase.Aufraeumen, "").Text(),
|
|
Is.EqualTo("Räume auf und lege Doppeltes zusammen"));
|
|
Assert.That(new Scanschritt(Scanphase.Vermerk, "Serie angelegt").Text(),
|
|
Is.EqualTo("Serie angelegt"));
|
|
});
|
|
}
|
|
}
|