From 228c318ad272560cdeb0afe14258f64d761105e1 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Sun, 4 Oct 2026 13:19:21 +0200 Subject: [PATCH] Die Medientabelle spricht durchgehend dieselbe Sprache MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Tonzeile nahm bereits die Formulierung vom Server, die Videozeile baute ihren Text weiter selbst — "240p (H264)" neben "AAC · Mono", zwei Schreibweisen in derselben Tabelle untereinander. Die gemessene Auflösung wandert in den Tooltip, wo sie hingehört: 1040 ist keine Stufe, sondern ein beschnittenes Bild. Dazu: ein Spurtitel, der nur die Sprache wiederholt, fällt weg. "Deutsch · AAC · Mono · ‚Deutsch'" sagt dasselbe zweimal. Co-Authored-By: Claude Opus 5 --- server/src/Flaro.Core/Media/Benennung.cs | 15 +++++++++++---- .../tests/Flaro.Core.Tests/BenennungTests.cs | 19 +++++++++++++++++++ web/app/src/views/detail.ts | 13 +++++++++++-- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/server/src/Flaro.Core/Media/Benennung.cs b/server/src/Flaro.Core/Media/Benennung.cs index ce3f8ba..fa0f8a0 100644 --- a/server/src/Flaro.Core/Media/Benennung.cs +++ b/server/src/Flaro.Core/Media/Benennung.cs @@ -108,10 +108,17 @@ public static class Benennung if (Codec(codec) is { } c) teile.Add(c); if (Kanaele(kanaele) is { } k) teile.Add(k); - // Der Titel aus der Datei nur, wenn er etwas hinzufügt — „SoundHandler" - // ist kein Name, sondern ein Rest aus dem Umpacken. - if (titel is { Length: > 0 } && !Nichtssagend.Contains(titel.Trim())) - teile.Add($"„{titel.Trim()}“"); + // **Der Titel nur, wenn er etwas hinzufügt.** „SoundHandler" ist kein + // Name, sondern ein Rest aus dem Umpacken. Und ein Titel, der bloss + // die Sprache wiederholt, ergibt „Deutsch · AAC · Mono · ‚Deutsch'". + var blank = titel?.Trim(); + if (blank is { Length: > 0 } + && !Nichtssagend.Contains(blank) + && !string.Equals(blank, Sprache(sprache), StringComparison.OrdinalIgnoreCase) + && !string.Equals(blank, sprache?.Trim(), StringComparison.OrdinalIgnoreCase)) + { + teile.Add($"„{blank}“"); + } return teile.Count > 0 ? string.Join(" · ", teile) : "Tonspur"; } diff --git a/server/tests/Flaro.Core.Tests/BenennungTests.cs b/server/tests/Flaro.Core.Tests/BenennungTests.cs index c336ad6..a18c44e 100644 --- a/server/tests/Flaro.Core.Tests/BenennungTests.cs +++ b/server/tests/Flaro.Core.Tests/BenennungTests.cs @@ -83,3 +83,22 @@ public class BenennungTests public void Die_ganze_Bildspur() => Assert.That(Benennung.Bildspur("h264", 1040), Is.EqualTo("1080p · H.264")); } + +/// Nachtrag: Titel, die nichts hinzufügen. +public class SpurtitelTests +{ + /// „Deutsch · AAC · Mono · ‚Deutsch'" sagt dasselbe zweimal. + [Test] + public void Ein_Titel_der_nur_die_Sprache_wiederholt_faellt_weg() + { + Assert.That(Benennung.Tonspur("deu", "aac", 1, "Deutsch"), + Is.EqualTo("Deutsch · AAC · Mono")); + Assert.That(Benennung.Tonspur("deu", "aac", 1, "deu"), + Is.EqualTo("Deutsch · AAC · Mono")); + } + + [Test] + public void Ein_Titel_der_etwas_sagt_bleibt() => + Assert.That(Benennung.Tonspur("deu", "aac", 1, "Audiodeskription"), + Is.EqualTo("Deutsch · AAC · Mono · „Audiodeskription“")); +} diff --git a/web/app/src/views/detail.ts b/web/app/src/views/detail.ts index e2a7bf4..2042960 100644 --- a/web/app/src/views/detail.ts +++ b/web/app/src/views/detail.ts @@ -260,16 +260,25 @@ export function detailseite(art: Art, id: string, zurueck: () => void): HTMLElem zeile('Datei', [datei.container?.toUpperCase(), groesse(datei.sizeBytes), dauer(datei.durationSeconds)].filter(Boolean).join(' · ')); - if (bild) zeile('Video', `${bild.height ? `${bild.height}p` : '—'} (${(bild.codec ?? '?').toUpperCase()})`); + // **Auch hier die Formulierung vom Server.** Vorher baute diese Zeile + // ihren Text selbst — „240p (H264)" statt „240p · H.264" —, und damit + // stand in derselben Tabelle zweierlei Schreibweise untereinander. + if (bild) { + const v = zeile('Video', spurname(bild)); + // Die gemessene Höhe gehört in den Tooltip: 1040 ist keine Stufe, + // sondern ein beschnittenes Bild. + if (bild.width && bild.height) v.title = `${bild.width} × ${bild.height}`; + } if (ton.length) zeile('Ton', ton.map(spurname).join(' · ')); if (text.length) zeile('Untertitel', text.map(spurname).join(' · ')); - function zeile(name: string, wert: string): void { + function zeile(name: string, wert: string): HTMLElement { const dt = document.createElement('dt'); dt.textContent = name; const dd = document.createElement('dd'); dd.textContent = wert; liste.append(dt, dd); + return dd; } return liste;