Як взаємодіють компоненти Mister Download Manager.
Крейтси
| Шлях | Крейтс | Роль |
|---|---|---|
crates/engine |
mdm-engine |
Завантажує один файл через HTTP(S) або FTP(S): зондування, планувальник сегментів, робочі з'єднання, стан відновлення, обмеження для кожного хоста, обмежувач швидкості, контрольні суми, проксі-скрипти |
crates/app |
mdm-app |
Настільна програма (misterdownloadmanager.exe, egui): список, категорії, черги, планувальник, діалоги, трей, налаштування |
crates/cli |
mdm-cli |
Безголові завантаження з прогресом (get, resume) |
crates/mcp |
mdm-mcp |
Сервер MCP (misterdownloadmanager-mcp): помічники ШІ перераховують, додають та контролюють завантаження запущеної програми через API автоматизації |
crates/nmhost |
mdm-nmhost |
Нативний хост обміну повідомленнями браузера: приймає перехоплені завантаження від розширення та передає їх програмі |
crates/ipc |
mdm-ipc |
Одноекземплярний канал (локальний сокет, захищений токеном), папка даних та правила перехоплення, що використовуються програмою та хостом |
crates/tools |
mdm-tools |
Відеосторінки через yt-dlp та ffmpeg (запускаються як окремі програми) |
crates/crash |
mdm-crash |
Звіти про збої та зависання: процес монітора, позапроцесні мінідампи, символізовані стеки, текст звіту та журнали випусків (crash-reports.md) |
crates/torrent |
mdm-torrent |
BitTorrent та магнітні посилання через librqbit |
crates/labserver |
mdm-labserver |
Сервер HTTP Range з журналом запитів та впровадженням помилок, а також сервер FTP/FTPS з власними помилками, для тестів та бенчмарків |
extension/ |
— | Розширення Chromium (MV3) та Firefox |
docs/ |
— | Посібник користувача та навчальні посібники (Довідка відкриває їх), цей файл, дані бенчмарків |
website/ |
— | Сторінки майбутнього вебсайту (ще не опубліковані) |
Залежності вказують всередину: app, cli, mcp та nmhost використовують engine та ipc; рушій нічого не знає про інтерфейс користувача. Програма бачить рушій лише через його події (прогрес, знімки таблиці сегментів, завершено, невдало).
Рушій
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
Коли кожен сегмент завершено, файл частини перевіряється на відповідність очікуваному розміру та перейменовується на місце; дата файлу може відповідати даті сервера.
FTP та FTPS (ftp.rs) проходять через той самий планувальник, робочі процеси та стан: сегмент — це REST + RETR у сесії керування замість діапазонного GET, SIZE та MDTM замінюють заголовки, а сесії об'єднуються для кожного завантаження та повторно використовуються між сегментами.
Програма
Одне вікно egui, намальоване за фіксованими піксельними координатами, плюс один безпосередній вікно перегляду для кожного діалогового вікна. app.rs зберігає стан (завантаження, черги, налаштування, вибір списку) та перетворює команди меню, панелі інструментів, клавіш та IPC на дії. Кожне діалогове вікно є власним модулем і повертає Outcome (відкрито, закрито, виконано зі значенням). Виклики лише для Windows обмежені win32.rs, а їхні аналоги для Linux та macOS — unix.rs (починаючи з сесії, хоста браузерів, звуків, показу в папці, обробника збоїв); кожен інший файл є безпечним, портативним Rust. Шрифти надходять із системи: папка Fonts у Windows, системні шрифти macOS, fontconfig у Linux (theme.rs).
Список завантажень та налаштування зберігаються атомарно в %APPDATA%\misterdownloadmanager\ (downloads.json). Хост браузера читає той самий файл для правил перехоплення, тому зміна в Параметрах застосовується до наступного перехопленого завантаження.
Інтеграція з браузером
page ──► extension ──native messaging──► mdm-nmhost ──ipc──► app
Розширення запитує у хоста, які типи файлів брати, перевіряє кожне завантаження на відповідність їм і скасовує завантаження браузера лише після того, як програма його прийняла; інакше браузер залишає його.
Переклади
Кожен текст, який відображає інтерфейс користувача, проходить через crate::i18n (каталоги craft-i18n, i18n/<locale>.tsv). tools/i18n/extract.py перебудовує i18n/en.tsv з джерела, з приміткою для перекладачів до кожного тексту (що це, де відображається, його заповнювачі).
Тести та бенчмарки
cargo testзапускає модульні тести та наскрізні завантаження проти mdm-labserver з впровадженими помилками (повільні, відкинуті та відхилені з'єднання, сервери без діапазонів, файли, що змінюються). tools/bench запускає опубліковане порівняння швидкості; його необроблені дані знаходяться в docs/bench/.
Безкоштовно, з відкритим кодом, без реклами, без пробного періоду.
Завантажити Mister Download Manager