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
+32
-5
@@ -86,9 +86,33 @@ export async function mediathekenNeuLaden(): Promise<void> {
|
||||
* Endlosschleife mit zwei Abrufen je Runde, die sich als vier dauernd
|
||||
* drehende Spinner zeigte. Ein neuer Zählwert in der Seitenleiste braucht
|
||||
* keinen Neuaufbau der Seite. */
|
||||
export async function zaehlerAuffrischen(): Promise<void> {
|
||||
mediatheken = await bibliotheken();
|
||||
leisteBauen();
|
||||
export async function zaehlerAuffrischen(bekannt?: Bibliothek[]): Promise<void> {
|
||||
// **Denselben Stand zeigen, nicht denselben Takt haben.**
|
||||
//
|
||||
// Beide Anzeigen fragten getrennt nach — und zeigten damit zwei Momente:
|
||||
// in der Seitenleiste stand 95, in der Verwaltung 84. Während die
|
||||
// Metadaten laufen, legt der Server Doppelte zusammen, die Zahl fällt also
|
||||
// laufend. Wer hier eine Liste mitgibt, hat sie gerade selbst geholt; dann
|
||||
// wird sie benutzt statt eine zweite zu ziehen.
|
||||
const frisch = bekannt ?? await bibliotheken();
|
||||
|
||||
// **Nur die Zahlen, solange die Liste dieselbe ist.**
|
||||
//
|
||||
// `leisteBauen()` ersetzt die ganze Seitenleiste. Im Dreisekundentakt eines
|
||||
// laufenden Scans heisst das: sie verschwindet sichtbar und kommt wieder,
|
||||
// der Mauszeiger steht plötzlich über einem anderen Eintrag, und ein
|
||||
// gerade gezogener Eintrag wird mitten in der Bewegung weggerissen.
|
||||
const gleich = frisch.length === mediatheken.length
|
||||
&& frisch.every((b, i) => b.id === mediatheken[i]!.id && b.name === mediatheken[i]!.name);
|
||||
|
||||
mediatheken = frisch;
|
||||
|
||||
if (!gleich) { leisteBauen(); return; }
|
||||
|
||||
frisch.forEach(b => {
|
||||
const zeile = leiste.querySelector<HTMLElement>(`[data-ziel="#/m/${b.id}"] .zahl`);
|
||||
if (zeile) zeile.textContent = String(b.itemCount ?? '');
|
||||
});
|
||||
}
|
||||
|
||||
/* ---------- Kopfleiste ---------- */
|
||||
@@ -373,11 +397,14 @@ function zeichnen(): void {
|
||||
} else if (teile[0] === 'verwaltung' && istAdmin()) {
|
||||
// **Die Verwaltung auch nicht** — sie zeigt Laufendes. Ihr Takt hängt am
|
||||
// Signal und hört auf, sobald man weggeht.
|
||||
einhaengen(weg, inhalt, signal => verwaltung(() => {
|
||||
einhaengen(weg, inhalt, signal => verwaltung(bekannt => {
|
||||
// Gemerkte Ansichten wegwerfen: der Bestand hat sich geändert.
|
||||
// Die Seitenleiste bekommt neue Zahlen — die Seite selbst bleibt.
|
||||
vergessen();
|
||||
void zaehlerAuffrischen();
|
||||
// `bekannt` ist der Stand, den die Verwaltung gerade geholt hat. Ihn
|
||||
// weiterzureichen heisst: beide zeigen dieselbe Zahl, nicht nur
|
||||
// ähnliche.
|
||||
void zaehlerAuffrischen(bekannt);
|
||||
}, signal));
|
||||
} else {
|
||||
einhaengen(weg, inhalt, () => startseite(mediatheken, oeffnen, alleZeigen),
|
||||
|
||||
Reference in New Issue
Block a user