diff --git a/Model/Player/Backends/MPVBackend.swift b/Model/Player/Backends/MPVBackend.swift index 0d726b92..5773be34 100644 --- a/Model/Player/Backends/MPVBackend.swift +++ b/Model/Player/Backends/MPVBackend.swift @@ -168,12 +168,15 @@ final class MPVBackend: PlayerBackend { self?.isLoadingVideo = true } } else { - self.onFileLoaded = { [weak self] in + self.onFileLoaded = { updateCurrentStream() startPlaying() } - self.client.loadFile(stream.videoAsset.url, audio: stream.audioAsset.url, time: time) { [weak self] _ in + let fileToLoad = self.model.musicMode ? stream.audioAsset.url : stream.videoAsset.url + let audioTrack = self.model.musicMode ? nil : stream.audioAsset.url + + self.client.loadFile(fileToLoad, audio: audioTrack, time: time) { [weak self] _ in self?.isLoadingVideo = true self?.pause() } @@ -386,4 +389,16 @@ final class MPVBackend: PlayerBackend { func setSize(_ width: Double, _ height: Double) { self.client?.setSize(width, height) } + + func addVideoTrack(_ url: URL) { + self.client?.addVideoTrack(url) + } + + func setVideoToAuto() { + self.client?.setVideoToAuto() + } + + func setVideoToNo() { + self.client?.setVideoToNo() + } } diff --git a/Model/Player/Backends/MPVClient.swift b/Model/Player/Backends/MPVClient.swift index 2be25d91..69bb7066 100644 --- a/Model/Player/Backends/MPVClient.swift +++ b/Model/Player/Backends/MPVClient.swift @@ -121,10 +121,6 @@ final class MPVClient: ObservableObject { command("loadfile", args: args, returnValueCallback: completionHandler) } - func addAudio(_ url: URL, completionHandler: ((Int32) -> Void)? = nil) { - command("audio-add", args: [url.absoluteString], returnValueCallback: completionHandler) - } - func play() { setFlagAsync("pause", false) } @@ -228,6 +224,22 @@ final class MPVClient: ObservableObject { } } + func addVideoTrack(_ url: URL) { + command("video-add", args: [url.absoluteString]) + } + + func setVideoToAuto() { + setString("video", "auto") + } + + func setVideoToNo() { + setString("video", "no") + } + + var tracksCount: Int { + Int(getString("track-list/count") ?? "-1") ?? -1 + } + private func setFlagAsync(_ name: String, _ flag: Bool) { var data: Int = flag ? 1 : 0 mpv_set_property_async(mpv, 0, name, MPV_FORMAT_FLAG, &data) @@ -244,6 +256,23 @@ final class MPVClient: ObservableObject { return data } + private func getInt(_ name: String) -> Int { + var data = Int64() + mpv_get_property(mpv, name, MPV_FORMAT_INT64, &data) + return Int(data) + } + + func getString(_ name: String) -> String? { + let cstr = mpv_get_property_string(mpv, name) + let str: String? = cstr == nil ? nil : String(cString: cstr!) + mpv_free(cstr) + return str + } + + private func setString(_ name: String, _ value: String) { + mpv_set_property_string(mpv, name, value) + } + private func makeCArgs(_ command: String, _ args: [String?]) -> [String?] { if !args.isEmpty, args.last == nil { fatalError("Command do not need a nil suffix")