diff --git a/Flaro/Views/Player/PlayerModel.swift b/Flaro/Views/Player/PlayerModel.swift index 7b3a4c2..d5a8bde 100644 --- a/Flaro/Views/Player/PlayerModel.swift +++ b/Flaro/Views/Player/PlayerModel.swift @@ -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? {