Sprache der Tonspur als eigenes Feld in der Filmliste - #1174
Open
CuriousApe2020 wants to merge 1 commit into
Open
CuriousApe2020 wants to merge 1 commit into
CuriousApe2020 wants to merge 1 commit into
Conversation
Die Sprache einer Tonspur liegt beim Crawlen teilweise vor, geht beim
Erzeugen des Filmliste-Eintrags aber verloren: kodiert wird nur der
deutsche Titelzusatz "(Originalversion)", der die Sprache nicht nennt.
Clients koennen sie danach nicht mehr rekonstruieren.
Neu ist Film.audioLanguage (ISO 639-2/T, null wenn unbekannt).
Woher die Sprache kommt:
* Die ARD liefert je Tonspur einen Sprachcode in audio[0].languageCode.
Die Streamauswahl probiert davon allerdings nur die fest verdrahteten
Codes "deu", "eng" und "fra" durch; alles andere faellt in den
Platzhalter "*".
* Fuer "eng" und "fra" steht der Code damit ohnehin fest.
* Fuer den Platzhalterzweig wird er mit parseAudioLanguageCode aus den
Daten gelesen statt aus dem zutreffenden Filter abgeleitet. Damit
behaelt auch eine Originalversion in einer anderen Sprache - spanisch,
polnisch, tuerkisch - ihre Sprache, ohne dass dafuer je Sprache eine
weitere Konstante noetig waere.
* normalizeLanguageCode sichert die zugesagte Form: eine etwaige
Regionsangabe wird abgeschnitten ("spa-ES" wird zu "spa"), alles was
danach kein dreistelliger Buchstabencode ist - ARDs Platzhalter "ov",
Leerwerte - ergibt nichts. Lieber kein Wert als einer, auf den sich
Clients nicht verlassen koennen.
* Nur die Originalfassung traegt die Sprache. Die Hauptfassung bleibt
leer: sie ist die uebliche Fassung des Senders, und ein Wert auf jedem
Datensatz wuerde die Filmliste unnoetig aufblaehen.
Film.merge uebernimmt eine bekannte Sprache, wenn der eigene Stand keine
hat. Sonst ginge sie verloren, sobald eine aeltere importierte Filmliste
ohne das Feld mit einem frischen Crawl zusammengefuehrt wird.
Serialisierung:
* Neues Format: Gson serialisiert den Objektgraphen per Reflection, das
Feld erscheint automatisch als benannter Schluessel; FilmlistReader
liest es symmetrisch wieder ein.
* Altes Format: hinten angefuegte Spalte "Sprache" als einfacher String.
Bewusst kein Array - der Desktop-Client prueft beim Weiterlesen mit
isExpectedStartArrayToken(), ob der naechste Token ein Datensatz ist;
ein angehaengtes Array wuerde dort als Filmdatensatz interpretiert.
Rueckwaertskompatibilitaet:
* MediathekView Desktop 14.0.0 bis 14.5.0 liest je Datensatz genau 20
Felder und sucht danach den naechsten START_ARRAY. Ein angehaengtes
Feld faellt durch diese Pruefung und wird uebersprungen - keine
Exception, kein Versatz. Die Spaltenkopfzeile wertet der Client gar
nicht aus (skipFieldDescriptions).
* MediathekViewWeb destrukturiert positionsbasiert bis Index 16 und
ignoriert weitere Felder.
* FilmlistOldFormatReader liest die neue Spalte optional: Filmlisten
aelterer Staende ohne die Spalte werden weiterhin gelesen.
Ausserdem: FilmlistOldFormatWriterTest las die vom Writer als UTF-8
geschriebene Datei mit StandardCharsets.UTF_16 ein. Das lief nur durch,
solange die Dateilaenge zufaellig gerade war; durch die zusaetzliche
Spalte wurde sie ungerade und readString warf eine
MalformedInputException. Korrigiert auf UTF-8, passend zum Writer.
Tests: Round-Trip durch beide Formate, eine Filmliste ohne die neue
Spalte, eine spanische Originalversion, ein Code mit Regionsangabe, die
Gegenprobe mit ARDs Platzhalter "ov", das Verhalten von merge, sowie ein
Beitrag mit deutscher und englischer Tonspur - dort darf die Hauptfassung
die Sprache der Originalversion nicht erben.
This was referenced Sep 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Die Sprache einer Tonspur liegt beim Crawlen teilweise vor, geht beim Erzeugen des Filmliste-Eintrags aber verloren: kodiert wird nur der deutsche Titelzusatz "(Originalversion)", der die Sprache nicht nennt. Clients können sie danach nicht mehr rekonstruieren.
Neu ist Film.audioLanguage (ISO 639-2/T, null wenn unbekannt).
Woher die Sprache kommt:
Film.merge übernimmt eine bekannte Sprache, wenn der eigene Stand keine hat. Sonst ginge sie verloren, sobald eine ältere importierte Filmliste ohne das Feld mit einem frischen Crawl zusammengeführt wird.
Serialisierung:
Rückwärtskompatibilität:
Außerdem: FilmlistOldFormatWriterTest las die vom Writer als UTF-8 geschriebene Datei mit StandardCharsets.UTF_16 ein. Das lief nur durch, solange die Dateilänge zufällig gerade war; durch die zusätzliche Spalte wurde sie ungerade und readString warf eine MalformedInputException. Korrigiert auf UTF-8, passend zum Writer.
Tests: Round-Trip durch beide Formate, eine Filmliste ohne die neue Spalte, eine spanische Originalversion, ein Code mit Regionsangabe, die Gegenprobe mit ARDs Platzhalter "ov", das Verhalten von merge, sowie ein Beitrag mit deutscher und englischer Tonspur - dort darf die Hauptfassung die Sprache der Originalversion nicht erben.