Ein Klick, der nichts tat, und niemand sagte warum
Eine Serienkachel kannte der Server als Titel nicht: „als gesehen markieren" lief in eine 404, und weil das Kontextmenü die Ablehnung verschluckte, geschah sichtbar gar nichts. Dasselbe beim Favoriten. UserItemState bekommt eine Serienkennung, das Häkchen zieht alle Folgen mit, und was wirft, erscheint als Meldung statt in der Browserkonsole. Dazu eine Mehrfachauswahl in der Mediathek — gesehen, ungesehen, Metadaten neu holen für das Gewählte, in einer Anfrage statt in zweihundert. Ein neues Plakat steht sofort auf der Kachel, und ein Titel, den es nicht mehr gibt, endet nicht mehr in einer Sackgasse. Gemessen: ein POST auf /refresh ohne Rumpf antwortete nach der Erweiterung mit 404 — also genau der Aufruf „alles auffrischen", den es länger gibt als die Auswahl. Der Rumpf wird jetzt von Hand gelesen, und beide Formen stehen in einer Prüfung. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c854c4a09a
commit
557708b769
+21
-3
@@ -18,7 +18,21 @@ const ARTEN: { art: Bildart; titel: string; verhaeltnis: string }[] = [
|
||||
* **Die Kandidaten kosten nichts.** TMDB liefert sie beim Einzelabruf ohnehin
|
||||
* mit; bisher wurde alles ausser dem Schriftzug weggeworfen.
|
||||
*/
|
||||
export function bilddialog(art: 'movies' | 'series', id: string, titel: string): void {
|
||||
/** Bilder eines Titels austauschen.
|
||||
*
|
||||
* **`fertig` wird gerufen, wenn sich wirklich etwas geändert hat** — und erst
|
||||
* beim Schliessen, nicht nach jeder einzelnen Wahl. Wer drei Bilder tauscht,
|
||||
* löst nicht dreimal einen Neuaufbau der Kachel aus. Wer nur hineinschaut und
|
||||
* wieder zumacht, gar keinen.
|
||||
*
|
||||
* **Warum es den Rückruf überhaupt gibt.** Ohne ihn zeigte die Kachel das
|
||||
* alte Plakat weiter, bis man die ganze Oberfläche neu lud — und verlor dabei
|
||||
* Bildlauf, Filter und offene Reiter.
|
||||
*/
|
||||
export function bilddialog(
|
||||
art: 'movies' | 'series', id: string, titel: string, fertig?: () => void,
|
||||
): void {
|
||||
let geaendert = false;
|
||||
const d = document.createElement('dialog');
|
||||
d.className = 'dlg dlg-breit';
|
||||
|
||||
@@ -38,7 +52,7 @@ export function bilddialog(art: 'movies' | 'series', id: string, titel: string):
|
||||
koerper.innerHTML = '<div class="spinner"></div>';
|
||||
|
||||
d.append(kopf, koerper);
|
||||
d.addEventListener('close', () => d.remove());
|
||||
d.addEventListener('close', () => { d.remove(); if (geaendert) fertig?.(); });
|
||||
d.addEventListener('click', e => { if (e.target === d) d.close(); });
|
||||
document.body.appendChild(d);
|
||||
d.showModal();
|
||||
@@ -189,7 +203,11 @@ export function bilddialog(art: 'movies' | 'series', id: string, titel: string):
|
||||
|
||||
b.onclick = async () => {
|
||||
b.disabled = true;
|
||||
try { await bildSetzen(art, id, bildart, kandidat!.url); await laden(); }
|
||||
try {
|
||||
await bildSetzen(art, id, bildart, kandidat!.url);
|
||||
geaendert = true;
|
||||
await laden();
|
||||
}
|
||||
catch (fehler) {
|
||||
b.after(fehlerzeile(meldung(fehler)));
|
||||
b.disabled = false;
|
||||
|
||||
Reference in New Issue
Block a user