From dd7ac40aaf2d26c3716ae302fbd7cc0925d18604 Mon Sep 17 00:00:00 2001 From: jhays Date: Thu, 20 Jan 2022 08:33:30 -0600 Subject: [PATCH] enable playback on programs view --- .../LiveTVChannelsCoordinator.swift | 1 - .../LiveTVProgramsCoordinator.swift | 5 ++-- .../ViewModels/LiveTVProgramsViewModel.swift | 12 ++++++++++ Swiftfin tvOS/Views/LiveTVProgramsView.swift | 24 ++++++++++++++----- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/Shared/Coordinators/LiveTVChannelsCoordinator.swift b/Shared/Coordinators/LiveTVChannelsCoordinator.swift index 63793bab..57b22475 100644 --- a/Shared/Coordinators/LiveTVChannelsCoordinator.swift +++ b/Shared/Coordinators/LiveTVChannelsCoordinator.swift @@ -27,7 +27,6 @@ final class LiveTVChannelsCoordinator: NavigationCoordinatable { func makeVideoPlayer(viewModel: VideoPlayerViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator(VideoPlayerCoordinator(viewModel: viewModel)) -// NavigationViewCoordinator(EmptyViewCoordinator()) } @ViewBuilder diff --git a/Shared/Coordinators/LiveTVProgramsCoordinator.swift b/Shared/Coordinators/LiveTVProgramsCoordinator.swift index af708d30..b52cfead 100644 --- a/Shared/Coordinators/LiveTVProgramsCoordinator.swift +++ b/Shared/Coordinators/LiveTVProgramsCoordinator.swift @@ -20,9 +20,8 @@ final class LiveTVProgramsCoordinator: NavigationCoordinatable { @Route(.fullScreen) var videoPlayer = makeVideoPlayer - func makeVideoPlayer(item: BaseItemDto) -> NavigationViewCoordinator { - // NavigationViewCoordinator(VideoPlayerCoordinator(item: item)) - NavigationViewCoordinator(EmptyViewCoordinator()) + func makeVideoPlayer(viewModel: VideoPlayerViewModel) -> NavigationViewCoordinator { + NavigationViewCoordinator(VideoPlayerCoordinator(viewModel: viewModel)) } @ViewBuilder diff --git a/Shared/ViewModels/LiveTVProgramsViewModel.swift b/Shared/ViewModels/LiveTVProgramsViewModel.swift index f3ea55df..e2f027c9 100644 --- a/Shared/ViewModels/LiveTVProgramsViewModel.swift +++ b/Shared/ViewModels/LiveTVProgramsViewModel.swift @@ -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) + } } diff --git a/Swiftfin tvOS/Views/LiveTVProgramsView.swift b/Swiftfin tvOS/Views/LiveTVProgramsView.swift index 8e9cbe62..ca41bb47 100644 --- a/Swiftfin tvOS/Views/LiveTVProgramsView.swift +++ b/Swiftfin tvOS/Views/LiveTVProgramsView.swift @@ -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)