Watch next view

This commit is contained in:
Arkadiusz Fal
2022-12-18 00:08:30 +01:00
parent fcf527fa87
commit eca685ae29
17 changed files with 349 additions and 58 deletions

View File

@@ -94,34 +94,37 @@ extension PlayerBackend {
}
func eofPlaybackModeAction() {
switch model.playbackMode {
case .queue, .shuffle:
if Defaults[.closeLastItemOnPlaybackEnd] {
model.prepareCurrentItemForHistory(finished: true)
}
if model.queue.isEmpty {
let timer = Delay.by(5) {
switch model.playbackMode {
case .queue, .shuffle:
if Defaults[.closeLastItemOnPlaybackEnd] {
#if os(tvOS)
if model.activeBackend == .appleAVPlayer {
model.avPlayerBackend.controller?.dismiss(animated: false)
}
#endif
model.resetQueue()
model.hide()
model.prepareCurrentItemForHistory(finished: true)
}
} else {
model.advanceToNextItem()
if model.queue.isEmpty {
if Defaults[.closeLastItemOnPlaybackEnd] {
#if os(tvOS)
if model.activeBackend == .appleAVPlayer {
model.avPlayerBackend.controller?.dismiss(animated: false)
}
#endif
model.resetQueue()
model.hide()
}
} else {
model.advanceToNextItem()
}
case .loopOne:
model.backend.seek(to: .zero, seekType: .loopRestart) { _ in
self.model.play()
}
case .related:
guard let item = model.autoplayItem else { return }
model.resetAutoplay()
model.advanceToItem(item)
}
case .loopOne:
model.backend.seek(to: .zero, seekType: .loopRestart) { _ in
self.model.play()
}
case .related:
guard let item = model.autoplayItem else { return }
model.resetAutoplay()
model.advanceToItem(item)
}
WatchNextViewModel.shared.prepareForNextItem(model.currentItem, timer: timer)
}
func updateControls(completionHandler: (() -> Void)? = nil) {

View File

@@ -322,6 +322,8 @@ final class PlayerModel: ObservableObject {
func play(_ video: Video, at time: CMTime? = nil, showingPlayer: Bool = true) {
pause()
WatchNextViewModel.shared.presentingOutro = false
var changeBackendHandler: (() -> Void)?
if let backend = (live && forceAVPlayerForLiveStreams) ? PlayerBackendType.appleAVPlayer :
@@ -569,7 +571,7 @@ final class PlayerModel: ObservableObject {
}
func closeCurrentItem(finished: Bool = false) {
controls.hide()
controls.presentingControls = false
pause()
closePiP()

View File

@@ -10,6 +10,7 @@ extension PlayerModel {
}
func play(_ videos: [Video], shuffling: Bool = false) {
WatchNextViewModel.shared.presentingOutro = false
playbackMode = shuffling ? .shuffle : .queue
videos.forEach { enqueueVideo($0, loadDetails: false) }
@@ -48,7 +49,10 @@ extension PlayerModel {
comments.reset()
stream = nil
WatchNextViewModel.shared.close()
withAnimation {
aspectRatio = VideoPlayerView.defaultAspectRatio
currentItem = item
}
@@ -163,6 +167,7 @@ extension PlayerModel {
remove(newItem)
WatchNextViewModel.shared.close()
currentItem = newItem
currentItem.playbackTime = time
@@ -207,6 +212,8 @@ extension PlayerModel {
if play {
withAnimation {
aspectRatio = VideoPlayerView.defaultAspectRatio
WatchNextViewModel.shared.close()
currentItem = item
}
videoBeingOpened = video