mirror of
https://github.com/yattee/yattee.git
synced 2025-08-06 18:54:11 +00:00
Model improvements
This commit is contained in:
@@ -12,11 +12,11 @@ final class AVPlayerBackend: PlayerBackend {
|
||||
|
||||
private var logger = Logger(label: "avplayer-backend")
|
||||
|
||||
var model: PlayerModel!
|
||||
var controls: PlayerControlsModel!
|
||||
var playerTime: PlayerTimeModel!
|
||||
var networkState: NetworkStateModel!
|
||||
var seek: SeekModel!
|
||||
var model: PlayerModel! { .shared }
|
||||
var controls: PlayerControlsModel! { .shared }
|
||||
var playerTime: PlayerTimeModel! { .shared }
|
||||
var networkState: NetworkStateModel! { .shared }
|
||||
var seek: SeekModel! { .shared }
|
||||
|
||||
var stream: Stream?
|
||||
var video: Video?
|
||||
@@ -76,11 +76,7 @@ final class AVPlayerBackend: PlayerBackend {
|
||||
|
||||
internal var controlsUpdates = false
|
||||
|
||||
init(model: PlayerModel, controls: PlayerControlsModel?, playerTime: PlayerTimeModel?) {
|
||||
self.model = model
|
||||
self.controls = controls
|
||||
self.playerTime = playerTime ?? PlayerTimeModel.shared
|
||||
|
||||
init() {
|
||||
addFrequentTimeObserver()
|
||||
addInfrequentTimeObserver()
|
||||
addPlayerTimeControlStatusObserver()
|
||||
|
@@ -13,11 +13,11 @@ final class MPVBackend: PlayerBackend {
|
||||
|
||||
private var logger = Logger(label: "mpv-backend")
|
||||
|
||||
var model: PlayerModel!
|
||||
var controls: PlayerControlsModel!
|
||||
var playerTime: PlayerTimeModel!
|
||||
var networkState: NetworkStateModel!
|
||||
var seek: SeekModel!
|
||||
var model: PlayerModel! { .shared }
|
||||
var controls: PlayerControlsModel! { .shared }
|
||||
var playerTime: PlayerTimeModel! { .shared }
|
||||
var networkState: NetworkStateModel! { .shared }
|
||||
var seek: SeekModel! { .shared }
|
||||
|
||||
var stream: Stream?
|
||||
var video: Video?
|
||||
@@ -120,17 +120,7 @@ final class MPVBackend: PlayerBackend {
|
||||
client?.cacheDuration ?? 0
|
||||
}
|
||||
|
||||
init(
|
||||
model: PlayerModel,
|
||||
controls: PlayerControlsModel? = nil,
|
||||
playerTime: PlayerTimeModel? = nil,
|
||||
networkState: NetworkStateModel? = nil
|
||||
) {
|
||||
self.model = model
|
||||
self.controls = controls
|
||||
self.playerTime = playerTime ?? PlayerTimeModel.shared
|
||||
self.networkState = networkState
|
||||
|
||||
init() {
|
||||
clientTimer = .init(interval: .seconds(Self.timeUpdateInterval), mode: .infinite) { [weak self] _ in
|
||||
self?.getTimeUpdates()
|
||||
}
|
||||
|
@@ -6,11 +6,10 @@ import Foundation
|
||||
#endif
|
||||
|
||||
protocol PlayerBackend {
|
||||
var model: PlayerModel! { get set }
|
||||
var controls: PlayerControlsModel! { get set }
|
||||
var playerTime: PlayerTimeModel! { get set }
|
||||
var seek: SeekModel! { get set }
|
||||
var networkState: NetworkStateModel! { get set }
|
||||
var model: PlayerModel! { get }
|
||||
var controls: PlayerControlsModel! { get }
|
||||
var playerTime: PlayerTimeModel! { get }
|
||||
var networkState: NetworkStateModel! { get }
|
||||
|
||||
var stream: Stream? { get set }
|
||||
var video: Video? { get set }
|
||||
@@ -69,20 +68,20 @@ protocol PlayerBackend {
|
||||
|
||||
extension PlayerBackend {
|
||||
func seek(to time: CMTime, seekType: SeekType, completionHandler: ((Bool) -> Void)? = nil) {
|
||||
seek.registerSeek(at: time, type: seekType, restore: currentTime)
|
||||
model.seek.registerSeek(at: time, type: seekType, restore: currentTime)
|
||||
seek(to: time, seekType: seekType, completionHandler: completionHandler)
|
||||
}
|
||||
|
||||
func seek(to seconds: Double, seekType: SeekType, completionHandler: ((Bool) -> Void)? = nil) {
|
||||
let seconds = CMTime.secondsInDefaultTimescale(seconds)
|
||||
seek.registerSeek(at: seconds, type: seekType, restore: currentTime)
|
||||
model.seek.registerSeek(at: seconds, type: seekType, restore: currentTime)
|
||||
seek(to: seconds, seekType: seekType, completionHandler: completionHandler)
|
||||
}
|
||||
|
||||
func seek(relative time: CMTime, seekType: SeekType, completionHandler: ((Bool) -> Void)? = nil) {
|
||||
if let currentTime = currentTime, let duration = playerItemDuration {
|
||||
let seekTime = min(max(0, currentTime.seconds + time.seconds), duration.seconds)
|
||||
seek.registerSeek(at: .secondsInDefaultTimescale(seekTime), type: seekType, restore: currentTime)
|
||||
model.seek.registerSeek(at: .secondsInDefaultTimescale(seekTime), type: seekType, restore: currentTime)
|
||||
seek(to: seekTime, seekType: seekType, completionHandler: completionHandler)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user