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 Transfere um ficheiro por HTTP(S) ou FTP(S): sonda, planeador de segmentos, trabalhadores de ligação, estado de retoma, limites por anfitrião, limitador de velocidade, somas de verificação, scripts de proxy
crates/app mdm-app A aplicação de ambiente de trabalho (misterdownloadmanager.exe, egui): lista, categorias, filas, agendador, diálogos, tabuleiro, definições
crates/cli mdm-cli Transferências sem interface com progresso (get, resume), vídeos, torrents e os comandos da API de automação: uma biblioteca que o programa da aplicação executa (misterdownloadmanager --cli …), e misterdownloadmanager-cli, um pequeno iniciador que a inicia com os mesmos argumentos, terminal e código de saída
crates/mcp mdm-mcp O servidor MCP (misterdownloadmanager-mcp): assistentes de IA listam, adicionam e controlam as transferências da aplicação em execução através da API de automação
crates/nmhost mdm-nmhost O anfitrião de mensagens nativas do navegador: recebe as transferências capturadas da extensão e as entrega à aplicação
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 partilhadas pela aplicação e pelo anfitrião
crates/tools mdm-tools Páginas de vídeo através de yt-dlp e ffmpeg (executados como programas separados)
crates/crash mdm-crash Relatórios de falhas e bloqueios: o processo de monitorização, minidumps fora do processo, pilhas simbolizadas, o texto do relatório e os registos de lançamento (crash-reports.md)
crates/torrent mdm-torrent BitTorrent e ligações magnéticas através de librqbit
crates/labserver mdm-labserver Um servidor HTTP Range com um registo de pedidos e injeção de falhas, e um servidor FTP/FTPS com as suas próprias falhas, para testes e benchmarks
extension/ — A extensão Chromium (MV3) e Firefox
docs/ — O guia do utilizador e tutoriais (Ajuda abre-os), este ficheiro, os dados de benchmark
website/ — Páginas de um futuro website (ainda não publicadas)

As dependências apontam para dentro: app, cli, mcp e nmhost usam engine e ipc; o motor não sabe nada da interface. A aplicação vê o motor apenas através dos seus eventos (progresso, instantâneos da tabela de segmentos, concluído, 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 estão concluídos, o ficheiro de parte é verificado em relação ao tamanho esperado e renomeado para o local; a data do ficheiro pode seguir a do servidor.

FTP e FTPS (ftp.rs) passam pelo mesmo planeador, trabalhadores e estado: um segmento é REST + RETR numa sessão de controlo em vez de um GET com intervalo, SIZE e MDTM substituem os cabeçalhos, e as sessões são agrupadas por transferência e reutilizadas entre segmentos.

Aplicação

Uma janela egui desenhada para coordenadas de pixel fixas, mais uma viewport imediata por diálogo. app.rs mantém o estado (transferências, filas, definições, a seleção da lista) e transforma comandos de menu, barra de ferramentas, teclado e IPC em ações. Cada diálogo é o seu próprio módulo e retorna um Outcome (aberto, fechado, concluído com um valor). As chamadas apenas para Windows estão confinadas a win32.rs e as suas contrapartes para Linux e macOS a unix.rs (começando com a sessão, o anfitrião dos navegadores, sons, mostrar na pasta, o manipulador de falhas); todos os outros ficheiros 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 transferências e as definições são guardadas atomicamente em %APPDATA%\misterdownloadmanager\ (downloads.json). O anfitrião do navegador lê o mesmo ficheiro para as regras de captura, então uma alteração em Opções aplica-se à próxima transferência capturada.

Integração com o navegador

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

A extensão pergunta ao anfitrião quais os tipos de ficheiro a capturar, verifica cada transferência em relação a eles e cancela a transferência do navegador apenas depois de a aplicação a ter aceite; caso contrário, o navegador a mantém.

Traduções

Todo o 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 os tradutores em cada texto (o que é, onde aparece, os seus marcadores de posição).

Testes e benchmarks

cargo testexecuta testes unitários e transferências de ponta a ponta contra mdm-labserver com falhas injetadas (ligações lentas, perdidas e recusadas, servidores sem intervalos, ficheiros em mudança). tools/bench executa a comparação de velocidade publicada; os seus dados brutos estão em docs/bench/.

Gratuito, de código aberto, sem anúncios, sem período de avaliação.

Transferir Mister Download Manager