mirror of
https://github.com/yattee/yattee.git
synced 2025-08-06 10:44:06 +00:00
Player layout changes
This commit is contained in:
@@ -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(
|
||||
|
@@ -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() {
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
|
@@ -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(
|
||||
|
Reference in New Issue
Block a user