2026-04-09 18:04:37 +02:00
|
|
|
# Tagger
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
Desktopová aplikace pro správu a organizaci souborů pomocí hierarchických tagů.
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
## Hlavní funkce
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
- 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)
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
## Rychlý start
|
2025-12-23 11:28:05 +01:00
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Instalace závislostí
|
|
|
|
|
poetry install
|
|
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
# Spuštění
|
2025-12-23 11:28:05 +01:00
|
|
|
poetry run python Tagger.py
|
|
|
|
|
```
|
|
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
## Klávesové zkratky
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
| 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 |
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
## Architektura
|
2025-12-23 11:28:05 +01:00
|
|
|
|
|
|
|
|
```
|
|
|
|
|
┌─────────────────────────────────┐
|
2026-04-09 18:04:37 +02:00
|
|
|
│ Presentation (PySide6/Qt6) │ src/ui/gui.py
|
2025-12-23 11:28:05 +01:00
|
|
|
├─────────────────────────────────┤
|
2026-04-09 18:04:37 +02:00
|
|
|
│ Business Logic │ src/core/ (bez UI importů)
|
2025-12-23 11:28:05 +01:00
|
|
|
├─────────────────────────────────┤
|
2026-04-09 18:04:37 +02:00
|
|
|
│ Data Layer │ File, Tag, TagManager, FileManager
|
2025-12-23 11:28:05 +01:00
|
|
|
├─────────────────────────────────┤
|
2026-04-09 18:04:37 +02:00
|
|
|
│ Persistence │ JSON .!tag soubory
|
2025-12-23 11:28:05 +01:00
|
|
|
└─────────────────────────────────┘
|
|
|
|
|
```
|
|
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
## Struktura projektu
|
2025-12-23 11:28:05 +01:00
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Tagger/
|
2026-04-09 18:04:37 +02:00
|
|
|
├── Tagger.py # Entry point
|
2025-12-23 11:28:05 +01:00
|
|
|
├── src/
|
2026-04-09 18:04:37 +02:00
|
|
|
│ ├── core/ # Business logika (žádné UI importy!)
|
2025-12-23 11:28:05 +01:00
|
|
|
│ │ ├── tag.py
|
2026-04-09 18:04:37 +02:00
|
|
|
│ │ ├── file.py
|
2025-12-23 11:28:05 +01:00
|
|
|
│ │ ├── file_manager.py
|
2026-04-09 18:04:37 +02:00
|
|
|
│ │ ├── tag_manager.py
|
|
|
|
|
│ │ ├── config.py
|
|
|
|
|
│ │ ├── csfd.py
|
|
|
|
|
│ │ ├── hardlink_manager.py
|
|
|
|
|
│ │ └── media_utils.py
|
2025-12-23 11:28:05 +01:00
|
|
|
│ └── ui/
|
2026-04-09 18:04:37 +02:00
|
|
|
│ └── gui.py # Qt6 GUI
|
|
|
|
|
└── tests/ # 274 testů
|
2025-12-23 11:28:05 +01:00
|
|
|
```
|
|
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
## Testování
|
2025-12-23 11:28:05 +01:00
|
|
|
|
|
|
|
|
```bash
|
2026-04-09 18:04:37 +02:00
|
|
|
poetry run pytest tests/ -q
|
2025-12-23 11:28:05 +01:00
|
|
|
```
|
|
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
## Technologie
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
- **Python:** 3.14+
|
|
|
|
|
- **GUI:** PySide6/Qt6
|
|
|
|
|
- **Dependencies:** requests, beautifulsoup4, loguru, python-dotenv
|
2025-12-23 11:28:05 +01:00
|
|
|
- **Package manager:** Poetry
|
|
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
## Metriky
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
- **Testy:** 274 (100% core coverage)
|
|
|
|
|
- **Verze:** 1.1.0
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
## Design Decisions
|
2025-12-23 11:28:05 +01:00
|
|
|
|
|
|
|
|
### Proč JSON místo databáze?
|
2026-04-09 18:04:37 +02:00
|
|
|
- Jednoduchý backup (copy složky)
|
|
|
|
|
- Git-friendly (plain text, diffovatelné)
|
|
|
|
|
- Metadata zůstanou při přesunu souboru (sidecar)
|
|
|
|
|
- Portable — žádné DB závislosti
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
### 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
|
2025-12-23 11:28:05 +01:00
|
|
|
|
2026-04-09 18:04:37 +02:00
|
|
|
## License
|
2025-12-23 11:28:05 +01:00
|
|
|
|
|
|
|
|
MIT License
|