Der Abschnitt verschwand alle drei Sekunden und kam wieder
`laden()` setzte `innerHTML = ''` und baute die Mediathekenliste neu — während eines Scans alle drei Sekunden. Der ganze Abschnitt flackerte sichtbar, und wer gerade auf einen Knopf zielte, klickte ins Leere. Schlimmer: jeder Neuaufbau startete über `verfolgen(false)` einen weiteren Takt. Nach einer Minute liefen zwanzig davon nebeneinander. Jetzt wird fortgeschrieben statt neu gezeichnet: eine Zeile je Mediathek, die bleibt, und nur Kopfzeile, Prüfungsknopf und Freigabeknopf ändern sich. Belegt im Browser — nach einem Auffrischen sind es dieselben Knoten, nur die Beschriftung ist eine andere. Dieselbe Behandlung für die Seitenleiste. Und weil Seitenleiste und Verwaltung getrennt nachfragten, zeigten sie zwei Momente — 95 hier, 84 dort, während im Hintergrund Doppelte zusammengelegt wurden. Die Verwaltung reicht ihren Stand jetzt weiter: ein Abruf, zwei Anzeigen. Dazu zwei Dinge, die beim Prüfen auffielen. Zurücksetzen und Entfernen prallen jetzt serverseitig mit 409 ab, solange ein Lauf läuft — die Oberfläche sperrt die Knöpfe, aber darauf darf sich der Server nicht verlassen; ein Aufruf von Hand während eines Scans liess den Lauf an einer DbUpdateConcurrencyException sterben. Und in der Fortschrittszeile steht beim Holen der Folgenmetadaten jetzt der Serienname: „Folge 2×13" allein sagt bei 3815 Folgen nichts. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
a6e9a6e425
commit
960cca3dae
@@ -500,6 +500,32 @@ public class ScanTests
|
||||
Assert.That(offen.Dateien[0].Grund, Does.Contain("keine Folgennummer"));
|
||||
}
|
||||
|
||||
/// <summary>Zurücksetzen und Entfernen prallen ab, solange ein Lauf läuft.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
/// <b>Die Oberfläche sperrt die Knöpfe, aber darauf darf sich der Server nicht
|
||||
/// verlassen.</b> Beim Prüfen von Hand ist genau das passiert: ein
|
||||
/// „Zurücksetzen" per curl während eines Scans, und der Lauf starb an einer
|
||||
/// DbUpdateConcurrencyException. Ein zweiter Administrator genügt dafür auch.
|
||||
/// </remarks>
|
||||
[Test]
|
||||
public async Task Zuruecksetzen_waehrend_eines_Scans_wird_abgelehnt()
|
||||
{
|
||||
for (var i = 1; i <= 400; i++) Datei($"Dark/Staffel 1/Dark - S01E{i:D3}.mkv");
|
||||
|
||||
using var server = new FlaroServer();
|
||||
var (client, bibliothek) = await MitBibliothek(server, "Shows");
|
||||
|
||||
var gestartet = await client.PostAsync($"/api/v1/libraries/{bibliothek}/scan", null);
|
||||
Assert.That(gestartet.StatusCode, Is.EqualTo(HttpStatusCode.Accepted));
|
||||
|
||||
var zurueck = await client.PostAsync($"/api/v1/libraries/{bibliothek}/reset", null);
|
||||
var weg = await client.DeleteAsync($"/api/v1/libraries/{bibliothek}");
|
||||
|
||||
Assert.That(zurueck.StatusCode, Is.EqualTo(HttpStatusCode.Conflict));
|
||||
Assert.That(weg.StatusCode, Is.EqualTo(HttpStatusCode.Conflict));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Die_Suche_grenzt_ein()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user