Comment les composants de Mister Download Manager s'assemblent.
Crâtes
| Chemin | Crate | Rôle |
|---|---|---|
crates/engine |
mdm-engine |
Télécharge un fichier via HTTP(S) ou FTP(S) : sonde, planificateur de segments, travailleurs de connexion, état de reprise, limites par hôte, limiteur de vitesse, sommes de contrôle, scripts proxy |
crates/app |
mdm-app |
L'application de bureau (misterdownloadmanager.exe, egui) : liste, catégories, files d'attente, planificateur, dialogues, barre d'état système, paramètres |
crates/cli |
mdm-cli |
Téléchargements sans interface utilisateur avec progression (get, resume) |
crates/mcp |
mdm-mcp |
Le serveur MCP (misterdownloadmanager-mcp) : les assistants IA listent, ajoutent et contrôlent les téléchargements de l'application en cours via l'API d'automatisation |
crates/nmhost |
mdm-nmhost |
L'hôte de messagerie native du navigateur : prend les téléchargements capturés de l'extension et les transmet à l'application |
crates/ipc |
mdm-ipc |
Le canal à instance unique (un socket local protégé par un jeton), le dossier de données et les règles de capture partagées par l'application et l'hôte |
crates/tools |
mdm-tools |
Pages vidéo via yt-dlp et ffmpeg (exécutés comme des programmes séparés) |
crates/crash |
mdm-crash |
Rapports de crash et de blocage : le processus de surveillance, les minidumps hors processus, les piles symbolisées, le texte du rapport et les journaux de publication (crash-reports.md) |
crates/torrent |
mdm-torrent |
Liens BitTorrent et magnet via librqbit |
crates/labserver |
mdm-labserver |
Un serveur HTTP Range avec un journal de requêtes et une injection de pannes, et un serveur FTP/FTPS avec ses propres pannes, pour les tests et les benchmarks |
extension/ |
— | L'extension Chromium (MV3) et Firefox |
docs/ |
— | Le guide de l'utilisateur et les tutoriels (l'Aide les ouvre), ce fichier, les données de benchmark |
website/ |
— | Les pages d'un futur site web (pas encore publiées) |
Les dépendances pointent vers l'intérieur : app, cli, mcp et nmhost utilisent engine et ipc ; le moteur ne sait rien de l'interface utilisateur. L'application ne voit le moteur qu'à travers ses événements (progression, instantanés de la table des segments, terminé, échoué).
Moteur
Download
├─ probe() size, resumable?, validators (ETag / Last-Modified), file name
├─ Planner (pure) segment table: when a connection is free, the largest remaining
│ part is split in half (planner.rs, tested by random simulation)
├─ Worker × N one HTTP/1.1 connection each, reused across segments; slow ones
│ are dropped and their part re-split
│ └─ writes at its offset into <name>.mdm.part (created sparse)
├─ HostLimits learns how many connections each server accepts
├─ Limiter (shared) per-download and global token buckets
├─ State segment table saved atomically (craft-atomic) for crash-safe resume
└─ events → channel Progress, Done, Failed
Lorsque tous les segments sont terminés, le fichier partiel est vérifié par rapport à la taille attendue et renommé à sa place ; la date du fichier peut suivre celle du serveur.
FTP et FTPS (ftp.rs) passent par le même planificateur, les mêmes travailleurs et le même état : un segment est REST + RETR sur une session de contrôle au lieu d'un GET, SIZE et MDTM à plage remplacent les en-têtes, et les sessions sont regroupées par téléchargement et réutilisées entre les segments.
App
Une fenêtre egui peinte à des coordonnées de pixels fixes, plus une fenêtre d'affichage immédiate par dialogue. app.rs contient l'état (téléchargements, files d'attente, paramètres, sélection de la liste) et transforme les commandes de menu, de barre d'outils, de clavier et d'IPC en actions. Chaque dialogue est son propre module et renvoie un Outcome (ouvert, fermé, terminé avec une valeur). Les appels spécifiques à Windows sont confinés à win32.rs et leurs équivalents Linux et macOS à unix.rs (à commencer par la session, l'hôte des navigateurs, les sons, l'affichage dans le dossier, le gestionnaire de crash) ; tout autre fichier est du Rust sûr et portable. Les polices proviennent du système : le dossier Polices de Windows, les polices système de macOS, fontconfig sur Linux (theme.rs).
La liste des téléchargements et les paramètres sont enregistrés atomiquement dans %APPDATA%\misterdownloadmanager\ (downloads.json). L'hôte du navigateur lit le même fichier pour les règles de capture, de sorte qu'un changement dans les Options s'applique au prochain téléchargement capturé.
Intégration au navigateur
page ──► extension ──native messaging──► mdm-nmhost ──ipc──► app
L'extension demande à l'hôte quels types de fichiers prendre, vérifie chaque téléchargement par rapport à ceux-ci, et n'annule le téléchargement du navigateur qu'après que l'application l'ait accepté ; sinon, le navigateur le conserve.
Traductions
Chaque texte affiché par l'interface utilisateur passe par crate::i18n (catalogues craft-i18n, i18n/<locale>.tsv). tools/i18n/extract.py reconstruit i18n/en.tsv à partir de la source, avec une note pour les traducteurs sur chaque texte (ce que c'est, où il apparaît, ses espaces réservés).
Tests et benchmarks
cargo testexécute des tests unitaires et des téléchargements de bout en bout contre mdm-labserver avec des pannes injectées (connexions lentes, interrompues et refusées, serveurs sans plages, fichiers changeants). tools/bench exécute la comparaison de vitesse publiée ; ses données brutes se trouvent dans docs/bench/.
Gratuit, open source, sans publicité, sans essai.
Télécharger Mister Download Manager