Mister Download Manager
  1. Home
  2. Help
  3. Architectuur

Architectuur

Hoe de onderdelen van Mister Download Manager samenwerken.

Crates

Pad Crate Rol
crates/engine mdm-engine Downloadt één bestand via HTTP(S) of FTP(S): probe, segmentplanner, verbindingswerkers, hervattingsstatus, limieten per host, snelheidsbegrenzer, checksums, proxyscripts
crates/app mdm-app De desktop-app (misterdownloadmanager.exe, egui): lijst, categorieën, wachtrijen, planner, dialoogvensters, systeemvak, instellingen
crates/cli mdm-cli Headless downloads met voortgang (get, resume)
crates/mcp mdm-mcp De MCP-server (misterdownloadmanager-mcp): AI-assistenten tonen, voegen toe en beheren de downloads van de actieve app via de automatiserings-API
crates/nmhost mdm-nmhost De native messaging host van de browser: neemt vastgelegde downloads van de extensie over en geeft ze door aan de app
crates/ipc mdm-ipc Het single-instance kanaal (een met token beveiligde lokale socket), de datafolder en de vastlegregels die door de app en de host worden gedeeld
crates/tools mdm-tools Videopagina's via yt-dlp en ffmpeg (uitgevoerd als aparte programma's)
crates/crash mdm-crash Crash- en vastlooprapporten: het monitorproces, out-of-process minidumps, gesymboliseerde stacks, de tekst van het rapport en de releaselogboeken (crash-reports.md)
crates/torrent mdm-torrent BitTorrent en magneetlinks via librqbit
crates/labserver mdm-labserver Een HTTP Range-server met een verzoeklogboek en foutinjectie, en een FTP/FTPS-server met eigen fouten, voor tests en benchmarks
extension/ — De Chromium (MV3) en Firefox extensie
docs/ — De gebruikershandleiding en tutorials (Help opent ze), dit bestand, de benchmarkdata
website/ — De pagina's van een toekomstige website (nog niet gepubliceerd)

Afhankelijkheden wijzen naar binnen: app, cli, mcp en nmhost gebruiken engine en ipc; de engine weet niets van de UI. De app ziet de engine alleen via zijn gebeurtenissen (voortgang, momentopnamen van de segmenttabel, voltooid, mislukt).

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

Wanneer elk segment klaar is, wordt het deelbestand gecontroleerd op de verwachte grootte en op zijn plaats hernoemd; de datum van het bestand kan die van de server volgen.

FTP en FTPS (ftp.rs) gaan via dezelfde planner, werkers en status: een segment is REST + RETR op een controlesessie in plaats van een bereikde GET, SIZE en MDTM staan voor de headers, en sessies worden per download gepoold en hergebruikt tussen segmenten.

App

Eén egui-venster getekend op vaste pixelcoördinaten, plus één directe viewport per dialoogvenster. app.rs bevat de status (downloads, wachtrijen, instellingen, de selectie van de lijst) en zet menu-, werkbalk-, toets- en IPC-opdrachten om in acties. Elk dialoogvenster is een eigen module en retourneert een Outcome (open, gesloten, voltooid met een waarde). Windows-specifieke aanroepen zijn beperkt tot win32.rs en hun Linux- en macOS-tegenhangers tot unix.rs (beginnend met de sessie, de browserhost, geluiden, tonen in map, de crashhandler); elk ander bestand is veilige, draagbare Rust. Lettertypen komen van het systeem: Windows' lettertypefolder, macOS's systeemlettertypen, fontconfig op Linux (theme.rs).

De downloadlijst en instellingen worden atomisch opgeslagen in %APPDATA%\misterdownloadmanager\ (downloads.json). De browserhost leest hetzelfde bestand voor de vastlegregels, dus een wijziging in Opties is van toepassing op de volgende vastgelegde download.

Browserintegratie

page ──► extension ──native messaging──► mdm-nmhost ──ipc──► app

De extensie vraagt de host welke bestandstypen moeten worden overgenomen, controleert elke download hierop en annuleert de download van de browser pas nadat de app deze heeft geaccepteerd; anders behoudt de browser deze.

Vertalingen

Elke tekst die de UI toont, gaat via crate::i18n (craft-i18n catalogi, i18n/<locale>.tsv). tools/i18n/extract.py herbouwt i18n/en.tsv vanuit de bron, met een notitie voor vertalers bij elke tekst (wat het is, waar het wordt getoond, de placeholders).

Tests en benchmarks

cargo testvoert unit-tests en end-to-end downloads uit tegen mdm-labserver met geïnjecteerde fouten (trage, verbroken en geweigerde verbindingen, servers zonder bereiken, veranderende bestanden). tools/bench voert de gepubliceerde snelheidsvergelijking uit; de ruwe data staat in docs/bench/.

Gratis, open source, geen advertenties, geen proefversie.

Mister Download Manager downloaden