CSFD integration
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user