Hanni und Nanni ist nicht Hanni und Nanni 3

Deine drei Fälle haben eines gemeinsam, und es ist nicht das, was ich zuerst
vermutet hatte: keiner der Dateinamen nennt ein Jahr. Der Riegel von gestern
greift deshalb nicht.

Gemessen, woran es wirklich liegt. Bei TMDB heisst der Film „Hanni & Nanni",
auf der Platte „Hanni und Nanni". Das Kaufmanns-Und fällt im Vergleichs-
schlüssel als Sonderzeichen heraus, das Wort „und" bleibt stehen — die
Namensgleichheit griff also nie. Gewählt wurde stattdessen der erstbeste
Treffer, und das war „Hanni & Nanni 3". Der richtige stand auf Platz zwei,
und alle vier Treffer hatten dieselbe Beliebtheit: die Reihenfolge war
Zufall.

Bindewörter zwischen zwei Namen zählen jetzt nicht mehr mit — gestrichen,
nicht übersetzt, sonst bliebe „Batman and Robin" aussen vor. Am Wortanfang
bleiben sie stehen: „Und dann kam Polly" ist kein „dann kam Polly". Und die
Suche vergleicht über den Schlüssel statt Zeichen für Zeichen.

Das verhindert aber nur Neues. Was schon zusammengelegt ist, bleibt es —
deshalb gibt es jetzt „Eigener Film": eine Datei löst sich aus ihrem Titel
und wird ein eigener Eintrag, mit dem Titel aus dem Dateinamen und ohne
Kennung. Eine zu raten hiesse, denselben Fehler zu wiederholen; so steht sie
unter „Ohne Zuordnung" und ist in zwei Klicks richtig.

Der Super-Mario-Fall liegt anders: beide Titel treffen heute richtig. Der
steckt noch aus einem früheren Lauf fest und braucht das Trennen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-06 13:40:21 +02:00
co-authored by Claude Opus 5
parent c3124ba27c
commit 58e06d0539
10 changed files with 328 additions and 21 deletions
+15 -4
View File
@@ -4,6 +4,8 @@ using System.Text.Json.Serialization;
using Flaro.Core.Metadata;
using Microsoft.Extensions.Logging;
using Flaro.Core.Library;
namespace Flaro.Metadata;
/// <summary>Fragt TMDB nach Titeln, Beschreibungen und Bildern.</summary>
@@ -289,10 +291,19 @@ public sealed class TmdbClient(
// Steht ein Treffer mit genau diesem Namen in der Liste, ist er
// gemeint.
//
// Nur bei Gleichheit, nicht bei Ähnlichkeit: eine eigene Bewertung zu
// bauen hiesse, TMDBs Rangfolge nachzubauen — mit weniger Daten.
var genau = treffer.FirstOrDefault(e =>
string.Equals(titelVon(e)?.Trim(), titel.Trim(), StringComparison.OrdinalIgnoreCase));
// **Verglichen wird über den Titelschlüssel, nicht Zeichen für
// Zeichen.** Auf der Platte heisst der Film „Hanni und Nanni", bei
// TMDB „Hanni & Nanni" — zeichengenau passt das nie. Gewählt wurde
// deshalb der erstbeste Treffer, und das war „Hanni & Nanni 3".
// Gemessen: der richtige Film stand auf Platz zwei, und alle vier
// Treffer hatten dieselbe Beliebtheit. Die Reihenfolge war also
// Zufall, und auf Zufall soll sich hier nichts verlassen.
//
// Weiterhin nur bei Gleichheit des Schlüssels, nicht bei Ähnlichkeit:
// eine eigene Bewertung zu bauen hiesse, TMDBs Rangfolge nachzubauen
// — mit weniger Daten.
var gesucht = Titelschluessel.Von(titel);
var genau = treffer.FirstOrDefault(e => Titelschluessel.Von(titelVon(e)) == gesucht);
return genau ?? treffer[0];
}