# Changelog - Lycostorrent Toutes les modifications notables de ce projet sont documentées dans ce fichier. Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/), et ce projet adhère au [Semantic Versioning](https://semver.org/lang/fr/). --- ## [1.9.25] - 2025-02-05 ### 🏷️ Filtres par année avec pastilles #### Ajouté - **Pastilles cliquables** : `[2026]` `[2025]` `[2024]` `[2023]` `[≤2022]` `[Tous]` - **Sélection multiple** - Possibilité de sélectionner plusieurs années - **Filtrage instantané** - Pas besoin de recharger - **Option 100 résultats** dans le sélecteur #### Comportement - Clic sur une année → toggle on/off - Clic sur "Tous" → désactive les autres filtres - Par défaut : "Tous" actif - Compteur affiché : `(15/42)` #### Fichiers modifiés - `app/templates/latest.html` - Pastilles HTML + option 100 résultats - `app/static/js/latest.js` - Logique de filtrage multiple - `app/static/css/latest.css` - Styles pastilles (desktop + mobile) --- ## [1.9.24] - 2025-12-28 ### 🔌 Support chemin (path) pour client torrent #### Problème résolu - URLs avec reverse proxy comme `https://geco.useed.me/qbittorrent` ne fonctionnaient pas - Erreur `invalid literal for int()` quand le port était vide #### Ajouté - **Champ "Chemin"** dans l'admin pour les reverse proxy - **Port optionnel** - Laisser vide pour utiliser le port par défaut (80/443) - **Parsing intelligent** - Coller une URL complète la découpe automatiquement #### Rétrocompatibilité | Configuration | URL générée | |--------------|-------------| | `host: "192.168.1.100", port: 8080` | `http://192.168.1.100:8080` | | `host: "geco.useed.me", path: "/qbittorrent", use_ssl: true` | `https://geco.useed.me/qbittorrent` | | `host: "https://example.com/qbit"` | `https://example.com/qbit` | #### Fichiers modifiés - `app/plugins/torrent_clients/base.py` - TorrentClientConfig avec path - `app/plugins/torrent_clients/__init__.py` - Parsing URL intelligent - `app/main.py` - Gestion port vide + path - `app/templates/admin.html` - Nouveau champ chemin - `app/static/js/admin.js` - Support path dans formulaire --- ## [1.9.23] - 2025-12-28 ### 🗓️ Filtre par année dans Latest #### Ajouté - **Sélecteur d'année** avec options : Toutes, 2026, 2025, 2024, 2023, 2022 - **Filtrage instantané** - Changer l'année sans recharger les données - **Compteur intelligent** - Affiche "X nouveautés de 2025" #### Fonctionnement - Filtre basé sur l'année TMDb (`tmdb.year`) - Si pas d'info TMDb, le résultat reste affiché - Re-filtrage instantané quand on change l'année #### Fichiers modifiés - `app/templates/latest.html` - Sélecteur année - `app/static/js/latest.js` - Fonction displayResults avec filtre - `app/static/css/latest.css` - Style .no-results --- ## [1.9.22] - 2025-12-28 ### 📱 Refonte complète modal torrents Latest (mobile) #### Modifié - **Structure HTML** - Passage de `` à `
` (comme Discover) - **Boutons adaptatifs** - `flex: 1` avec `flex-wrap` pour s'adapter à l'écran - **Taille tactile** - Boutons correctement dimensionnés pour smartphone #### Structure torrent (identique à Discover) ```html
...
...
🔗 🧲 ...
``` --- ## [1.9.21] - 2025-12-28 ### 🔧 Tentative correction boutons modal (grille CSS) #### Modifié - Passage à CSS Grid pour les boutons d'action - `grid-template-columns: repeat(2, 1fr)` pour forcer 2x2 --- ## [1.9.20] - 2025-12-28 ### 🔧 Correction affichage infos torrents mobile #### Corrigé - **Cellules visibles** - `display: block` au lieu de `flex` pour les `
` - **Labels** - Affichage du `data-label` avec `: ` après --- ## [1.9.19] - 2025-12-28 ### 🔧 CSS harmonisé + bouton déconnexion #### Corrigé - **Bouton déconnexion** - Séparé des autres liens de navigation - **Taille fixe** - 50px sur tablette, 40px sur mobile - **Navigation** - Styles identiques sur Search, Latest et Discover --- ## [1.9.18] - 2025-12-28 ### 📱 Harmonisation CSS Latest avec Search/Discover #### Modifié - **Navigation** - Flex wrap responsive identique - **Catégories** - Grid auto-fit - **Cards** - Poster 200px, actions en ligne - **Modal** - Plein écran sur mobile --- ## [1.9.17] - 2025-12-27 ### 📱 CSS mobile amélioré pour Latest et Discover #### Latest - Menus mobile - **Catégories** - Grille 2 colonnes au lieu de scroll horizontal invisible - **Navigation** - Grille responsive au lieu de flex wrap cassé - **Boutons trackers** - Grille 2 colonnes, taille correcte - **Liste trackers** - Scrollable avec grille propre #### Discover - Torrents mobile - **Torrent item** - Layout en colonne avec actions en bas - **Nom du torrent** - Multi-ligne avec word-break - **Métadonnées** - Badges avec background distincts - **Boutons actions** - Flex avec bordure séparatrice, taille tactile --- ## [1.9.16] - 2025-12-27 ### 🎯 Filtrage par année et numéro de suite #### Ajouté - **Détection des suites** - Les numéros (2, 3, II, III...) dans le titre sont détectés - **Filtrage par année** - Tolérance de ±1 an, exclut les années trop différentes #### Exemples - "Zootopie 2" (2025) → exclut "Zootopia (2016)" car années différentes ET pas de "2" - "Sisu 2" → exclut "Sisu (2023)" car pas de numéro de suite --- ## [1.9.15] - 2025-12-27 ### 🔍 Filtrage multi-mots amélioré #### Corrigé - **Problème CrazySpirits** - "Thérapie de choc" retournait "Police Academy...choc" - **Nouvelle règle** : 2-3 mots significatifs → 2 matches minimum requis #### Règles de filtrage | Mots significatifs | Minimum requis | |-------------------|----------------| | 1 mot | 1 match | | 2-3 mots | 2 matches | | 4+ mots | 50% des mots | --- ## [1.9.14] - 2025-12-27 ### 🔍 Filtrage simplifié #### Modifié - Algorithme de filtrage simplifié : vérifie si au moins un mot significatif (4+ caractères) est présent dans le titre du torrent - Mots stop exclus : the, les, der, das, die, and, for, with, etc. --- ## [1.9.13] - 2025-12-27 ### 🔍 Recherche avec tous les titres #### Corrigé - **Recherche complète** - Essaie TOUTES les requêtes (titre original + titre français) au lieu de s'arrêter au premier résultat - Exemple : "Thérapie de choc" cherche maintenant avec "You Hurt My Feelings" ET "Thérapie de choc" --- ## [1.9.12] - 2025-12-27 ### 🔍 Filtrage avec mot-clé principal #### Ajouté - **Détection du mot principal** - Premier mot de 4+ caractères du titre - **Match flexible** - Accepte les torrents contenant le mot principal #### Exemple - "Sisu 2" → mot principal = "sisu" - Torrent "Sisu.2023.FRENCH" → match car contient "sisu" --- ## [1.9.11] - 2025-12-27 ### 🔍 Filtrage amélioré pour titres courts #### Corrigé - **Titres courts** (comme "Sisu") maintenant correctement filtrés - Seuil d'inclusion réduit à 3 caractères (au lieu de 5) - Seuil de similarité réduit à 0.7 (au lieu de 0.8) - Mots-clés courts : 1 match minimum suffit --- ## [1.9.10] - 2025-12-27 ### 🐛 Suppression du fallback #### Corrigé - **Plus de faux résultats** - Si aucun torrent pertinent n'est trouvé, affiche "Aucun torrent trouvé" au lieu de résultats non pertinents - Suppression du fallback qui retournait les 10 premiers résultats bruts --- ## [1.9.9] - 2025-12-27 ### 📥 Modal d'options dans Discover #### Ajouté - **Modal de téléchargement** - Même interface que Search/Latest - **Choix de la catégorie** - Liste des catégories qBittorrent - **Auto-remplissage du chemin** - Selon la catégorie sélectionnée - **Option pause** - Démarrer en pause - **Feedback visuel** - Bouton ⏳ → ✅/❌ --- ## [1.9.8] - 2025-12-27 ### ⚙️ Sélection des trackers pour Discover #### Ajouté - **Section Admin → Modules → "Trackers pour Découvrir"** - **Sélection visuelle** - Cocher/décocher chaque tracker - **Boutons tout/rien** - Sélectionner ou désélectionner tous - **Persistance** - Sauvegardé dans `/app/config/discover_trackers.json` #### API - `GET /api/admin/discover-trackers` - Récupère les trackers configurés - `POST /api/admin/discover-trackers` - Sauvegarde la sélection --- ## [1.9.7] - 2025-12-27 ### 🎬 Bande-annonce YouTube + Lien tracker #### Ajouté - **Bande-annonce YouTube** - Intégrée dans le modal de détails Discover - **Recherche multilingue** - Trailer FR d'abord, puis EN - **Priorité** - Trailer > Teaser - **Auto-stop** - La vidéo s'arrête à la fermeture du modal - **Bouton 🔗** - Lien vers la page du torrent sur le tracker --- ## [1.9.6] - 2025-12-27 ### 🔍 Filtrage plus strict #### Modifié - **Seuil de similarité** augmenté à 0.8 (au lieu de 0.7) - **Mots-clés** - Vérifie que 60% des mots-clés sont présents avec minimum 2 matches --- ## [1.9.5] - 2025-12-27 ### 🔍 Filtrage des résultats Discover #### Ajouté - **Fonction `_filter_relevant_torrents()`** - Filtre les résultats par titre - **Normalisation des titres** - Suppression accents, caractères spéciaux - **Comparaison intelligente** - Inclusion, similarité, mots-clés #### Corrigé - Les résultats non pertinents de CrazySpirits sont maintenant filtrés --- ## [1.9.4] - 2025-12-27 ### 🔍 Correction recherche Discover - Titres non-latins #### Corrigé - **Titres thaï/chinois/etc.** - Utilise le titre anglais original au lieu du titre non-latin - **Recherches successives** - Essaie original_title + year, puis original_title, puis title + year, puis title - **Détection caractères latins** - Fonction `_is_latin_text()` pour vérifier si le titre est utilisable #### Exemple - Film thaï "ปัง" → recherche avec "Bang 2025" (titre anglais) au lieu de "ปัง 2025" --- ## [1.9.3] - 2025-12-27 ### 🐛 Correction regroupement - Années entre parenthèses #### Corrigé - **Support des années entre parenthèses** - `(2016)` maintenant correctement reconnu - Les films comme `L'Age.De.Glace.5.(2016)` et `L'Age.De.Glace.4.(2012)` sont maintenant séparés #### Technique - Regex modifiée pour inclure `\(` et `\)` dans la détection d'année --- ## [1.9.2] - 2025-12-27 ### 🐛 Correction regroupement - Suites de films #### Corrigé - **Séparation par année** - Les films avec des années différentes ne sont plus groupés - Exemple : "Les Schtroumpfs 2 (2013)" et "Les Schtroumpfs (2011)" maintenant séparés #### Technique - Nouvelle fonction `_extract_base_title_and_year()` qui extrait titre ET année - Règle stricte : années différentes = pas de regroupement --- ## [1.9.1] - 2025-12-27 ### 🐛 Correction regroupement Latest #### Corrigé - **Regroupement plus strict** - Évite les faux positifs (ex: "The Empire Strikes Back" vs "Exists") - Seuil de similarité augmenté à 0.85 #### Technique - Nouvelle fonction `_extract_base_title()` qui extrait uniquement le titre avant les métadonnées - Double vérification : similarité du titre de base ET similarité globale --- ## [1.9.0] - 2025-12-27 ### 🌟 Page Découvrir + Système de Modules #### Page Découvrir - **Nouvelle page `/discover`** - Explore les nouveautés cinéma et TV depuis TMDb - **5 catégories disponibles** : - 🎬 Au cinéma (films actuellement en salle) - 🔥 Films populaires - 📺 Séries en cours de diffusion - ⭐ Séries populaires - 📅 Films à venir - **Affichage en grille** avec affiches, notes et années - **Modal de détails** avec synopsis, genres et note - **Recherche automatique de torrents** sur tous vos trackers - **Envoi direct au client torrent** depuis les résultats #### Système de Modules - **Nouvel onglet Admin → Modules** - Activer/désactiver les fonctionnalités - **3 modules disponibles** : - 🔍 Recherche (activé par défaut) - 🎬 Nouveautés (activé par défaut) - 🌟 Découvrir (désactivé par défaut) - **Navigation dynamique** - Le menu s'adapte aux modules activés - **Persistance** - Configuration sauvegardée en JSON #### Fichiers ajoutés - `templates/discover.html` - Page Découvrir - `static/css/discover.css` - Styles Découvrir - `static/js/discover.js` - Logique Découvrir - `static/js/nav.js` - Navigation dynamique #### API ajoutées - `GET /api/modules` - Récupère les modules activés - `GET /api/admin/modules` - Config modules pour admin - `POST /api/admin/modules` - Sauvegarde modules - `GET /api/discover/` - Liste TMDb par catégorie - `GET /api/discover/detail//` - Détails TMDb - `POST /api/discover/search-torrents` - Recherche torrents --- ## [1.8.0] - 2025-12-27 ### 🎨 Système de thèmes #### Ajouté - **8 thèmes disponibles** : - 🌙 Sombre (par défaut) - ☀️ Clair - 🌊 Océan (bleu-vert) - 💜 Violet - 🌿 Nature (vert) - 🌅 Sunset (orange) - 🤖 Cyberpunk (néon) - ❄️ Nord (palette nordique) - **Onglet Apparence dans Admin** - Sélection visuelle des thèmes avec aperçu - **Persistance du thème** - Sauvegardé en localStorage - **Chargement instantané** - Pas de flash blanc au chargement - **Transitions fluides** - Changement de thème animé #### Fichiers ajoutés - `static/css/themes.css` - Définition de tous les thèmes - `static/js/theme-loader.js` - Chargement du thème au démarrage #### Fichiers modifiés - `templates/admin.html` - Onglet Apparence - `templates/index.html` - Support des thèmes - `templates/latest.html` - Support des thèmes - `templates/login.html` - Support des thèmes - `static/css/admin.css` - Styles des cartes de thèmes - `static/js/admin.js` - Gestion des thèmes --- ## [1.7.1] - 2025-12-27 ### ⚡ Recherche parallèle #### Ajouté - **Recherche parallèle par tracker** - Chaque tracker est interrogé en parallèle - Avant : Jackett recevait 10 trackers et les faisait séquentiellement (~17s) - Après : 10 requêtes parallèles vers Jackett (~5s) #### Logs améliorés ``` 🔍 Recherche: 'fallout' | Catégorie: tv | Trackers: 10 ✅ jackett:sharewood-api: 45 résultats ✅ jackett:yggtorrent: 38 résultats ... 📦 Recherche parallèle: 220 résultats bruts (en 5.24s) ``` --- ## [1.7.0] - 2025-12-27 ### ⚡ Requêtes parallèles - Performance améliorée #### Ajouté - **Requêtes parallèles pour Latest** - Tous les trackers sont interrogés simultanément - **Requêtes parallèles Jackett/Prowlarr** - Les deux sources sont interrogées en même temps - **Logging du temps d'exécution** - Affiche le temps total des recherches #### Gain de performance | Avant (séquentiel) | Après (parallèle) | Gain | |-------------------|-------------------|------| | 4 trackers × 3s = 12s | max(3s) = 3s | **~75%** | | 6 trackers × 2s = 12s | max(2s) = 2s | **~85%** | #### Technique - Utilisation de `ThreadPoolExecutor` avec max 10 workers - Timeout de 60s par requête - Les erreurs d'un tracker n'affectent pas les autres #### Fichiers modifiés - `main.py` - Parallélisation de `/api/latest` - `indexer_manager.py` - Parallélisation Jackett + Prowlarr --- ## [1.6.1] - 2025-12-27 ### 📁 Gestion des catégories dans l'administration #### Ajouté - **Section "Catégories & Dossiers"** dans Admin → Client Torrent - **Catégories personnalisées** avec chemin de destination par défaut - **Auto-remplissage du chemin** quand on sélectionne une catégorie dans le modal - **Synchronisation avec qBittorrent** - crée les catégories directement dans le client - **API `/api/admin/torrent-client/categories`** - GET/POST pour gérer les catégories - **API `/api/admin/torrent-client/sync-categories`** - Synchronise avec le client #### Fonctionnalités admin - ➕ Ajouter une catégorie avec son chemin - ✏️ Modifier le nom et le chemin - 🗑️ Supprimer une catégorie - 🔄 Synchroniser avec qBittorrent (crée les catégories manquantes) - 💾 Sauvegarder la configuration #### Plugin qBittorrent v1.2.0 - `create_category(name, path)` - Crée une catégorie - `edit_category(name, path)` - Modifie le chemin d'une catégorie - `get_categories_with_paths()` - Récupère les catégories avec leurs chemins --- ## [1.6.0] - 2025-12-27 ### 📥 Modal d'options de téléchargement #### Ajouté - **Modal de sélection** quand on clique sur 📥 - **Choix de la catégorie** - Liste déroulante des catégories du client - **Chemin personnalisé** - Spécifier un dossier de destination - **Option "Démarrer en pause"** - Ajouter le torrent sans le lancer - **API `/api/torrent-client/categories`** - Récupère les catégories disponibles #### Interface du modal ``` ┌─────────────────────────────┐ │ 📥 Options de téléchargement │ ├─────────────────────────────┤ │ Catégorie: [Films ▼] │ │ Dossier: [/downloads/films] │ │ ☐ Démarrer en pause │ │ [Annuler] [Envoyer] │ └─────────────────────────────┘ ``` #### Support par client | Option | qBittorrent | Transmission | |--------|-------------|--------------| | Catégorie | ✅ | ❌ (non supporté) | | Dossier | ✅ | ✅ | | Pause | ✅ | ✅ | --- ## [1.5.2] - 2025-12-27 ### 🔧 Correction plugin qBittorrent #### Corrigé - **Téléchargement local des .torrent** - qBittorrent distant n'a pas accès aux URLs Jackett internes - **Détection des redirections magnet** - Gère les URLs qui redirigent vers un magnet - **Gestion des erreurs améliorée** - Meilleurs messages d'erreur #### Plugin qBittorrent v1.2.0 - Télécharge les fichiers .torrent localement avant envoi - Détecte les redirections HTTP vers magnet - Vérifie le format bencode avant envoi --- ## [1.5.1] - 2025-12-26 ### 📱 Amélioration affichage mobile des modals #### Corrigé - **Modal plein écran** sur mobile (plus de scroll horizontal) - **Table des torrents responsive** - affichage en cartes sur mobile - **Boutons d'action** bien alignés et accessibles - **Labels visibles** pour chaque donnée (Tracker, Taille, Seeds, Date) #### Changements CSS - Modal en plein écran sur mobile (100vh) - Table transformée en liste de cartes - Boutons d'action avec flex-wrap - Suppression du min-width qui causait le scroll --- ## [1.5.0] - 2025-12-26 ### 📱 Progressive Web App (PWA) #### Ajouté - **Manifest PWA** - L'application est maintenant installable - **Service Worker** - Cache des assets pour un chargement rapide - **Icônes** - 8 tailles d'icônes (72x72 à 512x512) - **Support iOS** - Meta tags pour Apple mobile web app - **Raccourcis** - Accès rapide à Recherche et Nouveautés #### Fonctionnalités PWA - 📱 **Installable** sur mobile (Android/iOS) et desktop - 🖥️ **Mode standalone** - Plein écran sans barre de navigateur - ⚡ **Cache intelligent** - Assets statiques mis en cache - 🎨 **Thème** - Couleur #e63946 (rouge Lycostorrent) #### Comment installer - **Android** : Menu Chrome → "Ajouter à l'écran d'accueil" - **iOS** : Safari → Partager → "Sur l'écran d'accueil" - **Desktop** : Icône d'installation dans la barre d'adresse #### Fichiers ajoutés ``` app/static/ ├── manifest.json # Configuration PWA ├── sw.js # Service Worker └── icons/ # Icônes PNG ├── icon-72x72.png ├── icon-96x96.png ├── icon-128x128.png ├── icon-144x144.png ├── icon-152x152.png ├── icon-192x192.png ├── icon-384x384.png └── icon-512x512.png ``` --- ## [1.4.1] - 2025-12-26 ### 📥 Bouton "Envoyer au client torrent" #### Ajouté - **Bouton 📥** sur chaque résultat de recherche - **Bouton 📥** sur chaque torrent dans les nouveautés - **Notification toast** de succès/erreur - **Support HTTP Basic Auth** pour les seedbox (reverse proxy) #### Fonctionnement - Le bouton n'apparaît que si un client torrent est configuré et connecté - Clique sur 📥 → envoie le magnet/torrent au client - Feedback visuel : ⏳ → ✅ ou ❌ #### Technique - `checkTorrentClient()` vérifie le statut au chargement - `sendToTorrentClient(url, button)` envoie via l'API - Plugin qBittorrent v1.1.0 avec support HTTP Basic Auth --- ## [1.4.0] - 2025-12-26 ### ⬇️ Système de plugins Client Torrent #### Ajouté - **Architecture de plugins** pour les clients torrent - **Plugin qBittorrent** inclus et fonctionnel - **Onglet "Client Torrent"** dans l'administration - **Configuration via interface web** : - Sélection du plugin - Host, port, utilisateur, mot de passe - Option SSL - Test de connexion - **API endpoints** : - `GET /api/admin/torrent-client/plugins` - Liste des plugins - `GET /api/admin/torrent-client/config` - Configuration actuelle - `POST /api/admin/torrent-client/config` - Sauvegarder config - `POST /api/admin/torrent-client/test` - Tester connexion - `POST /api/torrent-client/add` - Envoyer un torrent - `GET /api/torrent-client/status` - Statut du client #### Structure des plugins ``` app/plugins/torrent_clients/ ├── __init__.py # Gestionnaire auto-découverte ├── base.py # Classe abstraite ├── qbittorrent.py # Plugin qBittorrent └── README.md # Guide création plugins ``` #### Pour créer un nouveau plugin 1. Créer un fichier `.py` dans `plugins/torrent_clients/` 2. Hériter de `TorrentClientPlugin` 3. Implémenter les méthodes requises 4. Définir `PLUGIN_CLASS = VotreClasse` Le plugin sera automatiquement détecté au démarrage. --- ## [1.3.1] - 2025-12-26 ### 🔧 RSS uniquement pour les Nouveautés #### Modifié - **Les flux RSS n'apparaissent plus dans la page Recherche** - Les RSS sont maintenant uniquement disponibles dans la page Nouveautés - Paramètre `?include_rss=true` sur `/api/trackers` pour inclure les RSS #### Technique - `/api/trackers` : par défaut sans RSS (pour la recherche) - `/api/trackers?include_rss=true` : avec RSS (pour les nouveautés) --- ## [1.3.0] - 2025-12-26 ### 🔐 Système d'authentification #### Ajouté - **Page de login** avec nom d'utilisateur et mot de passe - **Protection de toutes les routes** - authentification requise pour accéder au site - **Sessions persistantes** - reste connecté 7 jours par défaut - **Bouton de déconnexion** 🚪 dans la navigation - **Variables d'environnement** pour configurer : - `AUTH_USERNAME` : nom d'utilisateur (défaut: `admin`) - `AUTH_PASSWORD` : mot de passe (vide = pas d'auth requise) - `SESSION_LIFETIME` : durée de session en secondes (défaut: 604800 = 7 jours) - `SECRET_KEY` : clé secrète pour les sessions (auto-générée si non définie) #### Technique - Décorateur `@login_required` sur toutes les routes principales - Sessions Flask sécurisées avec cookie permanent - Redirection automatique vers `/login` si non authentifié - Logs des connexions/déconnexions #### Notes - Si `AUTH_PASSWORD` est vide ou non défini, l'authentification est **désactivée** - Compatible avec l'ancien système (ADMIN_PASSWORD toujours supporté) --- ## [1.2.6] - 2024-12-25 ### 🐛 Fix images placeholder #### Corrigé - **Bug affichage SVG cassé** : Les images placeholder utilisent maintenant du base64 au lieu de SVG inline - Plus de problèmes d'échappement de caractères dans les attributs HTML - Les placeholders affichent une icône 🎵 pour la musique et 🎬 pour les films --- ## [1.2.5] - 2024-12-25 ### 🎵 Amélioration affichage Musique #### Corrigé - **Bug affichage "No Album Art" en texte brut** : l'image de fallback s'affiche maintenant correctement - Utilisation de `sanitizeUrl()` pour l'URL de la cover - Ajout d'un handler `onerror` sur l'image pour le fallback #### Amélioré - Affichage "ℹ️ Infos Last.fm non disponibles" quand l'album n'est pas trouvé sur Last.fm - Tentative d'extraire artiste/album du titre du torrent si Last.fm ne trouve pas - Style amélioré pour le placeholder de l'image album --- ## [1.2.4] - 2024-12-25 ### 🐛 Correction sauvegarde catégories #### Corrigé - **La sauvegarde des catégories des trackers fonctionne à nouveau !** - Le format des données envoyées par le JavaScript était incorrect - La fonction de sauvegarde fusionne maintenant correctement avec la config existante #### Technique - `admin.js`: Envoi de `{ config: { tracker, categories } }` au lieu de `{ tracker, categories }` - `main.py`: La route POST `/api/admin/latest-config` fusionne les données au lieu d'écraser tout le fichier --- ## [1.2.3] - 2024-12-25 ### 🔄 Rechargement automatique des filtres #### Corrigé - **Plus besoin de redémarrer Docker !** Le parser détecte automatiquement les modifications du fichier `filters_config.json` - Les nouveaux filtres sont appliqués immédiatement à la prochaine recherche #### Technique - Le parser vérifie la date de modification du fichier config avant chaque parsing - Si le fichier a changé, il recharge automatiquement la configuration - Log "🔄 Config des filtres modifiée, rechargement..." dans les logs quand ça se produit --- ## [1.2.2] - 2024-12-25 ### 🔄 Filtres dynamiques dans la recherche #### Corrigé - **Les filtres personnalisés apparaissent maintenant dans la recherche !** - La page de recherche charge dynamiquement les filtres depuis l'API - Plus besoin de modifier le code JS pour ajouter de nouveaux filtres #### Ajouté - Route publique `/api/filters` pour charger la config des filtres - Les filtres créés dans Admin → Filtres sont immédiatement disponibles dans la recherche #### Technique - `FILTER_CONFIG` dans search.js est maintenant dynamique (chargé au démarrage) - Fallback sur une config minimale si l'API ne répond pas --- ## [1.2.1] - 2024-12-25 ### 🎮 Plus de catégories de filtres #### Ajouté - **Nouveaux filtres par défaut** : - 🎮 **Plateforme** : PC, Windows, Linux, Mac, PS5, PS4, Xbox, Switch, Steam, GOG... - 💻 **Type Logiciel** : Portable, Repack, ISO, Setup, Crack, Patch, x64, x86... - 📚 **Format Ebook** : EPUB, PDF, MOBI, CBR, CBZ, DJVU... - 📖 **Type Ebook** : Roman, BD, Comics, Manga, Magazine, Audiobook... - 🕹️ **Type Jeu** : RPG, FPS, Action, Adventure, Strategy, Simulation... #### Amélioré - **Ajout de filtre simplifié** : plus besoin de connaître le nom technique, juste le nom et l'emoji - Interface plus intuitive pour créer de nouveaux filtres --- ## [1.2.0] - 2024-12-25 ### 🎛️ Gestion dynamique des filtres #### Ajouté - **Nouvel onglet "Filtres"** dans le panneau d'administration - **Éditeur de filtres** : ajouter, modifier, supprimer des filtres - **Configuration des valeurs** : définir les mots-clés à détecter pour chaque filtre - **Test de détection** : tester un titre pour voir les filtres détectés - **Fichier JSON** : `config/filters_config.json` pour persister la configuration - **API endpoints** : - `GET /api/admin/filters` - Récupérer la config - `POST /api/admin/filters` - Sauvegarder la config - `POST /api/admin/filters/reset` - Réinitialiser - `POST /api/admin/filters/test` - Tester un titre #### Modifié - **torrent_parser.py** : charge les filtres depuis le JSON au lieu du code en dur - Le parser se recharge automatiquement après sauvegarde #### Technique - Patterns regex construits dynamiquement à partir de la config - Singleton pattern pour le parser avec reload --- ## [1.1.2] - 2024-12-25 ### 🎵 Filtres Musique #### Ajouté - **Nouveaux filtres pour la musique** dans la recherche : - **Format Audio** : FLAC, MP3, AAC, Lossless, 320, V0, 24bit... - **Type** : Album, Single, EP, Live, Concert, Discography, Soundtrack... - **Source Audio** : CD, Vinyl, WEB, SACD... #### Modifié - Parser de titres enrichi pour détecter les métadonnées musicales --- ## [1.1.1] - 2024-12-25 ### 🎨 Amélioration interface Recherche #### Modifié - **Sélecteur de trackers** : nouveau design identique à la page Nouveautés - Panneau dépliable "🔧 Sélectionner les trackers" - Boutons "Tout sélectionner" / "Tout désélectionner" - **Filtres masquables** : bouton ▼/▶ pour afficher/masquer les filtres - Uniformisation du style entre les pages Recherche et Nouveautés --- ## [1.1.0] - 2024-12-25 ### ✨ Nouveau panneau d'administration unifié #### Ajouté - **Page `/admin` unifiée** avec 3 onglets (Catégories, Tags, RSS) - Design moderne avec onglets animés - Toast notifications pour les actions - Section aide repliable pour RSS - Route `/api/admin/parsing-tags/reset` pour réinitialiser les tags #### Modifié - **Navigation simplifiée** : 3 liens au lieu de 5 - **CSS admin refait** : design cohérent et moderne - Interface responsive améliorée pour mobile #### Sécurité (v1.1.0) - Headers HTTP de sécurité (X-Content-Type-Options, X-Frame-Options, etc.) - Validation renforcée des entrées (longueur, nombre de trackers) - Protection XSS avec `sanitizeUrl()` et `escapeHtml()` - Protection SSRF dans les flux RSS (validation des URLs) - Blocage des URLs locales (localhost, 127.0.0.1) #### Technique - Export `DEFAULT_PARSING_TAGS` dans tmdb_api.py - Route alternative `/api/admin/tracker-categories?tracker=xxx` --- ## [1.0.0] - 2024-12-25 ### 🎉 Version initiale stable #### Fonctionnalités principales - **Recherche multi-trackers** via Jackett et Prowlarr - **Page Nouveautés** avec enrichissement TMDb (films/séries) et Last.fm (musique) - **Parsing intelligent** des titres de torrents (qualité, codec, langue, HDR, etc.) - **Interface responsive** adaptée aux smartphones - **Filtres dynamiques** côté client (qualité, source, langue, tracker) - **Tri et pagination** des résultats #### Sources supportées - Jackett (indexers configurés) - Prowlarr (indexers configurés) - Flux RSS génériques (avec support Flaresolverr + cookies) #### Administration - `/admin/latest` - Configuration des catégories par tracker - `/admin/parsing` - Gestion des tags de nettoyage des titres - `/admin/rss` - Gestion des flux RSS #### Intégrations - TMDb API - Métadonnées films/séries - Last.fm API - Métadonnées musique - Flaresolverr - Bypass Cloudflare pour RSS --- ## Versioning - **MAJOR** (X.0.0) : Changements incompatibles, refonte majeure - **MINOR** (0.X.0) : Nouvelles fonctionnalités rétrocompatibles - **PATCH** (0.0.X) : Corrections de bugs, sécurité