diff --git a/Flixy/Views/Player/PlayerModel.swift b/Flixy/Views/Player/PlayerModel.swift index 18c6423..2e089af 100644 --- a/Flixy/Views/Player/PlayerModel.swift +++ b/Flixy/Views/Player/PlayerModel.swift @@ -1594,6 +1594,16 @@ final class PlayerModel { guard abs((time - ziel).seconds) < 1.5 else { break } seekTarget = nil } + // **Und dasselbe beim Neuaufbau.** + // + // Ein frisch geöffneter Stream meldet erst einmal null, + // eins, zwei — er springt erst danach an die gemerkte + // Stelle. Wer in diesem Augenblick `currentTime` liest, + // liest zwei Sekunden statt einundzwanzig Minuten. Und + // genau das tut ein **zweiter** Neuaufbau, wenn man zügig + // noch etwas umstellt: er merkt sich die falsche Stelle + // und landet am Filmanfang. Daher „teilweise". + if let ziel = resumeTarget, time + .seconds(2) < ziel { break } currentTime = time // Gedrosselt in `NowPlaying`: zwischen zwei Meldungen // zählt das System selbst weiter, es kennt das Tempo. @@ -1620,12 +1630,33 @@ final class PlayerModel { case .tracksResolved(let audio, let subtitle): audioTracks = audio subtitleTracks = subtitle + showOrderedSubtitle() applyPreferredLanguages() } } } } + /// Zeigt den Untertitel, den wir beim Server bestellt haben. + /// + /// **Der Fehler, den das behebt:** Wer im Player einen Untertitel wählt, + /// löst einen Neuaufbau aus — der Server bekommt die Spurnummer und + /// liefert sie brav mit. Nur sagte danach niemand dem Player, dass er sie + /// **zeigen** soll. Gewählt wurde bisher allein in + /// `applyPreferredLanguages()`, und das greift nur, wenn in den + /// Einstellungen eine Untertitelsprache steht. Wer keine eingestellt + /// hatte, schaltete die Untertitel ein und sah nichts. + /// + /// **Die erste ist die richtige.** Rechnet der Server um, liegt genau + /// eine im Stream — nämlich die bestellte. Es gibt nichts zu verwechseln. + private func showOrderedSubtitle() { + guard selectedSubtitleStream != nil, + selectedSubtitleTrack == nil, + let erste = subtitleTracks.first + else { return } + selectSubtitleTrack(erste) + } + /// Wählt die Untertitelspur, sofern eine gewünscht ist. /// /// **Nur noch Untertitel.** Die Tonspur wird nicht mehr hier gewählt,