remove standalone subtitle extract, unify done semantics, fix nav active matching
All checks were successful
Build and Push Docker Image / build (push) Successful in 49s

Subtitle extraction lives only in the pipeline now; a file is 'done' when it
matches the desired end state — no embedded subs AND audio matches the
language config. The separate Extract page was redundant.

- delete src/routes/review/subtitles/extract.tsx + SubtitleExtractPage
- delete /api/subtitles/extract-all + /:id/extract endpoints
- delete buildExtractOnlyCommand + unused buildExtractionOutputs from ffmpeg.ts
- detail page: drop Extract button + extractCommand textarea, replace with
  'will be extracted via pipeline' note when embedded subs present
- pipeline endpoint: doneCount = is_noop OR status='done' (a file in the
  desired state, however it got there); UI label 'N files in desired state'
- nav: drop the now-defunct 'Extract subs' link, default activeOptions.exact
  to false so detail subpages (e.g. /review/audio/123) highlight their
  parent ('Audio') in the menu — was the cause of the broken-feeling menu
This commit is contained in:
2026-04-13 09:41:46 +02:00
parent cc19d99292
commit 9ee0dd445f
9 changed files with 25 additions and 557 deletions

View File

@@ -9,7 +9,7 @@ export const Route = createRootRoute({
component: RootLayout,
});
function NavLink({ to, children }: { to: string; children: React.ReactNode }) {
function NavLink({ to, children, exact = false }: { to: string; children: React.ReactNode; exact?: boolean }) {
return (
<Link
to={to}
@@ -17,7 +17,7 @@ function NavLink({ to, children }: { to: string; children: React.ReactNode }) {
"px-2.5 py-1 rounded text-[0.85rem] no-underline transition-colors text-gray-500 hover:bg-gray-100 hover:text-gray-900",
)}
activeProps={{ className: "bg-gray-100 text-gray-900 font-medium" }}
activeOptions={{ exact: true }}
activeOptions={{ exact }}
>
{children}
</Link>
@@ -64,12 +64,13 @@ function RootLayout() {
</Link>
<VersionBadge />
<div className="flex flex-wrap items-center gap-0.5">
<NavLink to="/">Dashboard</NavLink>
<NavLink to="/" exact>
Dashboard
</NavLink>
<NavLink to="/scan">Scan</NavLink>
<NavLink to="/pipeline">Pipeline</NavLink>
<NavLink to="/review/audio">Audio</NavLink>
<NavLink to="/review/subtitles/extract">Extract subs</NavLink>
<NavLink to="/review/subtitles">Subtitle mgr</NavLink>
<NavLink to="/review/subtitles">Subtitles</NavLink>
<NavLink to="/execute">Jobs</NavLink>
</div>
<div className="flex-1" />