Mister Download Manager
  1. ホーム
  2. ヘルプ
  3. アーキテクチャ

アーキテクチャ

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をダウンロード