Mister Download Manager の各部分がどのように連携するか。
クレート
| パス | クレート | 役割 |
|---|---|---|
crates/engine |
mdm-engine |
HTTP(S)またはFTP(S)経由で1つのファイルをダウンロード: プローブ、セグメントプランナー、接続ワーカー、レジューム状態、ホストごとの制限、速度制限、チェックサム、プロキシスクリプト |
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 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) は同じプランナー、ワーカー、状態を通過します。セグメントは、範囲指定された GET の代わりに制御セッション上の REST + RETR であり、SIZE と MDTM はヘッダーの代わりとなり、セッションはダウンロードごとにプールされ、セグメント間で再利用されます。
アプリ
固定ピクセル座標に描画される1つのeguiウィンドウと、ダイアログごとに1つの即時ビューポート。app.rs は状態 (ダウンロード、キュー、設定、リストの選択) を保持し、メニュー、ツールバー、キー、IPCコマンドをアクションに変換します。各ダイアログは独自のモジュールであり、Outcome (開いている、閉じている、値で完了) を返します。Windows専用の呼び出しは win32.rs に、LinuxおよびmacOSの対応する呼び出しは unix.rs に限定されます (セッション、ブラウザのホスト、サウンド、フォルダで表示、クラッシュハンドラから始まります)。その他のファイルはすべて安全でポータブルなRustです。フォントはシステムから取得されます: WindowsのFontsフォルダ、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をダウンロード