ส่วนประกอบต่าง ๆ ของ Mister Download Manager ทำงานร่วมกันอย่างไร
Crates
| เส้นทาง | Crate | บทบาท |
|---|---|---|
crates/engine |
mdm-engine |
ดาวน์โหลดไฟล์เดียวผ่าน HTTP(S) หรือ FTP(S): การตรวจสอบ, ตัววางแผนส่วน, ตัวทำงานการเชื่อมต่อ, สถานะการดำเนินการต่อ, ขีดจำกัดต่อโฮสต์, ตัวจำกัดความเร็ว, เช็คซัม, สคริปต์พร็อกซี |
crates/app |
mdm-app |
แอปเดสก์ท็อป (misterdownloadmanager.exe, egui): รายการ, หมวดหมู่, คิว, ตัวจัดกำหนดการ, กล่องโต้ตอบ, ถาด, การตั้งค่า |
crates/cli |
mdm-cli |
การดาวน์โหลดแบบ Headless พร้อมความคืบหน้า (get, resume) |
crates/mcp |
mdm-mcp |
เซิร์ฟเวอร์ MCP (misterdownloadmanager-mcp): ผู้ช่วย AI แสดงรายการ เพิ่ม และควบคุมการดาวน์โหลดของแอปที่กำลังทำงานอยู่ผ่าน API ระบบอัตโนมัติ |
crates/nmhost |
mdm-nmhost |
โฮสต์การส่งข้อความดั้งเดิมของเบราว์เซอร์: รับการดาวน์โหลดที่ถูกจับจากส่วนขยายและส่งต่อไปยังแอป |
crates/ipc |
mdm-ipc |
ช่องทางอินสแตนซ์เดียว (ซ็อกเก็ตภายในที่ป้องกันด้วยโทเค็น), โฟลเดอร์ข้อมูล และกฎการจับภาพที่แอปและโฮสต์ใช้ร่วมกัน |
crates/tools |
mdm-tools |
หน้าวิดีโอผ่าน yt-dlp และ ffmpeg (ทำงานเป็นโปรแกรมแยกต่างหาก) |
crates/crash |
mdm-crash |
รายงานข้อขัดข้องและค้าง: กระบวนการตรวจสอบ, minidumps นอกกระบวนการ, สแต็กที่มีสัญลักษณ์, ข้อความรายงานและบันทึกการเผยแพร่ (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; เอ็นจินไม่รู้เรื่อง UI แอปเห็นเอ็นจินผ่านเหตุการณ์เท่านั้น (ความคืบหน้า, สแนปช็อตตารางส่วน, เสร็จสิ้น, ล้มเหลว)
เอ็นจิน
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
ส่วนขยายจะถามโฮสต์ว่าประเภทไฟล์ใดที่จะรับ ตรวจสอบการดาวน์โหลดแต่ละรายการกับประเภทเหล่านั้น และยกเลิกการดาวน์โหลดของเบราว์เซอร์หลังจากที่แอปยอมรับแล้วเท่านั้น มิฉะนั้นเบราว์เซอร์จะเก็บไว้
คำแปล
ข้อความทุกข้อความที่ UI แสดงจะผ่าน crate::i18n (แค็ตตาล็อก craft-i18n, i18n/<locale>.tsv) tools/i18n/extract.py สร้าง i18n/en.tsv ใหม่จากแหล่งที่มา พร้อมบันทึกสำหรับนักแปลในแต่ละข้อความ (คืออะไร, แสดงที่ไหน, ตัวยึดตำแหน่ง)
การทดสอบและเกณฑ์มาตรฐาน
cargo testรันการทดสอบหน่วยและการดาวน์โหลดแบบ end-to-end กับ mdm-labserver ด้วยข้อผิดพลาดที่ถูกแทรก (การเชื่อมต่อช้า, หลุดและถูกปฏิเสธ, เซิร์ฟเวอร์ที่ไม่มีช่วง, ไฟล์ที่เปลี่ยนแปลง) tools/bench รันการเปรียบเทียบความเร็วที่เผยแพร่; ข้อมูลดิบอยู่ใน docs/bench/
ฟรี, โอเพนซอร์ส, ไม่มีโฆษณา, ไม่มีช่วงทดลองใช้
ดาวน์โหลด Mister Download Manager