Mister Download Manager
  1. Início
  2. Ajuda
  3. Arquitetura

Arquitetura

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