946 lines
30 KiB
Markdown
946 lines
30 KiB
Markdown
# 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é |