Improved Captions handling

New options for captions in `Settings-Player`:

- Always show captions
- Default language

User can now select whether they want to show captions automatically when the video starts, and select the language.

Captions selector now shows proper name -> `English (en)` instead of only `en`
This commit is contained in:
Toni Förster
2024-05-20 02:49:32 +02:00
parent 90777d91f6
commit 4db02b2638
7 changed files with 168 additions and 9 deletions

View File

@@ -217,9 +217,15 @@ final class MPVBackend: PlayerBackend {
#endif
var captions: Captions?
if let captionsLanguageCode = Defaults[.captionsLanguageCode] {
captions = video.captions.first { $0.code == captionsLanguageCode } ??
video.captions.first { $0.code.contains(captionsLanguageCode) }
if Defaults[.captionsAutoShow] == true {
let captionsLanguageCode = Defaults[.captionsDefaultLanguageCode]
if !captionsLanguageCode.isEmpty {
captions = video.captions.first { $0.code == captionsLanguageCode } ??
video.captions.first { $0.code.contains(captionsLanguageCode) }
}
} else {
captions = nil
}
let updateCurrentStream = {
@@ -254,9 +260,8 @@ final class MPVBackend: PlayerBackend {
self.startClientUpdates()
// Captions should only be displayed when selected by the user,
// not when the video starts. So, we remove them.
self.client?.removeSubs()
if Defaults[.captionsAutoShow] { self.client?.setSubToAuto() } else { self.client?.setSubToNo() }
PlayerModel.shared.captions = self.captions
if !preservingTime,
!upgrading,

View File

@@ -405,6 +405,14 @@ final class MPVClient: ObservableObject {
setString("video", "no")
}
func setSubToAuto() {
setString("sub", "auto")
}
func setSubToNo() {
setString("sub", "no")
}
var tracksCount: Int {
Int(getString("track-list/count") ?? "-1") ?? -1
}