# Tagger Desktopová aplikace pro správu a organizaci souborů pomocí hierarchických tagů. ## Hlavní funkce - Rekurzivní procházení složek - Hierarchické tagy (kategorie/název) - Filtrování podle tagů (AND / OR / NOT logika) a textu - Metadata v JSON souborech (.!tag) — cestují se souborem - Integrace s CSFD.cz (automatické načítání žánrů, roku, země) - Tvorba hardlink struktury adresářů dle tagů - Automatická detekce rozlišení videí (ffprobe) ## Rychlý start ```bash # Instalace závislostí poetry install # Spuštění poetry run python Tagger.py ``` ## Klávesové zkratky | Zkratka | Akce | |---------|------| | `Ctrl+O` | Otevřít složku | | `Ctrl+T` | Přiřadit tagy | | `Ctrl+D` | Nastavit datum | | `Ctrl+W` | Zavřít složku | | `F5` | Refresh | | `Del` | Odebrat z indexu | ## Architektura ``` ┌─────────────────────────────────┐ │ Presentation (PySide6/Qt6) │ src/ui/gui.py ├─────────────────────────────────┤ │ Business Logic │ src/core/ (bez UI importů) ├─────────────────────────────────┤ │ Data Layer │ File, Tag, TagManager, FileManager ├─────────────────────────────────┤ │ Persistence │ JSON .!tag soubory └─────────────────────────────────┘ ``` ## Struktura projektu ``` Tagger/ ├── Tagger.py # Entry point ├── src/ │ ├── core/ # Business logika (žádné UI importy!) │ │ ├── tag.py │ │ ├── file.py │ │ ├── file_manager.py │ │ ├── tag_manager.py │ │ ├── config.py │ │ ├── csfd.py │ │ ├── hardlink_manager.py │ │ └── media_utils.py │ └── ui/ │ └── gui.py # Qt6 GUI └── tests/ # 274 testů ``` ## Testování ```bash poetry run pytest tests/ -q ``` ## Technologie - **Python:** 3.14+ - **GUI:** PySide6/Qt6 - **Dependencies:** requests, beautifulsoup4, loguru, python-dotenv - **Package manager:** Poetry ## Metriky - **Testy:** 274 (100% core coverage) - **Verze:** 1.1.0 ## Design Decisions ### Proč JSON místo databáze? - Jednoduchý backup (copy složky) - Git-friendly (plain text, diffovatelné) - Metadata zůstanou při přesunu souboru (sidecar) - Portable — žádné DB závislosti ### Proč sidecar soubory (.!tag)? - Metadata cestují se souborem při přesunu/kopírování - Čitelné i bez aplikace - Každý soubor je nezávislý — žádný single point of failure ## License MIT License