Modification Readme

This commit is contained in:
2026-03-24 07:55:16 +01:00
parent f034d34796
commit b57345910e

330
Readme.md
View File

@@ -1,182 +1,52 @@
SeedMover # Readme
---
# SeedMover
Gestionnaire de transferts dual-pane entre une seedbox et un NAS, accessible depuis navigateur et smartphone. Gestionnaire de transferts dual-pane entre une seedbox et un NAS, accessible depuis navigateur et smartphone.
Fonctionnalités ## Fonctionnalités
- **Dual-pane** — navigation indépendante dans chaque panneau
- **Multi-protocoles** — Local et SFTP inclus, extensible via plugins
- **File d'attente** — transferts séquentiels avec progression temps réel, pause et stop
- **Historique** — suivi de tous les transferts (taille, durée, date, statut)
- **Connexions** — ajout, édition, test depuis l'interface, persistées entre redémarrages
- **Panneaux par défaut** — sauvegarde la vue de démarrage en un clic
## Démarrage rapide
```bash
Dual-pane — navigation indépendante dans chaque panneau
Multi-protocoles — Local et SFTP inclus, extensible via plugins
File d'attente — transferts séquentiels avec progression temps réel, pause et stop
Historique — suivi de tous les transferts (taille, durée, date, statut)
Connexions — ajout, édition, test depuis l'interface, persistées entre redémarrages
Panneaux par défaut — sauvegarde la vue de démarrage en un clic
Démarrage rapide
# Générer une SECRET_KEY # Générer une SECRET_KEY
python3 -c "import secrets; print(secrets.token_hex(32))" python3 -c "import secrets; print(secrets.token_hex(32))"
# Lancer # Lancer
docker compose up -d docker compose up -d
```
Accès : `http://<ip>:5000`
Accès : http://<ip>:5000 ## Configuration `docker-compose.yml`
Configuration docker-compose.yml | Variable | Défaut | Description |
| --- | --- | --- |
| `SEEDBOX_PATH` | `/mnt/seedbox` | Chemin local seedbox |
| `NAS_PATH` | `/mnt/nas` | Chemin local NAS |
| `APP_USERNAME` | `admin` | Identifiant |
| `APP_PASSWORD` | `changeme` | Mot de passe |
| `SECRET_KEY` | _(à changer)_ | Clé de session Flask |
| `CACHE_TTL` | `60` | TTL du cache de listing (secondes) |
| `HISTORY_MAX` | `50` | Nombre max d'entrées dans l'historique |
| `SESSION_LIFETIME` | `86400` | Durée de session (secondes) |
## Ajouter un protocole
Créer `plugins/monprotocole.py`, hériter de `AbstractFS`, implémenter les méthodes, définir `PLUGIN_NAME` et `PLUGIN_LABEL`. Le plugin est détecté automatiquement au démarrage.
## Structure
```
Variable
Défaut
Description
SEEDBOX_PATH
/mnt/seedbox
Chemin local seedbox
NAS_PATH
/mnt/nas
Chemin local NAS
APP_USERNAME
admin
Identifiant
APP_PASSWORD
changeme
Mot de passe
SECRET_KEY
(à changer)
Clé de session Flask
CACHE_TTL
60
TTL du cache de listing (secondes)
HISTORY_MAX
50
Nombre max d'entrées dans l'historique
SESSION_LIFETIME
86400
Durée de session (secondes)
Ajouter un protocole
Créer plugins/monprotocole.py, hériter de AbstractFS, implémenter les méthodes, définir PLUGIN_NAME et PLUGIN_LABEL. Le plugin est détecté automatiquement au démarrage.
Structure
seedmover/ seedmover/
├── app.py ├── app.py
├── plugins/ ├── plugins/
@@ -188,124 +58,52 @@ seedmover/
│ ├── index.html │ ├── index.html
│ └── login.html │ └── login.html
└── docker-compose.yml └── docker-compose.yml
```
### Générer une SECRET_KEY sécurisée
```bash
Générer une SECRET_KEY sécurisée
python3 -c "import secrets; print(secrets.token_hex(32))" python3 -c "import secrets; print(secrets.token_hex(32))"
```
### Volumes
Volumes ```yaml
volumes: volumes:
- /mnt/nas/Useed/Media_useed:/mnt/seedbox:ro # seedbox, lecture seule - /mnt/nas/Useed/Media_useed:/mnt/seedbox:ro # seedbox, lecture seule
- /mnt/nas/BOB4-Syno:/mnt/nas # NAS, lecture/écriture - /mnt/nas/BOB4-Syno:/mnt/nas # NAS, lecture/écriture
```
## Utilisation
Utilisation 1. Se connecter sur `http://ip:5000`
2. Naviguer dans la seedbox (panneau gauche) avec double-clic
3. Naviguer vers le dossier destination sur le NAS (panneau droit)
4. Sélectionner un ou plusieurs fichiers/dossiers côté seedbox (clic simple)
5. Cliquer sur **⟶ Copier vers NAS**
6. Suivre la progression dans la file de transfert en bas
### Raccourcis
- **Double-clic** — ouvrir un dossier
- **Clic simple** — sélectionner/désélectionner
- **↻ Actualiser** — forcer un rechargement (bypass cache)
- **📁** — créer un nouveau dossier
- **✏ Renommer** — renommer un élément côté NAS
- **⏸ Pause / ▶ Reprendre** — suspendre le transfert en cours
- **⏹ Stop** — annuler le transfert et supprimer le fichier partiel
- **Échap** — fermer les modales
- **Entrée** — valider les modales
## Stack technique
- **Backend** : Python 3.12, Flask, Flask-SocketIO, Eventlet
- **Frontend** : HTML/CSS/JS vanilla, Socket.IO
- **Transport** : copie par chunks de 4MB avec progression WebSocket
Se connecter sur http://ip:5000 ## Notes techniques
- Streaming chunk par chunk (1MB) sans buffer intermédiaire — RAM stable pendant les transferts
- `malloc_trim()` appelé après chaque transfert pour rendre la mémoire au système
Naviguer dans la seedbox (panneau gauche) avec double-clic - Verrou par connexion pour thread-safety Paramiko (évite les "Garbage packet")
- Prefetch SFTP désactivé pour éviter le chargement du fichier entier en RAM
Naviguer vers le dossier destination sur le NAS (panneau droit)
Sélectionner un ou plusieurs fichiers/dossiers côté seedbox (clic simple)
Cliquer sur ⟶ Copier vers NAS
Suivre la progression dans la file de transfert en bas
Raccourcis
Double-clic — ouvrir un dossier
Clic simple — sélectionner/désélectionner
↻ Actualiser — forcer un rechargement (bypass cache)
📁 — créer un nouveau dossier
✏ Renommer — renommer un élément côté NAS
⏸ Pause / ▶ Reprendre — suspendre le transfert en cours
⏹ Stop — annuler le transfert et supprimer le fichier partiel
Échap — fermer les modales
Entrée — valider les modales
Stack technique
Backend : Python 3.12, Flask, Flask-SocketIO, Eventlet
Frontend : HTML/CSS/JS vanilla, Socket.IO
Transport : copie par chunks de 4MB avec progression WebSocket
Notes techniques
Streaming chunk par chunk (1MB) sans buffer intermédiaire — RAM stable pendant les transferts
malloc_trim() appelé après chaque transfert pour rendre la mémoire au système
Verrou par connexion pour thread-safety Paramiko (évite les "Garbage packet")
Prefetch SFTP désactivé pour éviter le chargement du fichier entier en RAM