mirror of
https://github.com/yattee/yattee.git
synced 2025-08-06 10:44:06 +00:00
mpvkit implementation fixes
This commit is contained in:
@@ -4,9 +4,9 @@ import Defaults
|
||||
import Foundation
|
||||
import Logging
|
||||
import MediaPlayer
|
||||
import MPVKit
|
||||
import Repeat
|
||||
import SwiftUI
|
||||
import MPVKit
|
||||
|
||||
final class MPVBackend: PlayerBackend {
|
||||
static var timeUpdateInterval = 0.5
|
||||
@@ -464,6 +464,13 @@ final class MPVBackend: PlayerBackend {
|
||||
startClientUpdates()
|
||||
onFileLoaded = nil
|
||||
|
||||
case MPV_EVENT_PROPERTY_CHANGE:
|
||||
let dataOpaquePtr = OpaquePointer(event.pointee.data)
|
||||
if let property = UnsafePointer<mpv_event_property>(dataOpaquePtr)?.pointee {
|
||||
let propertyName = String(cString: property.name)
|
||||
handlePropertyChange(propertyName, property)
|
||||
}
|
||||
|
||||
case MPV_EVENT_PLAYBACK_RESTART:
|
||||
isLoadingVideo = false
|
||||
isSeeking = false
|
||||
@@ -584,4 +591,22 @@ final class MPVBackend: PlayerBackend {
|
||||
stopMusicMode()
|
||||
}
|
||||
}
|
||||
|
||||
private func handlePropertyChange(_ name: String, _ property: mpv_event_property) {
|
||||
switch name {
|
||||
case "pause":
|
||||
if let paused = UnsafePointer<Bool>(OpaquePointer(property.data))?.pointee {
|
||||
if paused {
|
||||
DispatchQueue.main.async { [weak self] in self?.handleEndOfFile() }
|
||||
} else {
|
||||
isLoadingVideo = false
|
||||
isSeeking = false
|
||||
}
|
||||
isPlaying = !paused
|
||||
networkStateTimer.start()
|
||||
}
|
||||
default:
|
||||
logger.info("MPV backend received unhandled property: \(name)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -107,9 +107,8 @@ final class MPVClient: ObservableObject {
|
||||
#endif
|
||||
}
|
||||
|
||||
queue!.async {
|
||||
mpv_set_wakeup_callback(self.mpv, wakeUp, UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque()))
|
||||
}
|
||||
mpv_set_wakeup_callback(mpv, wakeUp, UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque()))
|
||||
mpv_observe_property(mpv, 0, "pause", MPV_FORMAT_FLAG)
|
||||
}
|
||||
|
||||
func readEvents() {
|
||||
@@ -431,6 +430,7 @@ final class MPVClient: ObservableObject {
|
||||
}
|
||||
|
||||
func getString(_ name: String) -> String? {
|
||||
guard mpv != nil else { return nil }
|
||||
let cstr = mpv_get_property_string(mpv, name)
|
||||
let str: String? = cstr == nil ? nil : String(cString: cstr!)
|
||||
mpv_free(cstr)
|
||||
|
Reference in New Issue
Block a user