Rewrite Curator in Rust with an egui GUI
This commit is contained in:
+18
-18
@@ -39,27 +39,27 @@ Curator manages a personal movie library based on two folders:
|
||||
|
||||
## Current state
|
||||
|
||||
- Inherited from Tagger: `Tag`, `TagManager`, `File` (sidecar metadata),
|
||||
`FileManager` (folder scan, filtering, ignore patterns), 3-level config,
|
||||
`HardlinkManager` (create/sync/cleanup), pytest suite.
|
||||
- Rename Tagger → Curator done across code, spec, config filenames
|
||||
(`.Curator.!gtag` / `.Curator.!ftag`) and tests.
|
||||
- **PySide6 GUI** (`src/ui/qt_app.py`) reframed around the Filmotéka workflow is
|
||||
the entry point; the old tkinter `src/ui/gui.py` is retained for reference.
|
||||
- **Pool + Filmotéka wired up:** global config holds `pool_dir` / `filmoteka_dir`;
|
||||
`FileManager` creates `Filmy`/`Seriály`, imports movies (copy → `Title.ext`),
|
||||
loads the pool, and the GUI generates the Filmotéka tree via `HardlinkManager`.
|
||||
- `File` carries `title` + `csfd_link`. **Pool metadata lives in a unified index**
|
||||
(`<pool>/.Curator.!index`, see `pool_index.py`); `File` writes there when an
|
||||
index is injected. Without an index a `File` is an in-memory object only — the
|
||||
old per-file `.!tag` sidecars and the per-folder `.!ftag` config have been
|
||||
removed.
|
||||
- **Rust rewrite (branch `rust`).** Curator is a Rust application: the core
|
||||
(`src/core/`) is a library with the same behaviour and on-disk formats as the
|
||||
Python version (pool index v2, tag schema, naming, global config keys), and
|
||||
the GUI is egui/eframe (`src/ui/`). An existing pool opens unchanged. The
|
||||
Python sources live on in the history of `devel` as the reference.
|
||||
- `FileManager` is the service layer; `File` is a view on one media entry of an
|
||||
identity-keyed movie record in `<pool>/.Curator.!index`; series are scanned
|
||||
live from disk.
|
||||
- The standalone `tipy-dne` binary replaces `scripts/tipy_dne.py` (which had
|
||||
stopped finding movies after the index moved to v2). The one-off Python
|
||||
migration scripts for old ČSFD tag formats were not ported.
|
||||
- Global config moved from `.Curator.!gtag` next to the script to the platform
|
||||
config directory (`CURATOR_CONFIG` overrides it); an old `.Curator.!gtag` in
|
||||
the working directory is picked up on first run.
|
||||
|
||||
### GUI decision
|
||||
|
||||
The GUI was **reframed around the Filmotéka** (not kept as a generic tagger) and
|
||||
**rewritten in PySide6**: Pool/Filmotéka setup, Import movie, tag-filter sidebar,
|
||||
movie table, and one-click Filmotéka generation.
|
||||
The GUI is **egui** (eframe): pure Rust, one static binary, straightforward
|
||||
Windows builds. It mirrors the PySide6 layout — menu, tag-filter sidebar, movie
|
||||
and series table, detail panel, status bar — and every dialog of the Python
|
||||
version. Long operations run in background tasks with progress and cancel.
|
||||
|
||||
## Design decisions
|
||||
|
||||
|
||||
Reference in New Issue
Block a user