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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user