mirror of
https://github.com/yattee/yattee.git
synced 2025-08-09 20:24:06 +00:00
Add initial version of music mode
This commit is contained in:
@@ -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
|
||||
|
@@ -50,7 +50,7 @@ final class PiPDelegate: NSObject, AVPictureInPictureControllerDelegate {
|
||||
}
|
||||
#endif
|
||||
|
||||
if !player.currentItem.isNil {
|
||||
if !player.currentItem.isNil, !player.musicMode {
|
||||
player?.show()
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user