Add List panel (session 9, fifteenth feature)

Renders a naming-scheme-style expression per loaded file via the same
render_expression engine the Rename panel's live preview uses, fed by
the same local guess_episode/guess_movie/guess_release_info matching
Filter already uses. Copy List and Export to File... (a new
export_text_list Tauri command - the only new backend surface this
feature needed) round it out. Closes out all six original sidebar
panels as real screens.
This commit is contained in:
Renamr Scaffold
2026-08-29 17:28:38 +00:00
parent bfcec9135a
commit 03768c398d
7 changed files with 526 additions and 6 deletions
+57 -6
View File
@@ -51,7 +51,13 @@ CRC32/MD5/SHA1 checksums for a loaded set of files, and reads and writes the cla
credentials of any kind; see "SFV" below. A new Filter panel loads a batch of files and
narrows it down by extension, TV/Movie/Unmatched kind, filename text, and (for TV) season
— all computed from the same local, filename-only matching "Match" uses, with a Copy File
Paths export for whatever's left; see "Filter" below. See "Porting roadmap" below.
Paths export for whatever's left; see "Filter" below. A new List panel renders a
user-editable naming-scheme-style expression per loaded file (the same `{ }` syntax and
`render_expression` engine the Rename panel's live preview uses, fed by the same local
matching "Match"/Filter use), with a live "N of M lines rendered" count, a Copy List
clipboard export, and an Export to File… button that writes the whole list to a `.txt`
file via a native Save dialog — this closes out the full original panel set (Rename/
Episodes/Subtitles/SFV/Filter/List); see "List" below. See "Porting roadmap" below.
The naming scheme is fully user-editable from the app (the "Naming Scheme" button next
to the New Names list) — the default is `{show name} - {season number}x{episode
@@ -217,7 +223,13 @@ src-tauri/ Tauri app shell: exposes aurora-curator-core as commands
actual algorithm/format work),
`history.rs` (rename history/undo
log), `presets.rs` (up to 9 saved naming schemes) — all three
stored as JSON in the OS app-config directory — `cli.rs` (the
stored as JSON in the OS app-config directory — `list.rs` (a
single `export_text_list` command backing the List panel's Export
to File… button: opens a native "Save File" dialog and writes
whatever already-rendered, newline-joined text the frontend hands
it to a `.txt` file — the only new Tauri surface List needed, since
matching each file and rendering its line both reuse existing
commands, see below) — `cli.rs` (the
`-rename` command-line mode's orchestration: builds and executes a
rename plan against `aurora-curator-core::cli`'s parsed arguments,
with no Tauri `App`/window ever created for it — `main.rs` branches
@@ -254,7 +266,14 @@ src/ React + TypeScript UI (Vite). Faithful recreation of the
`pick_files`/`guess_episode`/`guess_movie`/`guess_release_info`
exactly as the Rename panel's own "Match" does, just applied to
a second, independently-loaded file list and rendered as
criteria instead of a rename preview.
criteria instead of a rename preview. `ListPanel.tsx` is the
fifth and last: load a set of files, edit a naming-scheme-style
expression (rendered per file via the same `render_expression`
command the Rename panel's live preview calls, fed by the same
local matching Filter uses), see a live "N of M lines rendered"
list, Copy List to the clipboard, or Export to File… via the one
new `export_text_list` command above — closing out the full
original panel set.
scripts/gen_icons.py Regenerates src-tauri/icons/ from the real logo mark
(`scripts/logo/icon-source.png`, cropped from the supplied
lockup) — replace that source image to change the look.
@@ -471,6 +490,35 @@ that season. The results list updates live with an "N of M files match" count, a
**Copy File Paths** writes every currently-matching file's full path, one per line, to the
clipboard.
## List
The List sidebar panel loads a batch of files (independent of whatever's loaded
elsewhere) and renders a naming-scheme-style expression against each one, so the result
can be copied or exported as a plain text list — a playlist, a batch-rename preview to
check by eye, a checklist for another tool, whatever the expression is written for.
It's the last of the six original sidebar panels (Rename/Episodes/Subtitles/SFV/Filter/
List) and, like Filter, adds no new local-matching logic — it reuses the exact same
`guess_episode`/`guess_movie`/`guess_release_info` calls "Match" and Filter already use.
The one genuinely new piece is a single Tauri command, `export_text_list`, which opens a
native Save dialog and writes whatever text the frontend hands it to a `.txt` file —
everything else (matching, and rendering each file's line) reuses commands that already
existed.
**Load Files…** loads a batch and scans it locally, the same way Filter does. The
**Format** field holds the expression rendered against each file — the exact same `{ }`
syntax the naming scheme uses, run through the same `render_expression` command the
Rename panel's live preview calls. `{name}`/`{ext}` always work (they're the file's own
name/extension); `{show name}`/`{season number}`/`{episode number}`, `{movie name}`/
`{year}`, and the release-tag fields (`{resolution}`/`{source}`/`{video codec}`/
`{audio codec}`/`{release group}`) fill in once the local scan recognizes a file — there's
no Fetch Data step here, List stays local-only like Filter. A file whose rendered line
comes out empty (e.g. an expression that only references a field this particular file
never matched) shows an "(empty)" placeholder rather than blocking the rest of the list,
and the results header tracks "N of M lines rendered" live as the expression changes.
**Copy List** copies every line, in file order, newline-joined, to the clipboard; **Export
to File…** opens a native Save dialog (defaulted to `list.txt`) and writes the same text
to disk.
## Porting roadmap (not yet done)
Roughly in priority order — each references the original FileBot source file it's
@@ -574,10 +622,13 @@ ported from, for anyone picking this up:
the Episodes panel (series search + season browse with a Copy list export, no
credentials of its own, see "Episodes" above), the SFV panel (compute/verify
CRC32/MD5/SHA1 checksums, read/write `.sfv`/`.md5`/`.sha1` sidecar files, entirely
local with no credentials at all, see "SFV" above), and the Filter panel (extension/
local with no credentials at all, see "SFV" above), the Filter panel (extension/
kind/filename/season narrowing over a locally-scanned batch, no new Rust/Tauri
surface at all, see "Filter" above) — the first four of the other five sidebar
panels to become real screens. The remaining one (List) is still a stub screen.
surface at all, see "Filter" above), and the List panel (a naming-scheme-style
expression rendered per file via the same `render_expression` engine, with a Copy
List clipboard export and an Export to File… `.txt` writer behind one new
`export_text_list` command, see "List" above) — **all six of the original sidebar
panels are now real screens**, closing out the panel set FileBot itself shipped.
Align Up/Down is button-based
(swaps the selected file with its neighbor), not the original's
drag-and-drop-within-a-list interaction.