Files
Curator/CHANGELOG.md
T

4.8 KiB

Changelog

Document all notable changes to the project, grouped by version and release date.

Format

Each version entry uses these sections (include only those that apply):

  • Added — new features
  • Changed — changes to existing functionality
  • Fixed — bug fixes
  • Removed — removed features
  • Dependencies — added, updated, or removed dependencies

Rules

  • Follow semantic versioning: MAJOR.MINOR.PATCH
  • Newest version goes at the top
  • Always update this file before bumping the version in pyproject.toml
  • Document changes as they are made, not all at once at release time

Unreleased

Added

  • Fork of the former Tagger project as Curator, a movie-library manager.
  • Pool concept (single source of truth) with Filmy / Seriály folders and a configurable Filmotéka output folder, stored in the global config.
  • "Import movie" flow: pick a video, enter Title + ČSFD link, the file is copied into pool/Filmy as Title.ext (non-destructive) and indexed.
  • File now stores title and csfd_link.
  • New PySide6 GUI reframed around the Filmotéka workflow (pool setup, import, tag filter sidebar, movie table, one-click Filmotéka generation), replacing the tkinter GUI as the entry point.
  • Seriály copy-as-is mirror: pool/Seriály is cloned 1:1 into the Filmotéka output as hardlinks (HardlinkManager.mirror_as_is), generated alongside the movie tree.
  • Unified pool metadata index (pool_index.py): the whole pool's metadata lives in a single <pool>/.Curator.!index JSON keyed by pool-relative path. File reads/writes the index when one is injected and otherwise keeps using per-file .!tag sidecars; FileManager uses the index for the pool.
  • Configurable copy-as-is folders: copyasis_folders in the global config (editable from the GUI) lists pool subfolders mirrored 1:1 during generation; Seriály is the default. Generalizes the previously hardcoded Seriály mirror.
  • Project README.md (overview, concepts, workflow, run/build instructions).
  • ČSFD scraping (csfd.py, ported from the Tagger devel branch): fetches movie data from a ČSFD link (JSON-LD + HTML parsing). File.apply_csfd_tags assigns Žánr / Rok / Země původu tags and caches the fetched data in the metadata. The GUI auto-fetches on import when a link is given and offers "Načíst tagy z ČSFD" for selected movies.
  • App startup injects truststore so HTTPS uses the OS certificate store — ČSFD fetching works behind corporate SSL inspection (where certifi's bundle lacks the proxy root CA).

Fixed

  • media_utils.add_video_resolution_tag referenced subprocess without importing it.
  • ČSFD parsing updated for the current site HTML: year is read from JSON-LD dateCreated, and the origin line (now bullet-separated, no commas) is tokenized so country / year / duration are extracted correctly.
  • ČSFD anti-bot wall (Anubis): ČSFD now serves a proof-of-work challenge page instead of the movie, so fetches returned a film with no genres/year ("načteno 0 tagů"). csfd.py now detects the Anubis challenge, solves the SHA-256 proof-of-work the way the bundled worker JS does, and replays the request through a requests.Session (reused across a batch so only the first fetch pays the PoW cost). Žánr / Rok / Země původu tags load again.
  • "Assign tags" dialog crashed on PySide6/Qt6 — Qt.ItemIsTristate was renamed to Qt.ItemIsAutoTristate.

Changed

  • ČSFD country tag category renamed Země → Země původu. Added scripts/migrate_tag_category.py to rewrite the category in an existing pool index (backs up .Curator.!index first); run against the live pool.
  • Filmotéka tree now also builds the Země původu branch — it was missing from FILMOTEKA_CATEGORIES, so the country level was never generated. Tree categories are now Rok / Žánr / Země původu / Hodnocení.
  • Movie table trimmed to Název / Štítky / Velikost — the Datum and ČSFD columns were dropped (a ČSFD link is a prerequisite, so its indicator was always the same).
  • All references to "Tagger" renamed to "Curator" (code, spec, config filenames .Curator.!gtag / .Curator.!ftag, tests).
  • requires-python narrowed to >=3.14,<3.15 (PySide6 compatibility).

Removed

  • Legacy Tagger predefined tags: the always-available Hodnocení ( rating) and Barva (color) categories in TagManager, and the automatic Stav/Nové tag assigned to every newly imported file. DEFAULT_TAGS is now empty; the pool is driven by ČSFD-derived tags (Žánr / Rok / Země původu).

Dependencies

  • Added pyside6 (GUI), requests + beautifulsoup4 (ČSFD scraping), truststore (OS cert store for HTTPS). Declared python-dotenv, pillow, loguru (already imported by the inherited code).