Add initial version of music mode

This commit is contained in:
Arkadiusz Fal
2022-06-07 23:27:48 +02:00
parent dc1ddc8317
commit da78bac205
8 changed files with 142 additions and 41 deletions

View File

@@ -62,6 +62,10 @@ final class MPVBackend: PlayerBackend {
private var controlsUpdates = false
private var timeObserverThrottle = Throttle(interval: 2)
var tracks: Int {
client?.tracksCount ?? -1
}
init(model: PlayerModel, controls: PlayerControlsModel? = nil) {
self.model = model
self.controls = controls

View File

@@ -50,7 +50,7 @@ final class PiPDelegate: NSObject, AVPictureInPictureControllerDelegate {
}
#endif
if !player.currentItem.isNil {
if !player.currentItem.isNil, !player.musicMode {
player?.show()
}

View File

@@ -68,9 +68,15 @@ final class PlayerControlsModel: ObservableObject {
}
func hide() {
player?.backend.stopControlsUpdates()
guard let player = player,
!player.musicMode
else {
return
}
guard !(player?.currentItem.isNil ?? true) else {
player.backend.stopControlsUpdates()
guard !player.currentItem.isNil else {
return
}
@@ -83,9 +89,7 @@ final class PlayerControlsModel: ObservableObject {
}
func toggle() {
withAnimation(PlayerControls.animation) {
presentingControls.toggle()
}
presentingControls ? hide() : show()
}
func reset() {
@@ -101,6 +105,11 @@ final class PlayerControlsModel: ObservableObject {
#endif
removeTimer()
guard !player.musicMode else {
return
}
timer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: false) { _ in
withAnimation(PlayerControls.animation) { [weak self] in
self?.presentingControls = false

View File

@@ -62,6 +62,7 @@ final class PlayerModel: ObservableObject {
@Published var lastSkipped: Segment? { didSet { rebuildTVMenu() } }
@Published var restoredSegments = [Segment]()
@Published var musicMode = false
@Published var returnYouTubeDislike = ReturnYouTubeDislikeAPI()
#if os(iOS)
@@ -114,7 +115,7 @@ final class PlayerModel: ObservableObject {
self.avPlayerBackend = AVPlayerBackend(model: self, controls: controls)
self.mpvBackend = MPVBackend(model: self)
self.activeBackend = Defaults[.activeBackend]
Defaults[.activeBackend] = .mpv
}
func show() {
@@ -361,6 +362,12 @@ final class PlayerModel: ObservableObject {
return
}
if to == .mpv {
addVideoTrackFromStream()
} else {
musicMode = false
}
inactiveBackends().forEach { $0.pause() }
let fromBackend: PlayerBackend = from == .appleAVPlayer ? avPlayerBackend : mpvBackend
@@ -561,4 +568,37 @@ final class PlayerModel: ObservableObject {
func setNeedsDrawing(_ needsDrawing: Bool) {
backends.forEach { $0.setNeedsDrawing(needsDrawing) }
}
func toggleMusicMode() {
musicMode.toggle()
if musicMode {
if playingInPictureInPicture {
avPlayerBackend.pause()
avPlayerBackend.switchToMPVOnPipClose = false
closePiP()
}
changeActiveBackend(from: .appleAVPlayer, to: .mpv)
controls.presentingControls = true
controls.removeTimer()
mpvBackend.setVideoToNo()
} else {
addVideoTrackFromStream()
mpvBackend.setVideoToAuto()
controls.resetTimer()
}
}
func addVideoTrackFromStream() {
if let videoTrackURL = stream?.videoAsset?.url,
mpvBackend.tracks < 2
{
logger.info("adding video track")
mpvBackend.addVideoTrack(videoTrackURL)
}
mpvBackend.setVideoToAuto()
}
}