CSFD integration

This commit is contained in:
2025-12-30 07:54:30 +01:00
parent 028c6606e0
commit 47b39aadfe
20 changed files with 2597 additions and 129 deletions

View File

@@ -3,7 +3,7 @@
> **DŮLEŽITÉ:** Tento soubor obsahuje VŠE co potřebuji vědět o projektu.
> Pokud pracuji na Tagger, VŽDY nejdříve přečtu tento soubor!
**Poslední aktualizace:** 2025-12-28
**Poslední aktualizace:** 2025-12-29
**Verze:** 1.0.4
**Status:** Stable, v aktivním vývoji
@@ -17,11 +17,13 @@
- Rekurzivní procházení složek
- Hierarchické tagy (kategorie/název)
- Filtrování podle tagů
- Přejmenování tagů a kategorií (včetně aktualizace všech souborů)
- Metadata uložená v JSON souborech
- Automatická detekce rozlišení videí (ffprobe)
- Moderní GUI (qBittorrent-style)
- Hardlink struktura - vytváření adresářové struktury pomocí hardlinků podle tagů
- Tříúrovňový konfigurační systém (globální, složkový, souborový)
- CSFD.cz integrace - získávání informací o filmech z české filmové databáze
---
@@ -38,31 +40,33 @@ Tagger/
├── src/
│ ├── core/ # Jádro aplikace (ŽÁDNÉ UI!)
│ │ ├── tag.py # Tag value object (immutable)
│ │ ├── tag.py # Tag value object (immutable, from_string parser)
│ │ ├── tag_manager.py # Správa tagů a kategorií
│ │ ├── file.py # File s metadaty
│ │ ├── file_manager.py # Správa souborů, filtrování
│ │ ├── config.py # Tříúrovňová konfigurace (global, folder, file)
│ │ ├── hardlink_manager.py # Správa hardlink struktury
│ │ ├── utils.py # list_files() - rekurzivní procházení
│ │ ├── media_utils.py # load_icon(), ffprobe
│ │ ├── constants.py # APP_NAME, VERSION, APP_VIEWPORT
│ │ └── list_manager.py # Třídění (málo používaný)
│ │ ├── media_utils.py # add_video_resolution_tag (ffprobe)
│ │ ├── csfd.py # CSFD.cz scraper (fetch_movie, search_movies)
│ │ └── constants.py # APP_NAME, VERSION, APP_VIEWPORT
│ │
│ └── ui/
── gui.py # Moderní qBittorrent-style GUI
── gui.py # Moderní qBittorrent-style GUI
│ └── utils.py # load_icon() - GUI utility pro ikony
├── tests/ # 189 testů, 100% core coverage
├── tests/ # 274 testů, 100% core coverage
│ ├── __init__.py
│ ├── conftest.py # Pytest fixtures
│ ├── test_tag.py # 13 testů
│ ├── test_tag_manager.py # 31 testů
│ ├── test_file.py # 22 testů
│ ├── test_file_manager.py # 40 testů
│ ├── test_config.py # 33 testů
│ ├── test_tag.py # 19 testů (včetně Tag.from_string)
│ ├── test_tag_manager.py # 55 testů (včetně rename/merge tagů/kategorií)
│ ├── test_file.py # 33 testů (včetně CSFD integrace)
│ ├── test_file_manager.py # 78 testů (close_folder, rename/merge v souborech)
│ ├── test_config.py # 31 testů
│ ├── test_hardlink_manager.py # 28 testů
│ ├── test_utils.py # 17 testů
── test_media_utils.py # 3 testy
── test_media_utils.py # 3 testy (load_icon v src/ui/utils.py)
│ └── test_csfd.py # 19 testů
├── src/resources/
│ └── images/32/ # Ikony (32x32 PNG)
@@ -232,7 +236,44 @@ class FileManager:
self.folder_config = {}
```
### 5. HardlinkManager (hardlink struktura)
### 5. CSFD Scraper (filmové informace)
```python
from src.core.csfd import fetch_movie, search_movies, CSFDMovie
# Načtení informací o filmu z URL
movie = fetch_movie("https://www.csfd.cz/film/9423-pane-vy-jste-vdova/")
print(movie.title) # „Pane, vy jste vdova!"
print(movie.year) # 1970
print(movie.rating) # 82
print(movie.genres) # ['Komedie', 'Sci-Fi']
print(movie.directors) # ['Václav Vorlíček']
print(movie.actors) # ['Iva Janžurová', ...]
# Vyhledávání filmů
results = search_movies("Pelíšky")
for m in results:
print(m.title, m.csfd_id)
```
**CSFDMovie atributy:**
- `title` - název filmu
- `url` - CSFD URL
- `year` - rok vydání
- `genres` - seznam žánrů
- `directors` - seznam režisérů
- `actors` - seznam herců
- `rating` - hodnocení v %
- `rating_count` - počet hodnocení
- `duration` - délka v minutách
- `country` - země původu
- `poster_url` - URL plakátu
- `plot` - popis děje
- `csfd_id` - ID filmu na CSFD
**Závislosti:** `requests`, `beautifulsoup4` (instalace: `poetry add requests beautifulsoup4`)
### 6. HardlinkManager (hardlink struktura)
```python
class HardlinkManager:
@@ -423,10 +464,10 @@ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## Metriky projektu
**Testy:** 189 (všechny ✅)
**Testy:** 274 (všechny ✅)
**Test coverage:** 100% core modulů
**Python verze:** 3.12+
**Dependencies:** Pillow (PIL)
**Dependencies:** Pillow (PIL), requests, beautifulsoup4
**Vývojové prostředí:** Poetry
**Performance:**
@@ -440,7 +481,13 @@ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
### Časté problémy
**1. "Cannot import ImageTk"**
**1. TreeView tagy se nezobrazují správně po načtení z CSFD**
```
# Opraveno: přidán update_idletasks() po refresh_sidebar()
# Pokud stále přetrvává, zkuste F5 nebo znovu otevřít složku
```
**2. "Cannot import ImageTk"**
```bash
# Řešení: Použij poetry environment
poetry run python Tagger.py
@@ -511,5 +558,5 @@ poetry run python Tagger.py
---
**Last updated:** 2025-12-28
**Last updated:** 2025-12-29
**Maintainer:** Claude Opus 4.5 + honza