Jak poszczególne części Mister Download Manager do siebie pasują.
Pakiety
| Ścieżka | Pakiet | Rola |
|---|---|---|
crates/engine |
mdm-engine |
Pobiera jeden plik przez HTTP(S) lub FTP(S): sonda, planowanie segmentów, połączenia, stan wznowienia, limity na hosta, ogranicznik prędkości, sumy kontrolne, skrypty proxy |
crates/app |
mdm-app |
Aplikacja desktopowa (misterdownloadmanager.exe, egui): lista, kategorie, kolejki, harmonogram, okna dialogowe, zasobnik systemowy, ustawienia |
crates/cli |
mdm-cli |
Pobieranie bez interfejsu z postępem (get, resume) |
crates/mcp |
mdm-mcp |
Serwer MCP (misterdownloadmanager-mcp): lista asystentów AI, dodawanie i kontrolowanie pobierania uruchomionej aplikacji poprzez API automatyzacji |
crates/nmhost |
mdm-nmhost |
Host natywnych wiadomości przeglądarki: pobiera przechwycone pliki z rozszerzenia i przekazuje je do aplikacji |
crates/ipc |
mdm-ipc |
Kanał pojedynczej instancji (lokalny socket chroniony tokenem), folder danych i reguły przechwytywania współdzielone przez aplikację i hosta |
crates/tools |
mdm-tools |
Strony wideo przez yt-dlp i ffmpeg (uruchamiane jako oddzielne programy) |
crates/crash |
mdm-crash |
Raporty o awariach i zawieszeniach: proces monitorujący, minidumpy poza procesem, symboliczne stosy, tekst raportu i logi wydania (crash-reports.md) |
crates/torrent |
mdm-torrent |
BitTorrent i linki magnetyczne przez librqbit |
crates/labserver |
mdm-labserver |
Serwer HTTP Range z logiem żądań i wstrzykiwaniem błędów, oraz serwer FTP/FTPS z własnymi błędami, do testów i benchmarków |
extension/ |
— | Rozszerzenie dla Chromium (MV3) i Firefox |
docs/ |
— | Podręcznik użytkownika i samouczki (Pomoc je otwiera), ten plik, dane benchmarków |
website/ |
— | Strony przyszłej witryny (jeszcze nieopublikowane) |
Zależności wskazują do wewnątrz: app, cli, mcp i nmhost używają engine i ipc; silnik nic nie wie o interfejsie użytkownika. Aplikacja widzi silnik tylko poprzez jego zdarzenia (postęp, migawki tabeli segmentów, zakończone, nieudane).
Silnik
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
Gdy wszystkie segmenty zostaną ukończone, plik tymczasowy jest sprawdzany pod kątem oczekiwanego rozmiaru i zmieniany na właściwą nazwę; data pliku może być zgodna z datą serwera.
FTP i FTPS (ftp.rs) przechodzą przez ten sam planer, pracowników i stan: segment to REST + RETR w sesji kontrolnej zamiast zakresowego GET, SIZE i MDTM zastępują nagłówki, a sesje są grupowane na pobieranie i ponownie używane między segmentami.
Aplikacja
Jedno okno egui rysowane do stałych współrzędnych pikseli, plus jeden natychmiastowy obszar widoku na każde okno dialogowe. app.rs przechowuje stan (pobrane pliki, kolejki, ustawienia, zaznaczenie listy) i zamienia polecenia z menu, paska narzędzi, klawiatury oraz IPC w akcje. Każde okno dialogowe jest własnym modułem i zwraca Outcome (otwarte, zamknięte, zakończone z wartością). Wywołania specyficzne dla Windows są ograniczone do win32.rs, a ich odpowiedniki dla Linux i macOS do unix.rs (począwszy od sesji, hosta przeglądarek, dźwięków, pokaż w folderze, obsługi awarii); każdy inny plik to bezpieczny, przenośny kod Rust. Czcionki pochodzą z systemu: folder Fonts w Windows, czcionki systemowe w macOS, fontconfig w Linux (theme.rs).
Lista pobierania i ustawienia są zapisywane atomowo w %APPDATA%\misterdownloadmanager\ (downloads.json). Host przeglądarki odczytuje ten sam plik dla reguł przechwytywania, więc zmiana w Opcjach ma zastosowanie do następnego przechwyconego pobierania.
Integracja z przeglądarką
page ──► extension ──native messaging──► mdm-nmhost ──ipc──► app
Rozszerzenie pyta hosta, jakie typy plików ma pobrać, sprawdza każde pobieranie pod ich kątem i anuluje pobieranie przeglądarki dopiero po zaakceptowaniu go przez aplikację; w przeciwnym razie przeglądarka je zachowuje.
Tłumaczenia
Każdy tekst wyświetlany przez interfejs użytkownika przechodzi przez crate::i18n (katalogi craft-i18n, i18n/<locale>.tsv). tools/i18n/extract.py odbudowuje i18n/en.tsv ze źródła, z notatką dla tłumaczy przy każdym tekście (co to jest, gdzie się wyświetla, jego symbole zastępcze).
Testy i benchmarki
cargo testuruchamia testy jednostkowe i kompleksowe pobieranie w stosunku do mdm-labserver z wstrzykniętymi błędami (wolne, zerwane i odrzucone połączenia, serwery bez zakresów, zmieniające się pliki). tools/bench uruchamia opublikowane porównanie prędkości; jego surowe dane znajdują się w docs/bench/.
Darmowy, open source, bez reklam, bez wersji próbnej.
Pobierz Mister Download Manager