enable playback on programs view

This commit is contained in:
jhays 2022-01-20 08:33:30 -06:00
parent 58cd96c815
commit dd7ac40aaf
4 changed files with 32 additions and 10 deletions

View File

@ -27,7 +27,6 @@ final class LiveTVChannelsCoordinator: NavigationCoordinatable {
func makeVideoPlayer(viewModel: VideoPlayerViewModel) -> NavigationViewCoordinator<VideoPlayerCoordinator> {
NavigationViewCoordinator(VideoPlayerCoordinator(viewModel: viewModel))
// NavigationViewCoordinator(EmptyViewCoordinator())
}
@ViewBuilder

View File

@ -20,9 +20,8 @@ final class LiveTVProgramsCoordinator: NavigationCoordinatable {
@Route(.fullScreen)
var videoPlayer = makeVideoPlayer
func makeVideoPlayer(item: BaseItemDto) -> NavigationViewCoordinator<EmptyViewCoordinator> {
// NavigationViewCoordinator(VideoPlayerCoordinator(item: item))
NavigationViewCoordinator(EmptyViewCoordinator())
func makeVideoPlayer(viewModel: VideoPlayerViewModel) -> NavigationViewCoordinator<VideoPlayerCoordinator> {
NavigationViewCoordinator(VideoPlayerCoordinator(viewModel: viewModel))
}
@ViewBuilder

View File

@ -197,4 +197,16 @@ final class LiveTVProgramsViewModel: ViewModel {
})
.store(in: &cancellables)
}
func fetchVideoPlayerViewModel(item: BaseItemDto, completion: @escaping (VideoPlayerViewModel)->Void) {
item.createVideoPlayerViewModel()
.sink { completion in
self.handleAPIRequestError(completion: completion)
} receiveValue: { videoPlayerViewModels in
if let viewModel = videoPlayerViewModels.first {
completion(viewModel)
}
}
.store(in: &self.cancellables)
}
}

View File

@ -33,7 +33,9 @@ struct LiveTVProgramsView: View {
if let chanId = item.channelId,
let chan = viewModel.findChannel(id: chanId)
{
self.programsRouter.route(to: \.videoPlayer, chan)
self.viewModel.fetchVideoPlayerViewModel(item: chan) { playerViewModel in
self.programsRouter.route(to: \.videoPlayer, playerViewModel)
}
}
} label: {
LandscapeItemElement(item: item)
@ -59,7 +61,9 @@ struct LiveTVProgramsView: View {
if let chanId = item.channelId,
let chan = viewModel.findChannel(id: chanId)
{
self.programsRouter.route(to: \.videoPlayer, chan)
self.viewModel.fetchVideoPlayerViewModel(item: chan) { playerViewModel in
self.programsRouter.route(to: \.videoPlayer, playerViewModel)
}
}
} label: {
LandscapeItemElement(item: item)
@ -85,7 +89,9 @@ struct LiveTVProgramsView: View {
if let chanId = item.channelId,
let chan = viewModel.findChannel(id: chanId)
{
self.programsRouter.route(to: \.videoPlayer, chan)
self.viewModel.fetchVideoPlayerViewModel(item: chan) { playerViewModel in
self.programsRouter.route(to: \.videoPlayer, playerViewModel)
}
}
} label: {
LandscapeItemElement(item: item)
@ -111,7 +117,9 @@ struct LiveTVProgramsView: View {
if let chanId = item.channelId,
let chan = viewModel.findChannel(id: chanId)
{
self.programsRouter.route(to: \.videoPlayer, chan)
self.viewModel.fetchVideoPlayerViewModel(item: chan) { playerViewModel in
self.programsRouter.route(to: \.videoPlayer, playerViewModel)
}
}
} label: {
LandscapeItemElement(item: item)
@ -137,7 +145,9 @@ struct LiveTVProgramsView: View {
if let chanId = item.channelId,
let chan = viewModel.findChannel(id: chanId)
{
self.programsRouter.route(to: \.videoPlayer, chan)
self.viewModel.fetchVideoPlayerViewModel(item: chan) { playerViewModel in
self.programsRouter.route(to: \.videoPlayer, playerViewModel)
}
}
} label: {
LandscapeItemElement(item: item)
@ -163,7 +173,9 @@ struct LiveTVProgramsView: View {
if let chanId = item.channelId,
let chan = viewModel.findChannel(id: chanId)
{
self.programsRouter.route(to: \.videoPlayer, chan)
self.viewModel.fetchVideoPlayerViewModel(item: chan) { playerViewModel in
self.programsRouter.route(to: \.videoPlayer, playerViewModel)
}
}
} label: {
LandscapeItemElement(item: item)