Initial functionality of player items queue

Fix environment objects

Hide video player placeholder on tvOS

Queue improvements
This commit is contained in:
Arkadiusz Fal
2021-10-05 22:20:09 +02:00
parent d6b3c6637d
commit 70c089e696
44 changed files with 1711 additions and 689 deletions

View File

@@ -2,19 +2,22 @@ import Defaults
import SwiftUI
struct Player: NSViewControllerRepresentable {
var video: Video!
@EnvironmentObject<PlayerModel> private var player
@EnvironmentObject<InvidiousAPI> private var api
@EnvironmentObject<PlaybackModel> private var playback
var controller: PlayerViewController?
init(controller: PlayerViewController? = nil) {
self.controller = controller
}
func makeNSViewController(context _: Context) -> PlayerViewController {
if self.controller != nil {
return self.controller!
}
let controller = PlayerViewController()
controller.video = video
controller.playback = playback
controller.api = api
controller.resolution = Defaults[.quality]
controller.playerModel = player
return controller
}

View File

@@ -2,42 +2,20 @@ import AVKit
import SwiftUI
final class PlayerViewController: NSViewController {
var video: Video!
var api: InvidiousAPI!
var player = AVPlayer()
var playerModel: PlayerModel!
var playback: PlaybackModel!
var playerView = AVPlayerView()
var resolution: Stream.ResolutionSetting!
override func viewDidDisappear() {
playerView.player?.replaceCurrentItem(with: nil)
playerView.player = nil
playerModel.player = nil
playerModel = nil
// TODO: pause on disappear settings
super.viewDidDisappear()
}
override func loadView() {
playerModel = PlayerModel(playback: playback, api: api, resolution: resolution)
guard playerModel.player.isNil else {
return
}
playerModel.player = player
playerView.player = playerModel.player
playerView.allowsPictureInPicturePlayback = true
playerView.showsFullScreenToggleButton = true
view = playerView
DispatchQueue.main.async {
self.playerModel.loadVideo(self.video)
}
}
}