Como as partes do Mister Download Manager se encaixam.
Crates
| Caminho | Crate | Função |
|---|---|---|
crates/engine |
mdm-engine |
Baixa um arquivo via HTTP(S) ou FTP(S): sonda, planejador de segmentos, workers de conexão, estado de retomada, limites por host, limitador de velocidade, somas de verificação, scripts de proxy |
crates/app |
mdm-app |
O aplicativo de desktop (misterdownloadmanager.exe, egui): lista, categorias, filas, agendador, diálogos, bandeja, configurações |
crates/cli |
mdm-cli |
Downloads sem interface com progresso (get, resume) |
crates/mcp |
mdm-mcp |
O servidor MCP (misterdownloadmanager-mcp): lista de assistentes de IA, adiciona e controla os downloads do aplicativo em execução através da API de automação |
crates/nmhost |
mdm-nmhost |
O host de mensagens nativas do navegador: recebe downloads capturados da extensão e os entrega ao aplicativo |
crates/ipc |
mdm-ipc |
O canal de instância única (um socket local protegido por token), a pasta de dados e as regras de captura compartilhadas pelo aplicativo e pelo host |
crates/tools |
mdm-tools |
Páginas de vídeo via yt-dlp e ffmpeg (executados como programas separados) |
crates/crash |
mdm-crash |
Relatórios de falhas e travamentos: o processo de monitoramento, minidumps fora do processo, pilhas simbolizadas, o texto do relatório e os logs de lançamento (crash-reports.md) |
crates/torrent |
mdm-torrent |
Links BitTorrent e magnet via librqbit |
crates/labserver |
mdm-labserver |
Um servidor HTTP Range com um log de requisições e injeção de falhas, e um servidor FTP/FTPS com suas próprias falhas, para testes e benchmarks |
extension/ |
— | A extensão para Chromium (MV3) e Firefox |
docs/ |
— | O guia do usuário e tutoriais (Ajuda os abre), este arquivo, os dados de benchmark |
website/ |
— | Páginas de um futuro site (ainda não publicado) |
As dependências apontam para dentro: app, cli, mcp e nmhost usam engine e ipc; o motor não sabe nada da interface. O aplicativo vê o motor apenas através de seus eventos (progresso, snapshots da tabela de segmentos, finalizado, falhou).
Motor
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 todos os segmentos são concluídos, o arquivo de parte é verificado em relação ao tamanho esperado e renomeado para o local; a data do arquivo pode seguir a do servidor.
FTP e FTPS (ftp.rs) passam pelo mesmo planejador, workers e estado: um segmento é REST + RETR em uma sessão de controle em vez de um GET com intervalo, SIZE e MDTM substituem os cabeçalhos, e as sessões são agrupadas por download e reutilizadas entre segmentos.
Aplicativo
Uma janela egui pintada em coordenadas de pixel fixas, mais uma viewport imediata por diálogo. app.rs mantém o estado (downloads, filas, configurações, a seleção da lista) e transforma comandos de menu, barra de ferramentas, teclado e IPC em ações. Cada diálogo é seu próprio módulo e retorna um Outcome (aberto, fechado, concluído com um valor). Chamadas apenas para Windows são confinadas a win32.rs e suas contrapartes para Linux e macOS a unix.rs (começando com a sessão, o host dos navegadores, sons, mostrar na pasta, o manipulador de falhas); todos os outros arquivos são Rust seguro e portátil. As fontes vêm do sistema: pasta Fonts do Windows, fontes do sistema do macOS, fontconfig no Linux (theme.rs).
A lista de downloads e as configurações são salvas atomicamente em %APPDATA%\misterdownloadmanager\ (downloads.json). O host do navegador lê o mesmo arquivo para as regras de captura, então uma mudança em Opções se aplica ao próximo download capturado.
Integração com o navegador
page ──► extension ──native messaging──► mdm-nmhost ──ipc──► app
A extensão pergunta ao host quais tipos de arquivo deve capturar, verifica cada download em relação a eles e cancela o download do navegador somente depois que o aplicativo o aceitou; caso contrário, o navegador o mantém.
Traduções
Todo texto que a interface mostra passa por crate::i18n (catálogos craft-i18n, i18n/<locale>.tsv). tools/i18n/extract.py reconstrói i18n/en.tsv a partir da fonte, com uma nota para tradutores em cada texto (o que é, onde aparece, seus placeholders).
Testes e benchmarks
cargo testexecuta testes de unidade e downloads de ponta a ponta contra mdm-labserver com falhas injetadas (conexões lentas, perdidas e recusadas, servidores sem intervalos, arquivos em mudança). tools/bench executa a comparação de velocidade publicada; seus dados brutos estão em docs/bench/.
Gratuito, de código aberto, sem anúncios, sem período de teste.
Baixar Mister Download Manager