GUI rework to Qt6

This commit is contained in:
2026-01-24 07:50:19 +01:00
parent 47b39aadfe
commit 2bcd5b1f4b
16 changed files with 1613 additions and 1870 deletions

View File

@@ -1,68 +1,133 @@
# Changelog
Všechny významné změny v projektu Tagger jsou dokumentovány v tomto souboru.
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
### Přidáno
- **Hardlink struktura** - Nová funkcionalita pro vytváření adresářové struktury pomocí hardlinků
- `HardlinkManager` třída v `src/core/hardlink_manager.py`
- Vytváření hardlinků podle tagů souborů (např. `output/žánr/Komedie/film.mkv`)
- Synchronizace struktury - detekce a odstranění zastaralých hardlinků při změně tagů
- Podpora filtrování podle kategorií
- Preview režim (dry run)
- **Menu položky pro hardlinky**
- "Nastavit hardlink složku..." - konfigurace výstupní složky a kategorií (ukládá se do `.tagger.json`)
- "Aktualizovat hardlink strukturu" - rychlá synchronizace s uloženým nastavením
- "Vytvořit hardlink strukturu..." - ruční výběr složky a kategorií
- **Tříúrovňový konfigurační systém**
- Globální config (`config.json`) - nastavení aplikace (geometrie okna, poslední složka)
- Složkový config (`.tagger.json`) - nastavení projektu (ignore patterns, hardlink nastavení)
- Souborové tagy (`.filename.!tag`) - metadata jednotlivých souborů
- **Výchozí tagy**
- Kategorie "Hodnocení" s hvězdičkami (1-5 hvězd)
- Kategorie "Barva" s barevnými štítky
- Exkluzivní výběr v kategorii Hodnocení (pouze jeden tag)
- **Testy**
- 189 testů pokrývajících všechny moduly
- Testy pro hardlink manager včetně synchronizace
- **Poetry** - Správa závislostí pomocí Poetry
### 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
### Změněno
- Modernizované GUI inspirované qBittorrentem
- Ukládání geometrie okna do globálního configu
- Ignore patterns se ukládají do složkového configu
### Changed
- Modernized GUI inspired by qBittorrent
- Window geometry saved to global config
- Ignore patterns saved to folder config
## [1.0.2] - 2025-10-03
### Přidáno
- **Moderní GUI** - Přepracované rozhraní ve stylu qBittorrent
- Postranní panel s kategoriemi a tagy
- Tabulka souborů s řazením podle sloupců
- Kontextová menu pro soubory a tagy
- Vyhledávací pole
- Stavový řádek s počtem souborů a velikostí výběru
- **Hromadné přiřazování tagů** - Dialog pro přiřazení tagů více souborům najednou
- Třístav checkboxy (zaškrtnuto/nezaškrtnuto/smíšené)
- Barevné rozlišení kategorií
- **Detekce rozlišení videa** - Automatic detekce pomocí ffprobe
- **Klávesové zkratky**
- Ctrl+O - Otevřít složku
- Ctrl+T - Přiřadit tagy
- Ctrl+D - Nastavit datum
- F5 - Obnovit
- Delete - Odstranit z indexu
### 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
### Změněno
- Refaktorizace struktury projektu do modulů (`src/core/`, `src/ui/`)
- Použití dataclass pro Tag a File objekty
### Changed
- Project structure refactored into modules (`src/core/`, `src/ui/`)
- Using dataclass for Tag and File objects
## [1.0.0] - 2025-09-03
### Přidáno
- Základní funkcionalita tagování souborů
- Ukládání tagů do skrytých souborů (`.filename.!tag`)
- Správa kategorií a tagů
- Rekurzivní skenování složek
- Ignore patterns pro filtrování souborů
- Základní GUI v Tkinter
### 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