4.9 KiB
4.9 KiB
Changelog
All notable changes to the Tagger project are documented in this file.
[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