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)