Wie die einzelnen Teile von Mister Download Manager zusammenpassen.
Crates
| Pfad | Crate | Rolle |
|---|---|---|
crates/engine |
mdm-engine |
Lädt eine Datei über HTTP(S) oder FTP(S) herunter: Probe, Segmentplaner, Verbindungs-Worker, Wiederaufnahmezustand, Host-spezifische Limits, Geschwindigkeitsbegrenzer, Prüfsummen, Proxy-Skripte |
crates/app |
mdm-app |
Die Desktop-App (misterdownloadmanager.exe, egui): Liste, Kategorien, Warteschlangen, Scheduler, Dialoge, Tray, Einstellungen |
crates/cli |
mdm-cli |
Headless-Downloads mit Fortschritt (get, resume) |
crates/mcp |
mdm-mcp |
Der MCP-Server (misterdownloadmanager-mcp): KI-Assistenten listen die Downloads der laufenden App auf, fügen sie hinzu und steuern sie über die Automatisierungs-API |
crates/nmhost |
mdm-nmhost |
Der native Messaging-Host des Browsers: nimmt erfasste Downloads von der Erweiterung entgegen und übergibt sie an die App |
crates/ipc |
mdm-ipc |
Der Single-Instance-Kanal (ein Token-geschützter lokaler Socket), der Datenordner und die Erfassungsregeln, die von der App und dem Host gemeinsam genutzt werden |
crates/tools |
mdm-tools |
Videoseiten über yt-dlp und ffmpeg (als separate Programme ausgeführt) |
crates/crash |
mdm-crash |
Absturz- und Einfrierberichte: der Überwachungsprozess, Out-of-Process-Minidumps, symbolisierte Stacks, der Berichtstext und die Release-Logs (crash-reports.md) |
crates/torrent |
mdm-torrent |
BitTorrent- und Magnet-Links über librqbit |
crates/labserver |
mdm-labserver |
Ein HTTP-Range-Server mit einem Anforderungsprotokoll und Fehlerinjektion sowie ein FTP/FTPS-Server mit eigenen Fehlern für Tests und Benchmarks |
extension/ |
— | Die Chromium (MV3)- und Firefox-Erweiterung |
docs/ |
— | Die Bedienungsanleitung und Tutorials (Hilfe öffnet sie), diese Datei, die Benchmark-Daten |
website/ |
— | Die Seiten einer zukünftigen Website (noch nicht veröffentlicht) |
Abhängigkeiten zeigen nach innen: app, cli, mcp und nmhost verwenden engine und ipc; die Engine weiß nichts von der Benutzeroberfläche. Die App sieht die Engine nur über ihre Ereignisse (Fortschritt, Segmenttabellen-Snapshots, abgeschlossen, fehlgeschlagen).
Engine
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
Wenn alle Segmente abgeschlossen sind, wird die Part-Datei mit der erwarteten Größe abgeglichen und umbenannt; das Dateidatum kann dem des Servers folgen.
FTP und FTPS (ftp.rs) durchlaufen denselben Planer, dieselben Worker und denselben Zustand: Ein Segment ist REST + RETR auf einer Kontrollsitzung anstelle eines Bereichs- GET, SIZE und MDTM stehen für die Header, und Sitzungen werden pro Download gepoolt und zwischen Segmenten wiederverwendet.
App
Ein egui-Fenster, das auf feste Pixelkoordinaten gezeichnet wird, plus ein sofortiger Viewport pro Dialog. app.rs enthält den Zustand (Downloads, Warteschlangen, Einstellungen, die Auswahl der Liste) und wandelt Menü-, Symbolleisten-, Tastatur- und IPC-Befehle in Aktionen um. Jeder Dialog ist ein eigenes Modul und gibt ein Outcome zurück (offen, geschlossen, mit einem Wert abgeschlossen). Windows-spezifische Aufrufe sind auf win32.rs beschränkt und ihre Linux- und macOS-Pendants auf unix.rs (beginnend mit der Sitzung, dem Browser-Host, Sounds, im Ordner anzeigen, dem Absturz-Handler); jede andere Datei ist sicheres, portables Rust. Schriftarten stammen vom System: Windows-Schriftartenordner, macOS-Systemschriftarten, fontconfig unter Linux (theme.rs).
Die Download-Liste und die Einstellungen werden atomar in %APPDATA%\misterdownloadmanager\ (downloads.json) gespeichert. Der Browser-Host liest dieselbe Datei für die Erfassungsregeln, sodass eine Änderung in den Optionen für den nächsten erfassten Download gilt.
Browser-Integration
page ──► extension ──native messaging──► mdm-nmhost ──ipc──► app
Die Erweiterung fragt den Host, welche Dateitypen übernommen werden sollen, prüft jeden Download dagegen und bricht den Browser-Download erst ab, nachdem die App ihn akzeptiert hat; andernfalls behält der Browser ihn.
Übersetzungen
Jeder Text, den die Benutzeroberfläche anzeigt, durchläuft crate::i18n (craft-i18n-Kataloge, i18n/<locale>.tsv). tools/i18n/extract.py erstellt i18n/en.tsv aus der Quelle neu, mit einem Hinweis für Übersetzer zu jedem Text (was es ist, wo es angezeigt wird, seine Platzhalter).
Tests und Benchmarks
cargo testführt Unit-Tests und End-to-End-Downloads gegen mdm-labserver mit injizierten Fehlern (langsame, abgebrochene und abgelehnte Verbindungen, Server ohne Bereiche, sich ändernde Dateien) aus. tools/bench führt den veröffentlichten Geschwindigkeitsvergleich aus; seine Rohdaten befinden sich in docs/bench/.
Kostenlos, Open Source, keine Werbung, keine Testversion.
Mister Download Manager herunterladen