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