Files
Tagger/CHANGELOG.md

6.8 KiB

Changelog

All notable changes to the Tagger project are documented in this file.

[1.2.0] - 2026-04-09

Added

  • Undo/redo - Ctrl+Z / Ctrl+Y vrátí/zopakuje tag operace (assign, remove, rename, merge)
    • Zásobník 50 kroků, čistí se při zavření složky
    • Edit menu zobrazuje popis poslední operace
    • Pokrývá: přiřazení tagu, odebrání tagu, přejmenování tagu/kategorie, sloučení tagu/kategorie
  • CSFD cache - Movie data cached in .!tag after first fetch, no re-fetching on reopen
    • CSFDMovie.to_dict() / from_dict() for serialization
    • File.get_cached_movie() - returns cached data without network access
    • Cache versioning (CSFD_CACHE_VERSION) for future schema invalidation
    • Cache invalidated automatically when CSFD URL changes
  • Orphaned sidecar detection - On folder scan, .!tag files without a matching media file are reported
    • FileManager.on_orphaned_tags callback for UI notification
    • FileManager.find_orphaned_tags() for manual scan
  • OR/NOT tag filtering - Extended filter_files_by_tags() with new parameters
    • any_of - file must have at least one of these tags (OR)
    • must_not - file must not have any of these tags (NOT)
    • Fully backward compatible
  • ffprobe threading - Video resolution detection now runs in background (VideoResolutionWorker)
    • Status bar shows live progress: Zjišťuji rozlišení (3/12)…
    • Menu action disabled during processing
  • Export to CSV - Soubor → "Exportovat do CSV..."
    • UTF-8 BOM encoding (Excel compatible)
    • Columns: filename, path, date, tags, CSFD URL, size
  • Drag & drop - Drag folder or file onto the app window to open it

Changed

  • Global config location - Moved from app directory to ~/.config/Tagger/
    • Automatic one-time migration from old location
    • Fixes crash on read-only PyInstaller build directories
  • Python version - Bumped to 3.14+

Dependencies

  • Removed: Pillow (unused)
  • Moved: python-dotenv from dev to runtime dependencies

Tests

  • 274 tests (all passing)

[1.1.0] - 2026-01-23

Changed

  • GUI rewrite to PySide6/Qt6 - Complete UI rewrite from Tkinter to Qt
    • Modern QMainWindow with menu bar, toolbar, and status bar
    • QTreeWidget for tag sidebar with category colors
    • QTableWidget for file list with sorting and filtering
    • QSplitter for resizable sidebar
    • Native Qt dialogs (QFileDialog, QInputDialog, QMessageBox)
    • Keyboard shortcuts using QShortcut
    • Window geometry persistence
  • UI utilities updated - src/ui/utils.py now uses Qt (QIcon, QPixmap)
  • Python version restricted - Requires Python >=3.13,<3.15 for PySide6 compatibility

Dependencies

  • Added PySide6 (>=6.10.1)
  • Removed Tkinter dependency

[1.0.5] - 2026-01-23

Added

  • Tag and category renaming - New context menu functionality
    • Right-click on tag → "Rename tag"
    • Automatic update of all files with the tag
    • Support for renaming entire categories
  • Tag merging - When renaming to an existing tag
    • Confirmation dialog for merge
    • Merge removes source tag and updates files
  • Tag.from_string() - New class method for parsing tags
    • Parses "category/name" format
    • Eliminates duplicate code across the project
  • Dynamic version loading - Version is loaded from pyproject.toml
    • Fallback to _version.py if toml is not available
    • DEBUG mode support from .env (adds " DEV" suffix)
    • APP_NAME includes version: "Tagger v1.0.5 DEV"
  • UI utilities module - src/ui/utils.py
    • Moved load_icon() function from core to UI layer

Changed

  • FileManager refactoring
    • New methods assign_tag_to_files() and remove_tag_from_files()
    • Old methods kept as deprecated aliases
    • Tag import at module level (eliminates duplicate imports)
  • Dead code removal
    • Deleted unused ListManager module
    • Removed legacy functions load_config() and save_config() from config.py
  • Missing import fix - Added import subprocess to media_utils.py

Tests

  • 274 tests (all passing)
  • New tests for Tag.from_string() (6 tests)
  • New tests for rename/merge tags (24 tests)

[1.0.4] - 2025-12-29

Added

  • CSFD.cz integration - Fetching movie information
    • fetch_movie() - load movie details from URL
    • search_movies() - search for movies
    • Automatic tag assignment (genres, year, country, director)
  • Close folder - Safe folder closing with metadata saving

Tests

  • 249 tests covering CSFD integration

[1.0.3] - 2025-12-28

Added

  • Hardlink structure - New functionality for creating directory structure using hardlinks
    • HardlinkManager class in src/core/hardlink_manager.py
    • Creating hardlinks based on file tags (e.g., output/genre/Comedy/movie.mkv)
    • Structure synchronization - detection and removal of outdated hardlinks when tags change
    • Support for filtering by categories
    • Preview mode (dry run)
  • Menu items for hardlinks
    • "Set hardlink folder..." - configure output folder and categories (saved to .tagger.json)
    • "Update hardlink structure" - quick sync with saved settings
    • "Create hardlink structure..." - manual folder and category selection
  • Three-level configuration system
    • Global config (config.json) - application settings (window geometry, last folder)
    • Folder config (.tagger.json) - project settings (ignore patterns, hardlink settings)
    • File tags (.filename.!tag) - individual file metadata
  • Default tags
    • "Rating" category with stars (1-5 stars)
    • "Color" category with color labels
    • Exclusive selection in Rating category (only one tag)
  • Tests
    • 189 tests covering all modules
    • Tests for hardlink manager including synchronization
  • Poetry - Dependency management using Poetry

Changed

  • Modernized GUI inspired by qBittorrent
  • Window geometry saved to global config
  • Ignore patterns saved to folder config

[1.0.2] - 2025-10-03

Added

  • Modern GUI - Redesigned interface in qBittorrent style
    • Side panel with categories and tags
    • File table with column sorting
    • Context menus for files and tags
    • Search field
    • Status bar with file count and selection size
  • Bulk tag assignment - Dialog for assigning tags to multiple files at once
    • Tri-state checkboxes (checked/unchecked/mixed)
    • Color-coded categories
  • Video resolution detection - Automatic detection using ffprobe
  • Keyboard shortcuts
    • Ctrl+O - Open folder
    • Ctrl+T - Assign tags
    • Ctrl+D - Set date
    • F5 - Refresh
    • Delete - Remove from index

Changed

  • Project structure refactored into modules (src/core/, src/ui/)
  • Using dataclass for Tag and File objects

[1.0.0] - 2025-09-03

Added

  • Basic file tagging functionality
  • Storing tags in hidden files (.filename.!tag)
  • Category and tag management
  • Recursive folder scanning
  • Ignore patterns for file filtering
  • Basic GUI in Tkinter