Files
Lycostorrent/CHANGELOG.md
2026-03-23 20:59:26 +01:00

946 lines
30 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 `<table>` à `<div>` (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
<div class="torrent-item">
<div class="torrent-info">
<div class="torrent-name">...</div>
<div class="torrent-meta">...</div>
</div>
<div class="torrent-actions">
<a class="btn-link">🔗</a>
<a class="btn-magnet">🧲</a>
...
</div>
</div>
```
---
## [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 `<td>`
- **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/<category>` - Liste TMDb par catégorie
- `GET /api/discover/detail/<type>/<id>` - 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é