Einen einzelnen Titel neu holen, statt achthundert
Eine neue Quelle wirkt erst beim nächsten Holen der Metadaten. Das ging bisher nur je Mediathek: achthundert Titel, eine Viertelstunde — nur um an einem Film zu sehen, ob ein Schlüssel etwas bringt. Wer auf einer Detailseite bemerkt, dass IMDb und Rotten Tomatoes fehlen, hatte von dort keinen Weg dorthin. Der Server kann eine Auswahl längst; es fehlte bloss die Kennung der Mediathek in der Antwort, damit die Seite weiss, wohin ihr Titel gehört. Der runde Knopf holt diesen einen Titel, wartet den Lauf ab und zeichnet die Seite neu. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
18db89399d
commit
e05bbfc2cd
@@ -2,7 +2,7 @@ import { ApiFehler,
|
||||
film as filmLaden, serie as serieLaden, folgen,
|
||||
vorschlaege, zuordnen, bildAdresse, istAdmin, gesehen, favorit, weglegen,
|
||||
type Film, type Serie, type Folge, type Datei, type Stand,
|
||||
type Mitwirkender, type Spur, aehnliche,
|
||||
type Mitwirkender, type Spur, aehnliche, metadatenAuffrischen, scanstand,
|
||||
} from '../api';
|
||||
import {
|
||||
esc, dauer, groesse, knopf, feld, fehlerzeile, leer, anteil, meldung, hinweisZeigen,
|
||||
@@ -61,6 +61,26 @@ function rang(quelle: string): number {
|
||||
return stelle < 0 ? QUELLENFOLGE.length : stelle;
|
||||
}
|
||||
|
||||
/** Wartet, bis der angestossene Lauf durch ist.
|
||||
*
|
||||
* **Ein einzelner Titel dauert Sekunden.** Ein Fortschrittsbalken dafür
|
||||
* wäre mehr Gerät als Nutzen; es reicht, die Seite danach neu zu zeichnen.
|
||||
*
|
||||
* **Nach einer Minute wird nicht weiter gewartet.** So lange kann es nur
|
||||
* dauern, wenn etwas anderes läuft — ein ganzer Scan etwa. Dann ist weiter
|
||||
* zu warten sinnloser, als zu zeigen, was gerade dasteht. */
|
||||
async function laufAbwarten(mediathek: string): Promise<void> {
|
||||
for (let i = 0; i < 60; i++) {
|
||||
await new Promise(fertig => window.setTimeout(fertig, 1000));
|
||||
try {
|
||||
if ((await scanstand(mediathek)).state !== 'running') return;
|
||||
} catch {
|
||||
// Antwortet der Stand nicht, ist Weiterwarten geraten statt gewusst.
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function detailseite(art: Art, id: string, zurueck: () => void): HTMLElement {
|
||||
const wurzel = document.createElement('div');
|
||||
wurzel.className = 'detail';
|
||||
@@ -417,6 +437,24 @@ export function detailseite(art: Art, id: string, zurueck: () => void): HTMLElem
|
||||
async () => { await weglegen(eintrag.id); await laden(); }));
|
||||
}
|
||||
|
||||
// **Diesen einen Titel neu holen, nicht den ganzen Bestand.**
|
||||
//
|
||||
// Eine neue Quelle — fanart.tv, OMDb — wirkt erst beim nächsten Holen.
|
||||
// Bisher ging das nur je Mediathek: achthundert Titel, eine
|
||||
// Viertelstunde, nur um an einem Film zu sehen, ob ein Schlüssel etwas
|
||||
// bringt. Der Server kann längst eine Auswahl; es fehlte bloss der Weg
|
||||
// dorthin von der Seite, auf der man das Fehlen bemerkt.
|
||||
if (istAdmin() && eintrag.libraryId) {
|
||||
const mediathek = eintrag.libraryId;
|
||||
reihe.appendChild(rundKnopf('auffrischen', false, 'Metadaten neu holen',
|
||||
async () => {
|
||||
await metadatenAuffrischen(mediathek, [eintrag.id]);
|
||||
hinweisZeigen('Metadaten werden neu geholt …');
|
||||
await laufAbwarten(mediathek);
|
||||
await laden();
|
||||
}));
|
||||
}
|
||||
|
||||
// **Nicht über `rundKnopf`.** Der schaltet sich beim Klick ab und erst im
|
||||
// Fehlerfall wieder an — richtig für etwas, das danach die Seite neu lädt.
|
||||
// Ein Dialog kehrt sofort zurück; der Knopf bliebe für den Rest der Seite
|
||||
|
||||
Reference in New Issue
Block a user