نحوه کنار هم قرار گرفتن اجزای 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