diff --git a/ErsatzTV/Locals/Shared/MainLayout.resx b/ErsatzTV/Locals/Shared/MainLayout.resx index 67110bc83..2b334293a 100644 --- a/ErsatzTV/Locals/Shared/MainLayout.resx +++ b/ErsatzTV/Locals/Shared/MainLayout.resx @@ -141,6 +141,9 @@ XMLTV + + Opens in ChicoryTV + Support diff --git a/ErsatzTV/Shared/MainLayout.razor b/ErsatzTV/Shared/MainLayout.razor index 1373fd51e..41232a333 100644 --- a/ErsatzTV/Shared/MainLayout.razor +++ b/ErsatzTV/Shared/MainLayout.razor @@ -117,7 +117,7 @@ { - @StringLocalizer["ButtonChannels"] + @StringLocalizer["ButtonChannels"]@ChicoryCue @StringLocalizer["ButtonFFmpegProfiles"] @StringLocalizer["ButtonWatermarks"] @@ -127,7 +127,7 @@ @StringLocalizer["ButtonMediaSourcesPlex"] - @StringLocalizer["ButtonMediaLibraries"] + @StringLocalizer["ButtonMediaLibraries"]@ChicoryCue @StringLocalizer["ButtonMediaTrash"] @StringLocalizer["ButtonMediaTvShows"] @StringLocalizer["ButtonMediaMovies"] @@ -161,7 +161,7 @@ } - @StringLocalizer["ButtonSchedulingSchedules"] + @StringLocalizer["ButtonSchedulingSchedules"]@ChicoryCue @StringLocalizer["ButtonSchedulingBlocks"] @StringLocalizer["ButtonSchedulingTemplates"] @StringLocalizer["ButtonSchedulingDecos"] @@ -180,17 +180,18 @@ { @StringLocalizer["ButtonSchedulingPlayouts"] } + @ChicoryCue - @StringLocalizer["ButtonSettingsFFmpeg"] - @StringLocalizer["ButtonSettingsLogging"] - @StringLocalizer["ButtonSettingsHdHomeRun"] - @StringLocalizer["ButtonSettingsScanner"] - @StringLocalizer["ButtonSettingsPlayout"] - @StringLocalizer["ButtonSettingsUi"] - @StringLocalizer["ButtonSettingsXmltv"] + @StringLocalizer["ButtonSettingsFFmpeg"]@ChicoryCue + @StringLocalizer["ButtonSettingsLogging"]@ChicoryCue + @StringLocalizer["ButtonSettingsHdHomeRun"]@ChicoryCue + @StringLocalizer["ButtonSettingsScanner"]@ChicoryCue + @StringLocalizer["ButtonSettingsPlayout"]@ChicoryCue + @StringLocalizer["ButtonSettingsUi"]@ChicoryCue + @StringLocalizer["ButtonSettingsXmltv"]@ChicoryCue @@ -260,6 +261,15 @@ @code { + // Lightweight cue (ersatztv#147): marks nav entries that 302-redirect into the + // ChicoryTV SPA (see LegacyUiRedirects.Map) so it's clear before clicking that the + // entry leaves this Blazor UI. Non-redirecting entries in the same MudNavGroup are + // left bare. + private RenderFragment ChicoryCue => + @ + + ; + private static readonly string InfoVersion = Assembly.GetEntryAssembly().GetCustomAttribute()?.InformationalVersion ?? "unknown"; private static readonly string BuildConfiguration = Assembly.GetEntryAssembly().GetCustomAttribute()?.Configuration?.ToLower() ?? "unset"; diff --git a/web/src/App.test.tsx b/web/src/App.test.tsx index 866ab5736..01ed499d0 100644 --- a/web/src/App.test.tsx +++ b/web/src/App.test.tsx @@ -2728,6 +2728,15 @@ describe('Settings screen (#93)', () => { expect(await screen.findByText('Local')).toBeInTheDocument(); }); + it('shows a Classic UI link to the legacy Blazor app in the System pane (#147)', async () => { + mockDashboardApi(); + await openSettings(); + fireEvent.click(await screen.findByRole('button', { name: /^System/ })); + + const link = await screen.findByRole('link', { name: /Open Classic UI/ }); + expect(link).toHaveAttribute('href', '/system/health'); + }); + it('renders and stays editable when media sources (tier-2 reference data) fail to load', async () => { mockDashboardApi({ mediaSourcesFailuresBeforeSuccess: 99 }); await openSettings(); diff --git a/web/src/screens/SettingsScreen.tsx b/web/src/screens/SettingsScreen.tsx index fb2f9f43c..e087cb62f 100644 --- a/web/src/screens/SettingsScreen.tsx +++ b/web/src/screens/SettingsScreen.tsx @@ -854,6 +854,12 @@ function SystemPane({ Open Dashboard + + + Open Classic UI + + );