Rewrite Curator in Rust with an egui GUI

This commit is contained in:
2026-10-17 11:28:17 +02:00
parent 364b515e3c
commit 65b5b74c9f
156 changed files with 24359 additions and 25795 deletions
+46 -1
View File
@@ -16,9 +16,54 @@ Each version entry uses these sections (include only those that apply):
- Follow semantic versioning: `MAJOR.MINOR.PATCH`
- Newest version goes at the top
- Always update this file before bumping the version in `pyproject.toml`
- Always update this file before bumping the version in `Cargo.toml`
- Document changes as they are made, not all at once at release time
## 2.0.0 — 2026-10-17
### Changed
- **Curator is now a Rust application.** The whole app — core and GUI — was
rewritten in Rust; the GUI is egui/eframe instead of PySide6. Behaviour and
on-disk formats are unchanged: the pool index (v2), tag schema, file naming,
versions/parts, series layout and miniDLNA output are the same, so an
existing pool opens as-is. Every menu action and dialog of the Python version
is there.
- Long operations (import, TMDb refresh, integrity scan, bulk renames, miniDLNA
generation) run in the background with a progress bar and a cancel button;
TMDb / ČSFD / Jellyfin lookups no longer freeze the window.
- **The global config moved** from `.Curator.!gtag` next to the script to the
platform config directory (`~/.config/curator/.Curator.!gtag` on Linux);
`CURATOR_CONFIG` overrides the location. An old `.Curator.!gtag` in the
working directory is read on first run, so the pool and output paths carry
over.
- **`tipy-dne` is a Rust binary** (built next to `curator`) replacing
`scripts/tipy_dne.py`; `scripts/tipy-dne.service` now runs it. Tips links are
named by the clean movie title, the same as the app's own tips folder.
- The status-bar paths are truncated (full path on hover) instead of
overlapping the status text.
### Fixed
- **"Tipy dne" from the systemd timer found no movies** since the pool index
moved to v2 — the script read index keys as file paths. `tipy-dne` reads the
media files of each movie record.
### Removed
- The Python sources, PyInstaller spec, `prebuild.py` and the committed
`dist/Curator` binary (a release build is `target/release/curator`).
- The one-off Python migration scripts for old ČSFD-era tag formats
(`migrate_tag_category`, `split_country_tags`, `strip_rating_bands`,
`strip_tag_categories`); they remain in the history of `devel`.
- The detailed per-function pages in `docs/modules/`; `cargo doc` generates the
API reference from the source.
### Dependencies
- Rust crates replace the Python stack: `eframe`/`egui`/`egui_extras` (GUI),
`rfd` (file dialogs), `reqwest` (HTTP, OS certificate store), `scraper` +
`ego-tree` (ČSFD), `sha2` (Anubis proof-of-work), `roxmltree` (NFO),
`serde`/`serde_json`, `regex`, `unicode-normalization`, `chrono`, `rand`,
`dirs`, `dotenvy`, `tracing`, `thiserror`/`anyhow`, `file-id`, `indexmap`;
dev: `tempfile`, `egui_kittest`.
## 1.14.0 — 2026-10-17
### Changed