round31: Infrastruktur-Praefixe (lxc/vm/docker) aus Namen und Suche entfernt, Icon-Datenbank-Abgleich auch ohne erkannte Software, Sichtbarkeit bei eindeutigem Icon-Treffer

This commit is contained in:
2026-07-24 15:30:03 +02:00
parent 87fed21348
commit e4cc6987be
3 changed files with 51 additions and 6 deletions

View File

@@ -172,6 +172,26 @@ export async function findBestIconMatch(name: string): Promise<string | null> {
if (match) return `${CDN_BASE}/${match}.png`;
}
// Letzter, bewusst noch immer präziser Versuch: ein Name wie "adguard"
// trifft "adguard-home" nicht exakt (auch nicht nach Bindestrich-Vergleich),
// ist aber ein eindeutiger Wortanfang-Treffer, wenn KEIN anderer Icon-Name
// mit "<wort>-" beginnt. Nur dann automatisch übernehmen - bei mehreren
// möglichen Treffern bleibt es bei "kein Favicon" (dafür gibt es die
// interaktive Auswahl mit mehreren Kandidaten).
for (const candidate of [wholeName, ...byPriority(words)]) {
if (candidate.length < 3) continue;
const prefixMatches = names.filter((n) => n === candidate || n.startsWith(`${candidate}-`));
if (prefixMatches.length === 1) return `${CDN_BASE}/${prefixMatches[0]}.png`;
if (prefixMatches.length > 1) {
// Mehrere Treffer (z. B. "adguard-home" UND "adguard-home-sync" für
// "adguard") - den kürzesten (meist der "Haupt"-Name der Software)
// automatisch nehmen, aber NUR wenn er eindeutig der kürzeste ist,
// sonst bleibt es zweideutig (dafür gibt es die interaktive Auswahl).
const sorted = [...prefixMatches].sort((a, b) => a.length - b.length);
if (sorted[0].length < sorted[1].length) return `${CDN_BASE}/${sorted[0]}.png`;
}
}
return null;
}