Fuente M440, modo sin conexión (servidor sin internet y app sin servidor), cola del dispositivo en Colas y arreglo del reescalado de tiras altas

- M440 (m440.in, español): búsqueda, populares, actualizados paginados, ficha, capítulos, descargas y seguimiento. La lista de capítulos viene cifrada: la clave se saca de un script ofuscado del sitio ejecutándolo en un proceso aislado con permisos mínimos (m440-key.mjs) y se renueva sola.
- Servidor sin internet (connectivity.js): se detecta en segundos; las fuentes fallan al instante, la portada muestra lo descargado en el servidor con buscador, portadas locales de respaldo, descargas y comprobaciones en pausa y reanudación automática al volver la conexión.
- App sin conexión con el servidor: el service worker usa la copia guardada si el servidor no contesta en 3 s, las peticiones comprueban si el servidor sigue vivo en vez de quedarse colgadas, aviso arriba e inicio con lo guardado en el dispositivo; al volver, se reconecta sola y envía el progreso pendiente.
- Colas: sección «En este dispositivo» con el guardado en curso en directo y cancelación (sin dejar capítulos a medias); también visible sin servidor.
- Imágenes: el proxy y el guardado en el dispositivo reintentan con tiempo límite cuando el CDN de la fuente falla.
- Reescalado HD: las páginas que superan 16383 px al reescalar (tiras de webtoon) se reducen al límite de WebP en vez de hacer fallar el capítulo.
- Entidades HTML con nombre en las sinopsis; pestañas de fuentes cortas en móvil; portadas rotas con icono de respaldo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-01 09:52:19 -06:00
co-authored by Claude Opus 5.5
parent d3e196a2f3
commit 86999b5725
11 changed files with 712 additions and 78 deletions
+26 -3
View File
@@ -1,12 +1,17 @@
# Manga Reader
Lector web de manga autoalojado, con las dos fuentes de
[Tanko](https://github.com/Alexandro521/Tanko) (`src/servers/`):
Lector web de manga autoalojado, con las fuentes de
[Tanko](https://github.com/Alexandro521/Tanko) (`src/servers/`) más M440:
- **LeerCapitulo** (español, por defecto): mucho más catálogo. El scraper está reescrito para el
sitio actual y ya no necesita navegador headless (las páginas vienen en el HTML).
- **MangaDex** (multi-idioma): español = es-la + es combinados. Muchos títulos populares no tienen
capítulos por licencias; la ficha ofrece buscarlos en LeerCapitulo.
capítulos por licencias; la ficha ofrece buscarlos en LeerCapitulo o M440.
- **M440** (m440.in, español): búsqueda (mínimo 3 letras), populares de su portada y actualizados
(paginado); sin categorías, porque ese listado está detrás del desafío de Cloudflare. La lista de
capítulos viene cifrada: la clave se saca de un script ofuscado del sitio ejecutándolo en un
proceso aparte sin permisos de archivos ni procesos (`app/m440-key.mjs`) y se vuelve a obtener sola
si el sitio la cambia.
- Búsqueda, populares y actualizados recientemente.
- Lector por página (toques/flechas, izq→der o der→izq) o en vertical, modo ahorro de datos.
- Usuarios con contraseña; el **historial y la página exacta** se guardan en el servidor
@@ -70,6 +75,24 @@ Sin `.env` arranca igual: puerto 3352 en todas las interfaces y descargas en `./
El primer usuario puede registrarse siempre; después el registro queda cerrado salvo
`ALLOW_SIGNUP=true` en `.env`.
## Sin internet en el servidor
Si el servidor pierde la conexión a internet (pero tú sigues llegando a él por la red local o
Tailscale), la app pasa sola a **modo sin conexión**:
- Arriba aparece el aviso «El servidor no tiene internet». La portada muestra lo **descargado en el
servidor** con un buscador, y «Continuar leyendo» solo enseña esos mangas.
- Fichas y capítulos descargados funcionan como siempre, sin esperas. Lo que no está descargado
avisa al momento en vez de quedarse cargando.
- Las portadas salen de la copia local o de la caché HD.
- Las descargas en cola se pausan (no cuentan como fallidas). La comprobación de capítulos nuevos y la
descarga anticipada esperan.
- El servidor vuelve a comprobar la conexión cada 20 s. Al volver internet, todo se reanuda solo y
la portada vuelve a la normalidad.
Se detecta cuando una fuente falla por red y ninguno de MangaDex, LeerCapitulo, M440 ni 1.1.1.1
responde (`app/connectivity.js`).
## Exponerlo a internet
- **Pon HTTPS delante** (Caddy, Nginx, Cloudflare Tunnel o `tailscale funnel`): sin HTTPS la contraseña