Jeder Titel war seine eigene Dublette, und das seit Monaten
„Metadaten auffrischen" hat an allem, was schon zugeordnet war, schlicht nichts getan. Die Dublettenprüfung schlägt jeden Titel nach, der eine TMDB-Kennung hat — beim Auffrischen also auch den gerade bearbeiteten. Ohne Vergleich auf Gleichheit fand sich jeder als "Dublette seiner selbst", wurde übersprungen und nie fortgeschrieben. Titel, Beschreibung und Bilder blieben für immer so, wie sie beim allerersten Lauf hereinkamen. In der Oberfläche sah das aus, als wirke die Spracheinstellung nicht — und genau so wurde es gemeldet. Gemessen, Ende zu Ende: Serversprache en-US: 101 Dalmatians · The Lion King Serversprache de-DE: 101 Dalmatiner · Der König der Löwen Damit das nie wieder unbemerkt bleibt, weiss der Server jetzt, in welcher Sprache er die Titel hat: eine Spalte MetadataLanguage, gesetzt beim Anreichern, und in der Verwaltung eine Zeile mit der Verteilung. Weicht etwas ab, frischt ein Knopf genau diese Titel auf — nicht den ganzen Bestand, und ohne das Dateisystem noch einmal abzulaufen. Dazu zwei Dinge, die ohne das nicht gingen: ein Titel lässt sich von Hand setzen und wird dabei festgeschrieben wie ein Plakat, mit einem Weg zurück. Und ein Titel, der auf Freigabe wartet, trägt jetzt dasselbe Dreipunktemenü wie eine Kachel — Bilder, Zuordnung, Titel. Ausgerechnet dort fehlte es, obwohl das der Eintrag ist, den man vor der Freigabe geradeziehen will. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
ce38da1376
commit
d2fbaad871
@@ -223,6 +223,97 @@ public class MetadataTests
|
||||
}
|
||||
|
||||
/// <summary>Was die Quelle nicht kennt, bleibt trotzdem in der Mediathek.</summary>
|
||||
/// <summary>„Metadaten auffrischen" muss den Titel wirklich fortschreiben.</summary>
|
||||
///
|
||||
/// <remarks>
|
||||
/// <b>Der teuerste Fehler der ganzen Sprachgeschichte.</b> Die
|
||||
/// Dublettenprüfung schlägt jeden Titel nach, der schon eine Kennung hat —
|
||||
/// beim Auffrischen also auch den gerade bearbeiteten. Ohne den Vergleich
|
||||
/// auf Gleichheit fand sich jeder zugeordnete Film als „Dublette seiner
|
||||
/// selbst" und wurde übersprungen: Titel, Beschreibung und Sprache blieben
|
||||
/// für immer so, wie sie beim ersten Lauf hereinkamen.
|
||||
///
|
||||
/// In der Oberfläche sah das aus, als wirke die Spracheinstellung nicht —
|
||||
/// und genau so wurde es gemeldet: „eine Sprachänderung und anschliessendes
|
||||
/// Neuholen bringt gar nichts".
|
||||
/// </remarks>
|
||||
[Test]
|
||||
public async Task Auffrischen_schreibt_einen_zugeordneten_Titel_fort()
|
||||
{
|
||||
Datei("101 Dalmatians (1996).mkv");
|
||||
var anbieter = new VorgegebenerAnbieter
|
||||
{
|
||||
Film = new MovieMetadata(8741, "101 Dalmatians", 1996, "Englisch.", null, null)
|
||||
{
|
||||
Language = "en-US",
|
||||
},
|
||||
};
|
||||
|
||||
using var server = MitAnbieter(anbieter);
|
||||
var (client, bibliothek) = await Einrichten(server, "Movies");
|
||||
await Scannen(client, bibliothek);
|
||||
|
||||
var vorher = await client.GetFromJsonAsync<Page<MovieResponse>>("/api/v1/movies");
|
||||
Assert.That(vorher!.Items[0].Title, Is.EqualTo("101 Dalmatians"));
|
||||
|
||||
// Dieselbe Kennung, andere Sprache — genau der Fall nach einer Umstellung.
|
||||
anbieter.Film = new MovieMetadata(8741, "101 Dalmatiner", 1996, "Deutsch.", null, null)
|
||||
{
|
||||
Language = "de-DE",
|
||||
};
|
||||
|
||||
(await client.PostAsync($"/api/v1/libraries/{bibliothek}/refresh", null))
|
||||
.EnsureSuccessStatusCode();
|
||||
for (var i = 0; i < 100; i++)
|
||||
{
|
||||
var stand = await client.GetFromJsonAsync<ScanStatus>($"/api/v1/libraries/{bibliothek}/scan");
|
||||
if (stand!.State == "finished") break;
|
||||
await Task.Delay(50);
|
||||
}
|
||||
|
||||
var nachher = await client.GetFromJsonAsync<Page<MovieResponse>>("/api/v1/movies");
|
||||
Assert.That(nachher!.Total, Is.EqualTo(1), "Es bleibt ein Film, keine Dublette.");
|
||||
Assert.That(nachher.Items[0].Title, Is.EqualTo("101 Dalmatiner"));
|
||||
Assert.That(nachher.Items[0].Overview, Is.EqualTo("Deutsch."));
|
||||
}
|
||||
|
||||
/// <summary>Was von Hand benannt wurde, überlebt das Auffrischen.</summary>
|
||||
[Test]
|
||||
public async Task Ein_festgeschriebener_Titel_bleibt_beim_Auffrischen_stehen()
|
||||
{
|
||||
Datei("Irgendwas (2001).mkv");
|
||||
var anbieter = new VorgegebenerAnbieter
|
||||
{
|
||||
Film = new MovieMetadata(42, "Automatisch", 2001, null, null, null) { Language = "de-DE" },
|
||||
};
|
||||
|
||||
using var server = MitAnbieter(anbieter);
|
||||
var (client, bibliothek) = await Einrichten(server, "Movies");
|
||||
await Scannen(client, bibliothek);
|
||||
|
||||
var filme = await client.GetFromJsonAsync<Page<MovieResponse>>("/api/v1/movies");
|
||||
var kennung = filme!.Items[0].Id;
|
||||
|
||||
(await client.PutAsJsonAsync($"/api/v1/movies/{kennung}/title", new { title = "Von Hand" }))
|
||||
.EnsureSuccessStatusCode();
|
||||
|
||||
anbieter.Film = new MovieMetadata(42, "Automatisch, neu", 2001, null, null, null)
|
||||
{
|
||||
Language = "de-DE",
|
||||
};
|
||||
(await client.PostAsync($"/api/v1/libraries/{bibliothek}/refresh", null))
|
||||
.EnsureSuccessStatusCode();
|
||||
for (var i = 0; i < 100; i++)
|
||||
{
|
||||
var stand = await client.GetFromJsonAsync<ScanStatus>($"/api/v1/libraries/{bibliothek}/scan");
|
||||
if (stand!.State == "finished") break;
|
||||
await Task.Delay(50);
|
||||
}
|
||||
|
||||
var nachher = await client.GetFromJsonAsync<Page<MovieResponse>>("/api/v1/movies");
|
||||
Assert.That(nachher!.Items[0].Title, Is.EqualTo("Von Hand"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Ein_Film_ohne_Treffer_behaelt_seinen_Dateinamen()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user