Untertitel kamen an, der Ton nicht — sie sahen woanders nach

Die Vorwahl auf der Filmseite legt beides unter der Kennung des Films ab.
Beim Untertitel habe ich das beim Lesen berücksichtigt, beim Ton nicht:
dort stand `item.seriesID`, und die ist bei einem Film nichts. Die
Einstellung wurde gespeichert und nie wieder gelesen.

Jetzt gibt es eine Stelle, die sagt, wo die Vorwahl eines Titels liegt:
bei einer Folge die Serie, bei einem Film er selbst. Beides ist dieselbe
Frage auf der Ebene, die der Benutzer vor sich hatte, als er sie
beantwortet hat.

Dasselbe betraf das Merken einer von Hand gewählten Spur und die Anzeige
im Spurenblatt: bei einem Film merkte sich der Spieler nichts, weil die
Kennung fehlte. Jetzt lesen alle vier Stellen dieselbe.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-11 13:58:44 +02:00
co-authored by Claude Opus 5
parent 94458ef41c
commit c05004f586
+24 -12
View File
@@ -2127,7 +2127,7 @@ final class PlayerModel {
// alles andere auch einzuschalten. Bei einer Folge gilt die Serie,
// bei einem Film der Titel selbst.
guard selectedSubtitleTrack == nil,
let wunsch = languages.subtitleWish(titleID: item?.seriesID ?? item?.id),
let wunsch = languages.subtitleWish(titleID: titelbereich),
let treffer = subtitleTracks.first(where: {
LanguageCode.matches(wunsch, $0.languageCode)
})
@@ -2147,6 +2147,14 @@ final class PlayerModel {
/// Netz und ohne Einstellungen, damit sich der ZDF-Fall wörtlich
/// hinschreiben und durchspielen lässt. Hier steht nur, woher der Wunsch
/// kommt.
/// Unter welcher Kennung die Vorwahl dieses Titels liegt.
///
/// **Bei einer Folge die Serie, bei einem Film er selbst.** „Diese Serie
/// auf Japanisch" gilt für alle Folgen; „dieser Film auf Englisch" gilt
/// für ihn. Beides ist dieselbe Frage auf der Ebene, die der Benutzer
/// vor sich hatte, als er sie beantwortet hat.
private var titelbereich: String? { item?.seriesID ?? item?.id }
private func chooseAudioStream(
in part: MediaFile,
of item: MediaItem,
@@ -2156,10 +2164,9 @@ final class PlayerModel {
subtitleStreams = part.subtitleStreams
// Untertitel sind eine Zutat, keine Voraussetzung: der Wunsch gilt,
// wenn es einen passenden gibt, und sonst bleibt es ohne.
selectedSubtitleStream = languages.subtitleLanguage.isEmpty ? nil
: subtitleStreams.first {
LanguageCode.matches(languages.subtitleLanguage, $0.languageCode)
}
selectedSubtitleStream = languages.subtitleWish(titleID: titelbereich).flatMap { wunsch in
subtitleStreams.first { LanguageCode.matches(wunsch, $0.languageCode) }
}
guard !audioStreams.isEmpty else {
selectedAudioStream = nil
@@ -2175,7 +2182,12 @@ final class PlayerModel {
selectedAudioStream = AudioTrackChooser.choose(
from: part.streams,
wish: languages.wish(seriesID: item.seriesID, libraryID: libraryID)
// **Bei einem Film seine eigene Kennung.** Hier stand nur
// `item.seriesID`, und die ist bei einem Film nichts: die
// Vorwahl auf der Filmseite wurde abgelegt und nie wieder
// gelesen. Untertitel gingen durch, Ton nicht — weil die beiden
// an verschiedenen Stellen nachsehen.
wish: languages.wish(seriesID: titelbereich, libraryID: libraryID)
)
if let gewählt = selectedAudioStream {
@@ -2195,8 +2207,8 @@ final class PlayerModel {
guard stream != selectedAudioStream else { return }
selectedAudioStream = stream
if let seriesID = item?.seriesID {
languages.remember(stream, forSeries: seriesID)
if let bereich = titelbereich {
languages.remember(stream, forSeries: bereich)
}
// **Der billige Weg, wenn er offensteht.** Wird die Datei unverändert
@@ -2244,16 +2256,16 @@ final class PlayerModel {
/// Was für diese Serie gemerkt ist — für die Anzeige im Spurenblatt.
var rememberedTrackName: String? {
guard let seriesID = item?.seriesID,
let signatur = languages.rememberedTrack(forSeries: seriesID)
guard let bereich = titelbereich,
let signatur = languages.rememberedTrack(forSeries: bereich)
else { return nil }
return signatur.title ?? signatur.languageCode
}
/// Vergisst die gemerkte Spur dieser Serie.
func forgetRememberedTrack() {
guard let seriesID = item?.seriesID else { return }
languages.forgetTrack(forSeries: seriesID)
guard let bereich = titelbereich else { return }
languages.forgetTrack(forSeries: bereich)
}
private func playerSubtitle(for item: MediaItem) -> String? {