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