Player layout changes

This commit is contained in:
Arkadiusz Fal
2022-12-18 13:11:06 +01:00
parent 328119f0e0
commit ba1ec7c559
15 changed files with 147 additions and 169 deletions

View File

@@ -17,7 +17,7 @@ final class PlayerControlsModel: ObservableObject {
private(set) var reporter = PassthroughSubject<String, Never>()
#endif
private var player: PlayerModel! { .shared }
var player: PlayerModel! { .shared }
private var controlsOverlayModel = ControlOverlaysModel.shared
init(

View File

@@ -108,6 +108,7 @@ final class PlayerModel: ObservableObject {
@Published var autoplayItem: PlayerQueueItem?
@Published var autoplayItemSource: Video?
@Published var advancing = false
@Published var closing = false
@Published var returnYouTubeDislike = ReturnYouTubeDislikeAPI()
@@ -321,6 +322,7 @@ final class PlayerModel: ObservableObject {
func play(_ video: Video, at time: CMTime? = nil, showingPlayer: Bool = true) {
pause()
videoBeingOpened = video
WatchNextViewModel.shared.presentingOutro = false
@@ -571,25 +573,29 @@ final class PlayerModel: ObservableObject {
}
func closeCurrentItem(finished: Bool = false) {
controls.presentingControls = false
pause()
closePiP()
prepareCurrentItemForHistory(finished: finished)
withAnimation {
currentItem = nil
closing = true
controls.presentingControls = false
self.hide()
Delay.by(0.8) { [weak self] in
guard let self else { return }
self.closePiP()
self.prepareCurrentItemForHistory(finished: finished)
withAnimation {
self.currentItem = nil
}
self.updateNowPlayingInfo()
self.backend.closeItem()
self.aspectRatio = VideoPlayerView.defaultAspectRatio
self.resetAutoplay()
self.closing = false
self.playingFullScreen = false
}
updateNowPlayingInfo()
backend.closeItem()
aspectRatio = VideoPlayerView.defaultAspectRatio
resetAutoplay()
exitFullScreen()
#if !os(macOS)
if closePlayerOnItemClose { Delay.by(0.2) { self.hide() } }
#endif
}
func startPiP() {

View File

@@ -9,6 +9,10 @@ extension PlayerModel {
currentItem?.video
}
var videoForDisplay: Video? {
videoBeingOpened ?? (closing ? nil : currentVideo)
}
func play(_ videos: [Video], shuffling: Bool = false) {
WatchNextViewModel.shared.presentingOutro = false
playbackMode = shuffling ? .shuffle : .queue
@@ -33,6 +37,8 @@ extension PlayerModel {
closePiP()
}
videoBeingOpened = video
prepareCurrentItemForHistory()
enqueueVideo(video, play: true, atTime: time, prepending: true) { _, item in
@@ -70,9 +76,8 @@ extension PlayerModel {
return
}
self.videoBeingOpened = nil
if video.isLocal {
self.videoBeingOpened = nil
self.availableStreams = video.streams
return
}
@@ -81,8 +86,11 @@ extension PlayerModel {
let streamsInstance = video.streams.compactMap(\.instance).first
if video.streams.isEmpty || streamsInstance != playerInstance {
self.loadAvailableStreams(video)
self.loadAvailableStreams(video) { [weak self] _ in
self?.videoBeingOpened = nil
}
} else {
self.videoBeingOpened = nil
self.availableStreams = self.streamsWithInstance(instance: playerInstance, streams: video.streams)
}
}

View File

@@ -15,13 +15,13 @@ extension PlayerModel {
availableStreams.sorted(by: streamsSorter)
}
func loadAvailableStreams(_ video: Video) {
func loadAvailableStreams(_ video: Video, onCompletion: @escaping (ResponseInfo) -> Void = { _ in }) {
availableStreams = []
guard let playerInstance else { return }
logger.info("loading streams from \(playerInstance.description)")
fetchStreams(playerAPI(video).video(video.videoID), instance: playerInstance, video: video)
fetchStreams(playerAPI(video).video(video.videoID), instance: playerInstance, video: video, onCompletion: onCompletion)
}
private func fetchStreams(