Files
Tagger/CHANGELOG.md
2026-01-24 07:50:19 +01:00

134 lines
4.9 KiB
Markdown

# 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.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