Fix tvOS navigation - use push everywhere except Media tab channels

Changes:
- MediaCoordinator: Use .fullScreen for tvOS (full-screen display with navigation)
- HomeCoordinator, LibraryCoordinator, SearchCoordinator: Use .push without NavigationViewCoordinator wrappers
- Unified tvOS and iOS coordinator return types for push navigation

This fixes:
 Channels display full-screen (not modal popup)
 Login and settings use full-screen navigation
 Items from Home/Search display correctly

Known issues with .fullScreen presentation:
- Pressing ESC on error dismisses entire channel instead of going back one level
- Video player doesn't respond to ESC during playback

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ashik K 2025-10-17 12:42:42 +02:00
parent d0a921d05c
commit 7c28c04048
4 changed files with 4 additions and 30 deletions

View File

@ -30,15 +30,6 @@ final class HomeCoordinator: NavigationCoordinatable {
var library = makeLibrary var library = makeLibrary
#endif #endif
#if os(tvOS)
func makeItem(item: BaseItemDto) -> NavigationViewCoordinator<ItemCoordinator> {
NavigationViewCoordinator(ItemCoordinator(item: item))
}
func makeLibrary(viewModel: PagingLibraryViewModel<BaseItemDto>) -> NavigationViewCoordinator<LibraryCoordinator<BaseItemDto>> {
NavigationViewCoordinator(LibraryCoordinator<BaseItemDto>(viewModel: viewModel))
}
#else
func makeItem(item: BaseItemDto) -> ItemCoordinator { func makeItem(item: BaseItemDto) -> ItemCoordinator {
ItemCoordinator(item: item) ItemCoordinator(item: item)
} }
@ -46,7 +37,6 @@ final class HomeCoordinator: NavigationCoordinatable {
func makeLibrary(viewModel: PagingLibraryViewModel<BaseItemDto>) -> LibraryCoordinator<BaseItemDto> { func makeLibrary(viewModel: PagingLibraryViewModel<BaseItemDto>) -> LibraryCoordinator<BaseItemDto> {
LibraryCoordinator(viewModel: viewModel) LibraryCoordinator(viewModel: viewModel)
} }
#endif
@ViewBuilder @ViewBuilder
func makeStart() -> some View { func makeStart() -> some View {

View File

@ -44,15 +44,6 @@ final class LibraryCoordinator<Element: Poster>: NavigationCoordinatable {
PagingLibraryView(viewModel: viewModel) PagingLibraryView(viewModel: viewModel)
} }
#if os(tvOS)
func makeItem(item: BaseItemDto) -> NavigationViewCoordinator<ItemCoordinator> {
NavigationViewCoordinator(ItemCoordinator(item: item))
}
func makeLibrary(viewModel: PagingLibraryViewModel<BaseItemDto>) -> NavigationViewCoordinator<LibraryCoordinator<BaseItemDto>> {
NavigationViewCoordinator(LibraryCoordinator<BaseItemDto>(viewModel: viewModel))
}
#else
func makeItem(item: BaseItemDto) -> ItemCoordinator { func makeItem(item: BaseItemDto) -> ItemCoordinator {
ItemCoordinator(item: item) ItemCoordinator(item: item)
} }
@ -61,6 +52,7 @@ final class LibraryCoordinator<Element: Poster>: NavigationCoordinatable {
LibraryCoordinator<BaseItemDto>(viewModel: viewModel) LibraryCoordinator<BaseItemDto>(viewModel: viewModel)
} }
#if !os(tvOS)
func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator<FilterCoordinator> { func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator<FilterCoordinator> {
NavigationViewCoordinator(FilterCoordinator(parameters: parameters)) NavigationViewCoordinator(FilterCoordinator(parameters: parameters))
} }

View File

@ -18,9 +18,9 @@ final class MediaCoordinator: NavigationCoordinatable {
@Root @Root
var start = makeStart var start = makeStart
#if os(tvOS) #if os(tvOS)
@Route(.push) @Route(.fullScreen)
var library = makeLibrary var library = makeLibrary
@Route(.push) @Route(.fullScreen)
var liveTV = makeLiveTV var liveTV = makeLiveTV
#else #else
@Route(.push) @Route(.push)

View File

@ -31,15 +31,6 @@ final class SearchCoordinator: NavigationCoordinatable {
var filter = makeFilter var filter = makeFilter
#endif #endif
#if os(tvOS)
func makeItem(item: BaseItemDto) -> NavigationViewCoordinator<ItemCoordinator> {
NavigationViewCoordinator(ItemCoordinator(item: item))
}
func makeLibrary(viewModel: PagingLibraryViewModel<BaseItemDto>) -> NavigationViewCoordinator<LibraryCoordinator<BaseItemDto>> {
NavigationViewCoordinator(LibraryCoordinator(viewModel: viewModel))
}
#else
func makeItem(item: BaseItemDto) -> ItemCoordinator { func makeItem(item: BaseItemDto) -> ItemCoordinator {
ItemCoordinator(item: item) ItemCoordinator(item: item)
} }
@ -48,6 +39,7 @@ final class SearchCoordinator: NavigationCoordinatable {
LibraryCoordinator(viewModel: viewModel) LibraryCoordinator(viewModel: viewModel)
} }
#if !os(tvOS)
func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator<FilterCoordinator> { func makeFilter(parameters: FilterCoordinator.Parameters) -> NavigationViewCoordinator<FilterCoordinator> {
NavigationViewCoordinator(FilterCoordinator(parameters: parameters)) NavigationViewCoordinator(FilterCoordinator(parameters: parameters))
} }