Mister Download Manager
  1. Strona główna
  2. Pomoc
  3. Architektura

Architektura

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