Errungenschaften: Abzeichen fuer erreichte Meilensteine
CI / pruefen (pull_request) Canceled after 0s
CI / pruefen (pull_request) Canceled after 0s
Zwanzig feste Abzeichen plus dynamische fuer vollstaendig gesehene Filmreihen und abgeschlossene Universen. Sie tauchen auf, wenn etwas erreicht ist, und bleiben — auch wenn die Bedingung spaeter wegfaellt. Eine zurueckgenommene Sichtung soll kein Abzeichen kosten. Alle Regeln arbeiten auf *einem* Datensatz, der einmal geholt wird. Sonst stellte jede Regel ihre eigene Abfrage, und aus zwanzig Abzeichen wuerden zwanzig Abfragen bei jedem Abhaken. Ausgewertet wird nach Sichtungsaktionen und einmal taeglich; der erste Lauf eines Kontos ist stumm, weil eine gewachsene Bibliothek sonst zwei Dutzend Meldungen auf einmal ausloest. Fuer Filmreihen braucht es keine gepflegte Liste: TMDB gruppiert sie selbst, und tmdbCollectionId liegt beim Import schon am Titel. Eigennamen wie "Spider Bro" kommen aus einer kleinen Datendatei obendrauf; fehlt ein Eintrag, greift der generische Name. Die kuratierten Eintraege tragen jeweils ein Stueck des erwarteten TMDB-Namens. Ich habe die Collection-Kennungen aus dem Gedaechtnis geschrieben und kann sie hier nicht gegen TMDB pruefen — passt der Name nicht, wird der Eintrag ignoriert und der generische greift. Eine falsch abgeschriebene Kennung bleibt damit folgenlos statt jemandem das falsche Abzeichen zu geben. Die Uhrzeit-Regel liest die Stunde ueber formatToParts statt ueber die formatierte Zeichenkette: auf Deutsch liefert Intl fuer eine einzelne Stunde "03 Uhr", und daraus wird beim Umwandeln NaN. Ein Test hat das aufgedeckt. Beim ersten Oeffnen der Uebersicht wird einmal ausgewertet — sonst bliebe sie bei einem Bestandskonto leer, bis nachts der Hintergrundlauf kommt. Zehn Tests, Anleitung mit Screenshot. Symbole als eigene SVG auf einem gemeinsamen Raster; erreicht und offen unterscheiden sich nicht nur durch Farbe, sondern auch im Text. Refs #15
This commit is contained in:
@@ -43,6 +43,11 @@ async function ausschnitt(page, name, ueberschrift) {
|
||||
}
|
||||
await page.waitForTimeout(400);
|
||||
|
||||
// Die Kopfleiste klebt oben und legt sich sonst über die Überschrift des
|
||||
// Ausschnitts. Fürs Bild kurz aufheben.
|
||||
await page.addStyleTag({ content: "header { position: static !important; }" }).catch(() => {});
|
||||
await page.waitForTimeout(200);
|
||||
|
||||
const bereich = page.locator("section", { hasText: ueberschrift }).first();
|
||||
await bereich.screenshot({ path: `${OUT}/${name}.png` });
|
||||
console.log(" ", name);
|
||||
@@ -199,6 +204,16 @@ async function shot(page, name, url, opts = {}) {
|
||||
await jellyfin.close();
|
||||
}
|
||||
|
||||
// --- Errungenschaften ---
|
||||
{
|
||||
const { ctx, page } = await session(1400, 1200, "dark");
|
||||
await login(page);
|
||||
await page.goto(`${BASE}/statistik`, { waitUntil: "networkidle" });
|
||||
await page.waitForTimeout(900);
|
||||
await ausschnitt(page, "23-errungenschaften", "Errungenschaften");
|
||||
await ctx.close();
|
||||
}
|
||||
|
||||
// --- Hell ---
|
||||
{
|
||||
const { ctx, page } = await session(1400, 900, "light");
|
||||
|
||||
Reference in New Issue
Block a user