Mister Download Manager
  1. Головна
  2. Довідка
  3. Архітектура

Архітектура

Як взаємодіють компоненти 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