# Plugins Clients Torrent - Lycostorrent Ce dossier contient les plugins pour les clients torrent. ## Plugins disponibles | Plugin | Fichier | Description | |--------|---------|-------------| | qBittorrent | `qbittorrent.py` | Client qBittorrent via API Web | ## Créer un nouveau plugin ### 1. Créer le fichier Créer un fichier `mon_client.py` dans ce dossier. ### 2. Implémenter la classe ```python from .base import TorrentClientPlugin, TorrentClientConfig, TorrentInfo from typing import Optional, List class MonClientPlugin(TorrentClientPlugin): """Plugin pour MonClient.""" # Métadonnées (obligatoires) PLUGIN_NAME = "MonClient" PLUGIN_DESCRIPTION = "Support pour MonClient" PLUGIN_VERSION = "1.0.0" PLUGIN_AUTHOR = "VotreNom" def connect(self) -> bool: """Établit la connexion.""" # Votre code ici pass def disconnect(self) -> None: """Ferme la connexion.""" pass def is_connected(self) -> bool: """Vérifie la connexion.""" pass def add_torrent_url(self, url: str, save_path: Optional[str] = None, category: Optional[str] = None, paused: bool = False) -> bool: """Ajoute un torrent via URL.""" pass def add_torrent_file(self, file_content: bytes, filename: str, save_path: Optional[str] = None, category: Optional[str] = None, paused: bool = False) -> bool: """Ajoute un torrent via fichier.""" pass def get_torrents(self) -> List[TorrentInfo]: """Liste tous les torrents.""" pass def get_torrent(self, torrent_hash: str) -> Optional[TorrentInfo]: """Récupère un torrent par son hash.""" pass def pause_torrent(self, torrent_hash: str) -> bool: """Met en pause.""" pass def resume_torrent(self, torrent_hash: str) -> bool: """Reprend le téléchargement.""" pass def delete_torrent(self, torrent_hash: str, delete_files: bool = False) -> bool: """Supprime un torrent.""" pass def get_categories(self) -> List[str]: """Liste les catégories.""" pass # Important : exposer la classe pour l'auto-découverte PLUGIN_CLASS = MonClientPlugin ``` ### 3. Méthodes obligatoires | Méthode | Description | |---------|-------------| | `connect()` | Connexion au client | | `disconnect()` | Déconnexion | | `is_connected()` | Vérifie la connexion | | `add_torrent_url()` | Ajoute via magnet/URL | | `add_torrent_file()` | Ajoute via fichier .torrent | | `get_torrents()` | Liste les torrents | | `get_torrent()` | Info d'un torrent | | `pause_torrent()` | Pause | | `resume_torrent()` | Reprise | | `delete_torrent()` | Suppression | | `get_categories()` | Liste catégories | ### 4. Structure TorrentInfo ```python @dataclass class TorrentInfo: hash: str # Hash du torrent name: str # Nom size: int # Taille en bytes progress: float # 0.0 à 1.0 status: str # downloading, seeding, paused, error, queued, checking download_speed: int # bytes/s upload_speed: int # bytes/s seeds: int # Nombre de seeds peers: int # Nombre de peers save_path: str # Chemin de sauvegarde ``` ### 5. Configuration La configuration est passée via `TorrentClientConfig` : ```python @dataclass class TorrentClientConfig: host: str # Adresse (ex: "192.168.1.100") port: int # Port (ex: 8080) username: str # Utilisateur password: str # Mot de passe use_ssl: bool # Utiliser HTTPS ``` ## Plugins à créer - [ ] Transmission (`transmission.py`) - [ ] Deluge (`deluge.py`) - [ ] ruTorrent (`rutorrent.py`) - [ ] Vuze (`vuze.py`) - [ ] µTorrent (`utorrent.py`) ## Test du plugin ```python from plugins.torrent_clients import create_client client = create_client('monclient', { 'host': 'localhost', 'port': 8080, 'username': 'admin', 'password': 'password' }) result = client.test_connection() print(result) ```