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): AI असिस्टेंट चल रहे ऐप के डाउनलोड को ऑटोमेशन 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 |
librqbit के माध्यम से BitTorrent और मैग्नेट लिंक |
crates/labserver |
mdm-labserver |
अनुरोध लॉग और फ़ॉल्ट इंजेक्शन के साथ एक HTTP रेंज सर्वर, और परीक्षण और बेंचमार्क के लिए अपनी स्वयं की त्रुटियों के साथ एक 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) उसी प्लानर, वर्कर और स्थिति से होकर गुजरते हैं: एक सेगमेंट एक रेंज्ड GET के बजाय एक कंट्रोल सेशन पर REST + RETR होता है, SIZE और MDTM हेडर के लिए होते हैं, और सेशन प्रति डाउनलोड पूल किए जाते हैं और सेगमेंट के बीच पुन: उपयोग किए जाते हैं।
ऐप
एक egui विंडो जो निश्चित पिक्सेल निर्देशांक पर चित्रित होती है, साथ ही प्रति डायलॉग एक तत्काल व्यूपोर्ट। app.rs स्थिति (डाउनलोड, कतारें, सेटिंग्स, सूची का चयन) रखता है और मेनू, टूलबार, कुंजी और IPC कमांड को क्रियाओं में बदलता है। प्रत्येक डायलॉग अपना मॉड्यूल है और एक Outcome (खुला, बंद, एक मान के साथ किया गया) लौटाता है। Windows-केवल कॉल win32.rs तक सीमित हैं और उनके Linux और macOS समकक्ष unix.rs तक (सत्र से शुरू होकर, ब्राउज़र का होस्ट, ध्वनियाँ, फ़ोल्डर में दिखाएँ, क्रैश हैंडलर); हर दूसरी फ़ाइल सुरक्षित, पोर्टेबल Rust है। फ़ॉन्ट सिस्टम से आते हैं: Windows का फ़ॉन्ट फ़ोल्डर, macOS के सिस्टम फ़ॉन्ट, Linux पर fontconfig (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इंजेक्टेड फ़ॉल्ट्स (धीमे, छोड़े गए और अस्वीकृत कनेक्शन, बिना रेंज वाले सर्वर, बदलती फ़ाइलें) के साथ mdm-labserver के विरुद्ध यूनिट टेस्ट और एंड-टू-एंड डाउनलोड चलाता है। tools/bench प्रकाशित गति तुलना चलाता है; इसका कच्चा डेटा docs/bench/ में है।
मुफ़्त, ओपन सोर्स, कोई विज्ञापन नहीं, कोई ट्रायल नहीं।
Mister Download Manager डाउनलोड करें