Mister Download Manager
  1. Home
  2. Guida
  3. Architettura

Architettura

Come si integrano i componenti di Mister Download Manager.

Crates

Percorso Crate Ruolo
crates/engine mdm-engine Scarica un file tramite HTTP(S) o FTP(S): sonda, pianificatore di segmenti, worker di connessione, stato di ripristino, limiti per host, limitatore di velocità, checksum, script proxy
crates/app mdm-app L'app desktop (misterdownloadmanager.exe, egui): elenco, categorie, code, scheduler, finestre di dialogo, tray, impostazioni
crates/cli mdm-cli Download senza interfaccia grafica con progressi (get, resume)
crates/mcp mdm-mcp Il server MCP (misterdownloadmanager-mcp): gli assistenti AI elencano, aggiungono e controllano i download dell'app in esecuzione tramite l'API di automazione
crates/nmhost mdm-nmhost L'host di messaggistica nativa del browser: prende i download catturati dall'estensione e li passa all'app
crates/ipc mdm-ipc Il canale a istanza singola (un socket locale protetto da token), la cartella dati e le regole di cattura condivise dall'app e dall'host
crates/tools mdm-tools Pagine video tramite yt-dlp e ffmpeg (eseguiti come programmi separati)
crates/crash mdm-crash Rapporti di crash e blocco: il processo di monitoraggio, minidump out-of-process, stack simbolici, il testo del rapporto e i log di rilascio (crash-reports.md)
crates/torrent mdm-torrent BitTorrent e link magnet tramite librqbit
crates/labserver mdm-labserver Un server HTTP Range con un log delle richieste e iniezione di errori, e un server FTP/FTPS con i propri errori, per test e benchmark
extension/ — L'estensione per Chromium (MV3) e Firefox
docs/ — La guida utente e i tutorial (la Guida li apre), questo file, i dati del benchmark
website/ — Pagine di un futuro sito web (non ancora pubblicate)

Le dipendenze puntano verso l'interno: app, cli, mcp e nmhost usano engine e ipc; il motore non sa nulla dell'interfaccia utente. L'app vede il motore solo attraverso i suoi eventi (progresso, snapshot della tabella dei segmenti, completato, fallito).

Motore

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

Quando ogni segmento è completato, il file temporaneo viene controllato rispetto alla dimensione prevista e rinominato nella sua posizione finale; la data del file può seguire quella del server.

FTP e FTPS (ftp.rs) passano attraverso lo stesso pianificatore, worker e stato: un segmento è REST + RETR su una sessione di controllo invece di un GET con range, SIZE e MDTM sostituiscono le intestazioni, e le sessioni sono raggruppate per download e riutilizzate tra i segmenti.

App

Una finestra egui disegnata a coordinate fisse in pixel, più una viewport immediata per ogni finestra di dialogo. app.rs contiene lo stato (download, code, impostazioni, la selezione dell'elenco) e trasforma i comandi di menu, barra degli strumenti, tastiera e IPC in azioni. Ogni finestra di dialogo è un modulo a sé stante e restituisce un Outcome (aperto, chiuso, completato con un valore). Le chiamate solo per Windows sono confinate a win32.rs e le loro controparti per Linux e macOS a unix.rs (a partire dalla sessione, l'host dei browser, i suoni, mostra nella cartella, il gestore dei crash); ogni altro file è Rust sicuro e portatile. I font provengono dal sistema: la cartella Fonts di Windows, i font di sistema di macOS, fontconfig su Linux (theme.rs).

L'elenco dei download e le impostazioni vengono salvati atomicamente in %APPDATA%\misterdownloadmanager\ (downloads.json). L'host del browser legge lo stesso file per le regole di cattura, quindi una modifica in Opzioni si applica al prossimo download catturato.

Integrazione con il browser

page ──► extension ──native messaging──► mdm-nmhost ──ipc──► app

L'estensione chiede all'host quali tipi di file acquisire, controlla ogni download rispetto a essi e annulla il download del browser solo dopo che l'app lo ha accettato; altrimenti il browser lo mantiene.

Traduzioni

Ogni testo mostrato dall'interfaccia utente passa attraverso crate::i18n (cataloghi craft-i18n, i18n/<locale>.tsv). tools/i18n/extract.py ricostruisce i18n/en.tsv dalla sorgente, con una nota per i traduttori su ogni testo (cos'è, dove appare, i suoi segnaposto).

Test e benchmark

cargo testesegue test unitari e download end-to-end contro mdm-labserver con errori iniettati (connessioni lente, interrotte e rifiutate, server senza range, file che cambiano). tools/bench esegue il confronto di velocità pubblicato; i suoi dati grezzi si trovano in docs/bench/.

Gratuito, open source, senza pubblicità, senza versioni di prova.

Scarica Mister Download Manager