6.8 KiB
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+Yvrá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
.!tagafter first fetch, no re-fetching on reopenCSFDMovie.to_dict()/from_dict()for serializationFile.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,
.!tagfiles without a matching media file are reportedFileManager.on_orphaned_tagscallback for UI notificationFileManager.find_orphaned_tags()for manual scan
- OR/NOT tag filtering - Extended
filter_files_by_tags()with new parametersany_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
- Status bar shows live progress:
- 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.pynow 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.pyif toml is not available - DEBUG mode support from
.env(adds " DEV" suffix) - APP_NAME includes version: "Tagger v1.0.5 DEV"
- Fallback to
- UI utilities module -
src/ui/utils.py- Moved
load_icon()function from core to UI layer
- Moved
Changed
- FileManager refactoring
- New methods
assign_tag_to_files()andremove_tag_from_files() - Old methods kept as deprecated aliases
Tagimport at module level (eliminates duplicate imports)
- New methods
- Dead code removal
- Deleted unused
ListManagermodule - Removed legacy functions
load_config()andsave_config()from config.py
- Deleted unused
- Missing import fix - Added
import subprocessto 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 URLsearch_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
HardlinkManagerclass insrc/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
- "Set hardlink folder..." - configure output folder and categories (saved to
- 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
- Global config (
- 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