diff --git a/tools/app-symbole-einbinden.mjs b/tools/app-symbole-einbinden.mjs index c64334c1..a574ce1f 100644 --- a/tools/app-symbole-einbinden.mjs +++ b/tools/app-symbole-einbinden.mjs @@ -23,7 +23,7 @@ Aufrufen mit: node tools/app-symbole-einbinden.mjs =================================================================== */ -import { readFileSync, writeFileSync, existsSync, readdirSync, mkdirSync, copyFileSync } from "node:fs"; +import { readFileSync, writeFileSync, existsSync, readdirSync, mkdirSync, copyFileSync, unlinkSync } from "node:fs"; import { join, dirname } from "node:path"; import { fileURLToPath } from "node:url"; import { APPS, FARBEN, STIL_JE_APP, STILE } from "./app-symbole.mjs"; @@ -233,19 +233,68 @@ for (const rel of htmlSeiten()) { /* --------------------------------------------------------------------- 3. Die zwei Apps in eigenen Ordnern ------------------------------------------------------------------ */ +/* Je Projekt: welcher Dateiname DORT benutzt wird -> welche Groesse von + uns dorthin gehoert. Die Namen stammen aus dem jeweiligen Manifest, + nicht aus einer Vermutung. */ const AUSWAERTS = [ - { name: "Dogi's ZockerAnstalt", schluessel: "zocker", - ziel: "C:/Users/qciga/Documents/Obelix/Spielehalle/public/icons" }, - { name: "DogFather Analyse", schluessel: "analyse", - ziel: "C:/Users/qciga/Documents/Obelix/Analyse/logos" }, + { + name: "Dogi's ZockerAnstalt", schluessel: "zocker", + ziel: "C:/Users/qciga/Documents/Obelix/Spielehalle/public/icons", + namen: { + "icon-192.png": "192", + "icon-512.png": "512", + "icon-maskable-192.png": "192-maskable", + "icon-maskable-512.png": "512-maskable", + "apple-touch-icon.png": "180", + }, + }, + { + name: "DogFather Analyse", schluessel: "analyse", + ziel: "C:/Users/qciga/Documents/Obelix/Analyse/logos", + namen: { + "pwa-icon-192.png": "192", + "pwa-icon-512.png": "512", + "pwa-icon-maskable-512.png": "512-maskable", + "pwa-apple-touch-icon.png": "180", + "pwa-favicon-32.png": "32", + }, + }, ]; -for (const { name, schluessel, ziel } of AUSWAERTS) { +/* DIE VORHANDENEN NAMEN ÜBERSCHREIBEN, keine neuen danebenlegen. + + Der erste Entwurf legte die Symbole unter eigenen Namen ab + (`dogfather-zocker-192.png`). Das Ergebnis: Die Dateien lagen da, das + Manifest der ZockerAnstalt zeigte weiter auf `icon-192.png` -- und + das neue Symbol wäre nie irgendwo angekommen. Aufgefallen erst beim + Nachsehen, nicht beim Kopieren; der Kopiervorgang meldete brav + "6 Symbole kopiert". + + Jetzt werden die Namen überschrieben, die dort schon benutzt werden. + Damit greifen Manifest, HTML und alles andere ohne eine einzige + weitere Änderung -- und es gibt keine zweite Stelle, an der jemand + einen Verweis übersehen kann. + + Fehlt ein erwarteter Name, wird das gemeldet statt still übergangen: + Ein Symbol, das niemand einbindet, ist kein erledigter Auftrag. */ +for (const { name, schluessel, ziel, namen } of AUSWAERTS) { if (!existsSync(ziel)) { berichte.push(` ? ${name}: ${ziel} gibt es nicht`); continue; } - for (const g of ["192", "512", "192-maskable", "512-maskable", "180", "32"]) { - copyFileSync(join(SYM, `${schluessel}-${g}.png`), join(ziel, `dogfather-${schluessel}-${g}.png`)); + let ersetzt = 0; + const fehlend = []; + for (const [dort, meins] of Object.entries(namen)) { + const quelle = join(SYM, `${schluessel}-${meins}.png`); + const zielDatei = join(ziel, dort); + if (!existsSync(zielDatei)) { fehlend.push(dort); continue; } + copyFileSync(quelle, zielDatei); + ersetzt++; } - berichte.push(` ✓ ${name}: 6 Symbole nach ${ziel.split("/").slice(-3).join("/")} kopiert`); + /* Die alten Dateien mit eigenem Namen aus dem ersten Entwurf wegräumen. */ + for (const g of ["192", "512", "192-maskable", "512-maskable", "180", "32"]) { + const alt = join(ziel, `dogfather-${schluessel}-${g}.png`); + if (existsSync(alt)) { try { unlinkSync(alt); } catch { /* egal */ } } + } + berichte.push(` ${fehlend.length ? "!" : "✓"} ${name}: ${ersetzt} Symbole ersetzt` + + (fehlend.length ? ` — NICHT GEFUNDEN: ${fehlend.join(", ")}` : "")); } /* ---------------------------------------------------------------------