round22: Startseite kompakter, Ping-Zeitstempel-Bug behoben, echte Favicon-Deduplizierung per Bildinhalt, automatischer Favicon-Abgleich aus Icon-Datenbank + Nachruest-Button

This commit is contained in:
2026-07-23 20:58:58 +02:00
parent 6a66128172
commit b098007742
8 changed files with 181 additions and 49 deletions

View File

@@ -2,6 +2,7 @@ import type { FastifyInstance } from "fastify";
import { ServiceCreateSchema, ServiceReorderSchema, ServiceUpdateSchema } from "@launchpad/shared";
import * as deviceRepo from "../db/repositories/devices.js";
import * as serviceRepo from "../db/repositories/services.js";
import { findBestIconMatch } from "../scanner/iconDb.js";
interface ServiceListQuery {
deviceId?: string;
@@ -73,4 +74,24 @@ export async function serviceRoutes(app: FastifyInstance): Promise<void> {
}
return reply.code(204).send();
});
// Nachträgliches Ergänzen fehlender Favicons für bereits bestehende
// Dienste (z. B. von vor diesem Feature) - versucht für jeden Dienst OHNE
// Favicon einen passenden Treffer in der externen Icon-Datenbank zu
// finden (siehe scanner/iconDb.ts), anhand des aktuellen Anzeigenamens.
// Rein additiv: bestehende Favicons werden nie überschrieben, nur leere
// Felder aufgefüllt.
app.post("/api/services/backfill-favicons", async () => {
const services = serviceRepo.listServices();
let updated = 0;
for (const service of services) {
if (service.favicon) continue;
const match = await findBestIconMatch(service.displayName);
if (match) {
serviceRepo.updateService(service.id, { favicon: match });
updated++;
}
}
return { checked: services.length, updated };
});
}