Mister Download Manager
  1. Inicio
  2. Ayuda
  3. Arquitectura

Arquitectura

Cómo encajan las piezas de Mister Download Manager.

Crates

Ruta Crate Función
crates/engine mdm-engine Descarga un archivo por HTTP(S) o FTP(S): sondeo, planificador de segmentos, trabajadores de conexión, estado de reanudación, límites por host, limitador de velocidad, sumas de comprobación, scripts de proxy
crates/app mdm-app La aplicación de escritorio (misterdownloadmanager.exe, egui): lista, categorías, colas, planificador, diálogos, bandeja, ajustes
crates/cli mdm-cli Descargas sin interfaz con progreso (get, resume)
crates/mcp mdm-mcp El servidor MCP (misterdownloadmanager-mcp): los asistentes de IA listan, añaden y controlan las descargas de la aplicación en ejecución a través de la API de automatización
crates/nmhost mdm-nmhost El host de mensajería nativa del navegador: toma las descargas capturadas de la extensión y las entrega a la aplicación
crates/ipc mdm-ipc El canal de instancia única (un socket local protegido por token), la carpeta de datos y las reglas de captura compartidas por la aplicación y el host
crates/tools mdm-tools Páginas de vídeo a través de yt-dlp y ffmpeg (ejecutados como programas separados)
crates/crash mdm-crash Informes de fallos y bloqueos: el proceso de monitorización, minivolcados fuera de proceso, pilas simbolizadas, el texto del informe y los registros de la versión (crash-reports.md)
crates/torrent mdm-torrent Enlaces BitTorrent y magnet a través de librqbit
crates/labserver mdm-labserver Un servidor HTTP Range con un registro de solicitudes e inyección de fallos, y un servidor FTP/FTPS con sus propios fallos, para pruebas y puntos de referencia
extension/ — La extensión para Chromium (MV3) y Firefox
docs/ — La guía de usuario y los tutoriales (Ayuda los abre), este archivo, los datos de referencia
website/ — Las páginas de un futuro sitio web (aún no publicadas)

Las dependencias apuntan hacia dentro: app, cli, mcp y nmhost usan engine y ipc; el motor no sabe nada de la interfaz de usuario. La aplicación ve el motor solo a través de sus eventos (progreso, instantáneas de la tabla de segmentos, finalizado, fallido).

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

Cuando cada segmento está hecho, el archivo parcial se comprueba con el tamaño esperado y se renombra en su lugar; la fecha del archivo puede seguir la del servidor.

FTP y FTPS (ftp.rs) pasan por el mismo planificador, trabajadores y estado: un segmento es REST + RETR en una sesión de control en lugar de un GET con rango, SIZE y MDTM sustituyen a las cabeceras, y las sesiones se agrupan por descarga y se reutilizan entre segmentos.

Aplicación

Una ventana egui pintada en coordenadas de píxeles fijas, más una ventana gráfica inmediata por diálogo. app.rs contiene el estado (descargas, colas, ajustes, la selección de la lista) y convierte los comandos de menú, barra de herramientas, teclado e IPC en acciones. Cada diálogo es su propio módulo y devuelve un Outcome (abierto, cerrado, hecho con un valor). Las llamadas solo para Windows se limitan a win32.rs y sus equivalentes para Linux y macOS a unix.rs (empezando por la sesión, el host de los navegadores, sonidos, mostrar en carpeta, el gestor de fallos); cualquier otro archivo es Rust seguro y portable. Las fuentes provienen del sistema: la carpeta Fuentes de Windows, las fuentes del sistema de macOS, fontconfig en Linux (theme.rs).

La lista de descargas y los ajustes se guardan atómicamente en %APPDATA%\misterdownloadmanager\ (downloads.json). El host del navegador lee el mismo archivo para las reglas de captura, por lo que un cambio en Opciones se aplica a la siguiente descarga capturada.

Integración con el navegador

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

La extensión pregunta al host qué tipos de archivo debe tomar, comprueba cada descarga con ellos y cancela la descarga del navegador solo después de que la aplicación la haya aceptado; de lo contrario, el navegador la mantiene.

Traducciones

Cada texto que muestra la interfaz de usuario pasa por crate::i18n (catálogos craft-i18n, i18n/<locale>.tsv). tools/i18n/extract.py reconstruye i18n/en.tsv desde el origen, con una nota para los traductores en cada texto (qué es, dónde se muestra, sus marcadores de posición).

Pruebas y puntos de referencia

cargo testejecuta pruebas unitarias y descargas de extremo a extremo contra mdm-labserver con fallos inyectados (conexiones lentas, caídas y rechazadas, servidores sin rangos, archivos cambiantes). tools/bench ejecuta la comparación de velocidad publicada; sus datos brutos están en docs/bench/.

Gratis, código abierto, sin anuncios, sin prueba.

Descargar Mister Download Manager