Query Arte Player API before each download to determine available stream
versions. Select lang tag (VOSTFR > VO, FRENCH if audio is fr). Embed
French subtitles as default MKV track when VOSTFR. All output now .mkv.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- DB_PATH → data/arte_dl.db (mappé sur /mnt/user/appdata/arte-dl)
- mkdir data/ au démarrage dans downloader.py et arte_api.py
- asyncio.Lock sur get_all_concerts() : une seule scrape à la fois,
les requêtes concurrentes attendent le résultat au lieu de relancer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Le cache en mémoire (6h TTL) est désormais sauvegardé dans concerts_cache.
Au redémarrage, si le cache SQLite est récent, aucune requête réseau n'est faite.
Le bouton Rafraîchir vide aussi le cache SQLite pour forcer un re-scrape.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Bouton ⬇ sur chaque pill de catégorie pour activer/désactiver l'auto-DL
- Souscriptions sauvegardées en SQLite (table auto_dl_categories)
- Boucle background toutes les AUTO_DL_INTERVAL secondes (défaut 1h)
- Déduplication via already_enqueued() (évite re-queue si déjà queued/done)
- POST /api/auto-dl/check pour déclencher un check immédiat
- GET/POST/DELETE /api/auto-dl/{category} pour gérer les souscriptions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- tmdb.py : recherche TMDB par title+subtitle, matching fuzzy,
cache SQLite 30 jours (table tmdb_cache dans arte_dl.db)
- arte_api.py : enrichissement concurrent (5 workers) après résolution
des IDs ; ajoute tmdb_id, tmdb_poster, tmdb_backdrop au concert
- app.js : backdrop TMDB utilisé comme thumbnail de carte quand dispo ;
subtitle affiché sous le titre de carte ; poster dans la modal ;
lien direct vers la fiche TMDB
- docker-compose.yml : passage de TMDB_API_KEY au container
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- arte_api.py : GENRE_PAGES devient une liste de (nom, url), chaque
concert reçoit un champ "categories" avec ses genres d'appartenance
- main.py : endpoint /api/categories + param ?category= sur /api/concerts
- index.html : barre de pills catégories (Tout + 10 genres)
- style.css : styles .cat-bar / .cat-pill avec pill active en or
- app.js : chargement dynamique des pills, filtre catégorie dans le state
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remplace les pages arte-concert par les pages /fr/p/ qui couvrent
toutes les catégories demandées. Passe de 97 à 208 concerts indexés.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Quand la recherche ne trouve rien en local (ex: rock-pop chargé
côté client), interroge l'API search d'Arte, récupère les IDs
manquants et les résout via le player API en parallèle.
Permet de trouver n'importe quel concert présent sur arte-concert.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Abandon de l'approche yt-dlp playlist (URL non supportée).
Scrape les pages genre Arte Concert en RSC pour extraire les
programme IDs, puis fetch les métadonnées (titre, thumbnail,
durée, expiry) via l'API player v2 en parallèle (10 workers).
96 concerts disponibles.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>