generated from Dicken/dickendock
round23: Startseite kompakter, Theme-Button entfernt, echte Bildverifikation fuer Favicon-Auswahl, Tooltip-Portal, wortbasierte interaktive Favicon-Vorschlaege
This commit is contained in:
@@ -2,7 +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";
|
||||
import { suggestIconsForServiceName } from "../scanner/iconDb.js";
|
||||
|
||||
interface ServiceListQuery {
|
||||
deviceId?: string;
|
||||
@@ -75,23 +75,19 @@ 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;
|
||||
// Liefert für jeden Dienst OHNE Favicon eine Liste möglicher Treffer aus
|
||||
// der externen Icon-Datenbank (siehe scanner/iconDb.ts), damit der Nutzer
|
||||
// selbst auswählen kann statt dass automatisch geraten wird (mehrdeutige
|
||||
// Namen wie "LXC Adguard" könnten sonst falsch zugeordnet werden).
|
||||
app.get("/api/services/favicon-suggestions", async () => {
|
||||
const services = serviceRepo.listServices().filter((s) => !s.favicon);
|
||||
const suggestions = [];
|
||||
for (const service of services) {
|
||||
if (service.favicon) continue;
|
||||
const match = await findBestIconMatch(service.displayName);
|
||||
if (match) {
|
||||
serviceRepo.updateService(service.id, { favicon: match });
|
||||
updated++;
|
||||
const candidates = await suggestIconsForServiceName(service.displayName);
|
||||
if (candidates.length > 0) {
|
||||
suggestions.push({ serviceId: service.id, serviceName: service.displayName, candidates });
|
||||
}
|
||||
}
|
||||
return { checked: services.length, updated };
|
||||
return { checked: services.length, suggestions };
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user