1
0
mirror of https://github.com/yattee/yattee.git synced 2024-12-13 05:40:32 +05:30

Fix updating now playing info with mpv on tvOS

Other minor tvOS fixes
This commit is contained in:
Arkadiusz Fal 2022-08-29 00:29:29 +02:00
parent 945dbfe00b
commit d5f8ad4eec
2 changed files with 51 additions and 41 deletions

View File

@ -505,16 +505,7 @@ final class PlayerModel: ObservableObject {
self.backend.setNeedsDrawing(self.presentingPlayer) self.backend.setNeedsDrawing(self.presentingPlayer)
} }
#if os(tvOS) controls.hide()
if presentingPlayer {
controls.show()
Delay.by(1) { [weak self] in
self?.controls.hide()
}
}
#else
controls.hide()
#endif
#if !os(macOS) #if !os(macOS)
UIApplication.shared.isIdleTimerDisabled = presentingPlayer UIApplication.shared.isIdleTimerDisabled = presentingPlayer
@ -883,38 +874,39 @@ final class PlayerModel: ObservableObject {
} }
func updateNowPlayingInfo() { func updateNowPlayingInfo() {
#if !os(tvOS) #if os(tvOS)
guard let video = currentItem?.video else { guard activeBackend == .mpv else { return }
MPNowPlayingInfoCenter.default().nowPlayingInfo = .none
return
}
let currentTime = (backend.currentTime?.seconds.isFinite ?? false) ? backend.currentTime!.seconds : 0
var nowPlayingInfo: [String: AnyObject] = [
MPMediaItemPropertyTitle: video.title as AnyObject,
MPMediaItemPropertyArtist: video.author as AnyObject,
MPNowPlayingInfoPropertyIsLiveStream: live as AnyObject,
MPNowPlayingInfoPropertyElapsedPlaybackTime: currentTime as AnyObject,
MPNowPlayingInfoPropertyPlaybackQueueCount: queue.count as AnyObject,
MPNowPlayingInfoPropertyPlaybackQueueIndex: 1 as AnyObject,
MPMediaItemPropertyMediaType: MPMediaType.anyVideo.rawValue as AnyObject
]
if !currentArtwork.isNil {
nowPlayingInfo[MPMediaItemPropertyArtwork] = currentArtwork as AnyObject
}
if !video.live {
let itemDuration = (backend.playerItemDuration ?? .zero).seconds
let duration = itemDuration.isFinite ? Double(itemDuration) : nil
if !duration.isNil {
nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = duration as AnyObject
}
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
#endif #endif
guard let video = currentItem?.video else {
MPNowPlayingInfoCenter.default().nowPlayingInfo = .none
return
}
let currentTime = (backend.currentTime?.seconds.isFinite ?? false) ? backend.currentTime!.seconds : 0
var nowPlayingInfo: [String: AnyObject] = [
MPMediaItemPropertyTitle: video.title as AnyObject,
MPMediaItemPropertyArtist: video.author as AnyObject,
MPNowPlayingInfoPropertyIsLiveStream: live as AnyObject,
MPNowPlayingInfoPropertyElapsedPlaybackTime: currentTime as AnyObject,
MPNowPlayingInfoPropertyPlaybackQueueCount: queue.count as AnyObject,
MPNowPlayingInfoPropertyPlaybackQueueIndex: 1 as AnyObject,
MPMediaItemPropertyMediaType: MPMediaType.anyVideo.rawValue as AnyObject
]
if !currentArtwork.isNil {
nowPlayingInfo[MPMediaItemPropertyArtwork] = currentArtwork as AnyObject
}
if !video.live {
let itemDuration = (backend.playerItemDuration ?? .zero).seconds
let duration = itemDuration.isFinite ? Double(itemDuration) : nil
if !duration.isNil {
nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = duration as AnyObject
}
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
} }
func updateCurrentArtwork() { func updateCurrentArtwork() {

View File

@ -34,6 +34,8 @@ struct PlayerBackendView: View {
.padding(.top, controlsTopPadding) .padding(.top, controlsTopPadding)
.padding(.bottom, controlsBottomPadding) .padding(.bottom, controlsBottomPadding)
#endif #endif
#else
hiddenControlsButton
#endif #endif
} }
#if os(iOS) #if os(iOS)
@ -70,6 +72,22 @@ struct PlayerBackendView: View {
} }
} }
#endif #endif
#if os(tvOS)
private var hiddenControlsButton: some View {
VStack {
Button {
player.controls.show()
} label: {
EmptyView()
}
.offset(y: -100)
.buttonStyle(.plain)
.background(Color.clear)
.foregroundColor(.clear)
}
}
#endif
} }
struct PlayerBackendView_Previews: PreviewProvider { struct PlayerBackendView_Previews: PreviewProvider {