Initial commit
This commit is contained in:
154
app/plugins/torrent_clients/README.md
Normal file
154
app/plugins/torrent_clients/README.md
Normal file
@@ -0,0 +1,154 @@
|
||||
# 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)
|
||||
```
|
||||
Reference in New Issue
Block a user