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, // alles andere auch einzuschalten. Bei einer Folge gilt die Serie,
// bei einem Film der Titel selbst. // bei einem Film der Titel selbst.
guard selectedSubtitleTrack == nil, guard selectedSubtitleTrack == nil,
let wunsch = languages.subtitleWish(titleID: item?.seriesID ?? item?.id), let wunsch = languages.subtitleWish(titleID: titelbereich),
let treffer = subtitleTracks.first(where: { let treffer = subtitleTracks.first(where: {
LanguageCode.matches(wunsch, $0.languageCode) LanguageCode.matches(wunsch, $0.languageCode)
}) })
@@ -2147,6 +2147,14 @@ final class PlayerModel {
/// Netz und ohne Einstellungen, damit sich der ZDF-Fall wörtlich /// Netz und ohne Einstellungen, damit sich der ZDF-Fall wörtlich
/// hinschreiben und durchspielen lässt. Hier steht nur, woher der Wunsch /// hinschreiben und durchspielen lässt. Hier steht nur, woher der Wunsch
/// kommt. /// 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( private func chooseAudioStream(
in part: MediaFile, in part: MediaFile,
of item: MediaItem, of item: MediaItem,
@@ -2156,10 +2164,9 @@ final class PlayerModel {
subtitleStreams = part.subtitleStreams subtitleStreams = part.subtitleStreams
// Untertitel sind eine Zutat, keine Voraussetzung: der Wunsch gilt, // Untertitel sind eine Zutat, keine Voraussetzung: der Wunsch gilt,
// wenn es einen passenden gibt, und sonst bleibt es ohne. // wenn es einen passenden gibt, und sonst bleibt es ohne.
selectedSubtitleStream = languages.subtitleLanguage.isEmpty ? nil selectedSubtitleStream = languages.subtitleWish(titleID: titelbereich).flatMap { wunsch in
: subtitleStreams.first { subtitleStreams.first { LanguageCode.matches(wunsch, $0.languageCode) }
LanguageCode.matches(languages.subtitleLanguage, $0.languageCode) }
}
guard !audioStreams.isEmpty else { guard !audioStreams.isEmpty else {
selectedAudioStream = nil selectedAudioStream = nil
@@ -2175,7 +2182,12 @@ final class PlayerModel {
selectedAudioStream = AudioTrackChooser.choose( selectedAudioStream = AudioTrackChooser.choose(
from: part.streams, 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 { if let gewählt = selectedAudioStream {
@@ -2195,8 +2207,8 @@ final class PlayerModel {
guard stream != selectedAudioStream else { return } guard stream != selectedAudioStream else { return }
selectedAudioStream = stream selectedAudioStream = stream
if let seriesID = item?.seriesID { if let bereich = titelbereich {
languages.remember(stream, forSeries: seriesID) languages.remember(stream, forSeries: bereich)
} }
// **Der billige Weg, wenn er offensteht.** Wird die Datei unverändert // **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. /// Was für diese Serie gemerkt ist — für die Anzeige im Spurenblatt.
var rememberedTrackName: String? { var rememberedTrackName: String? {
guard let seriesID = item?.seriesID, guard let bereich = titelbereich,
let signatur = languages.rememberedTrack(forSeries: seriesID) let signatur = languages.rememberedTrack(forSeries: bereich)
else { return nil } else { return nil }
return signatur.title ?? signatur.languageCode return signatur.title ?? signatur.languageCode
} }
/// Vergisst die gemerkte Spur dieser Serie. /// Vergisst die gemerkte Spur dieser Serie.
func forgetRememberedTrack() { func forgetRememberedTrack() {
guard let seriesID = item?.seriesID else { return } guard let bereich = titelbereich else { return }
languages.forgetTrack(forSeries: seriesID) languages.forgetTrack(forSeries: bereich)
} }
private func playerSubtitle(for item: MediaItem) -> String? { private func playerSubtitle(for item: MediaItem) -> String? {