Newer
Older
Sunfish / DOC / APLICACIONES.md
@Ivan Dominguez Ivan Dominguez 21 hours ago 8 KB 3.0

Aplicaciones: WinForms, consola y futuras

Todas usan Sunfish.Core y el mismo fichero de configuración; ninguna contiene lógica de servidor. Hecho (fase 3): Sunfish.exe y la TUI de sunfish-cli con shares, usuarios, puerto, arranque/parada, registro, direcciones, modo rápido, instancia única (GUI), área de notificación (GUI), icono (TUI) y subcomandos share/user. Fase 4: FTP. Fase 5: explorar otro servidor (ventana en la GUI, pestaña F4 en la TUI). Fase 7: código QR (ventana en la GUI, tecla C en la TUI), ajustes del panel web (GUI y sunfish-cli admin) e importación de la 2.0 (al crear la configuración y con sunfish-cli import-v2). Pendiente: conexiones activas, iniciar con Windows y servicio.

Teclas de la TUI: F1–F5 o Tab cambian de pestaña (Estado, Shares, Usuarios, Explorar, Registro); en Shares, A/Ins añade, Enter edita, Espacio activa/desactiva, D/Supr quita; en Usuarios, A añade, P cambia la contraseña, D borra; en Estado, S arranca/para, P cambia el puerto HTTP, F activa o desactiva FTP, T cambia el puerto FTP, N el nombre, C muestra el código QR de cada dirección (flechas: la siguiente); en Explorar, Enter conecta o abre, A escribe una dirección, R vuelve a buscar, Retroceso sube, D descarga, U sube un fichero o carpeta local, M crea carpeta, Supr borra y Esc vuelve a la lista de servidores; Q/Esc/Ctrl+C salen (con pregunta).

Lo común a todas

  • Activar y desactivar HTTP y FTP por separado; puertos.
  • Shares: alta, baja, edición de todas las opciones (SHARES-Y-RUTAS.md), activar/desactivar.
  • Usuarios y contraseñas; panel de administración (activar, contraseña, AllowFrom).
  • Direcciones: lista de IP locales por interfaz con la URL de cada share (HTTP y FTP), copiable, y un código QR de la URL para abrirla desde un móvil.
  • Registro: conexiones, descargas, subidas y errores.
  • Explorar otro servidor: lista los Sunfish de la red (descubiertos por DNS-SD) y permite escribir cualquier URL WebDAV.
    • Se navega por sus shares y se copian ficheros y carpetas en los dos sentidos.
    • Usa el cliente WebDAV de Sunfish.Core; no hay protocolo propio (ver FTP-Y-WEBDAV.md).
  • Modo rápido: si se pasa una carpeta como argumento (también arrastrándola sobre el ejecutable en el explorador), se comparte al momento.
    • Se publica en / con listado y solo lectura, se arranca el servidor y se muestran las URLs.
    • No se guarda en la configuración salvo que se pida.
  • Textos en español e inglés según el sistema; SUNFISH_LANG=es|en o --lang lo fuerzan.

Sunfish.exe (WinForms, Windows)

Aspecto de la 2.0: ventana pequeña y vertical, interfaz compacta y botones con imagen (las imágenes de la 2.0 están en src/Sunfish.WinForms/Resources/; las que faltaban, como «−» y usuarios, se dibujaron en el mismo estilo). Las imágenes se escalan a los PPP de la pantalla.

  • Ventana principal:
    • arriba, «Menú raíz» y, en columna, «Web en puerto» y «FTP en puerto» con sus puertos (cada casilla activa o desactiva su servicio; en rojo si no puede escuchar, p. ej. puerto ocupado);
    • lista de shares dibujada como en la 2.0: icono de carpeta (gris si está desactivado, con una flecha verde si admite subidas), nombre y, debajo en pequeño, location, permisos y usuarios. Arrastrar una carpeta crea un share con Location = /<nombre>;
    • abajo, botones con imagen: añadir, quitar, editar, usuarios, información (i) y «Ok», que manda la ventana al área de notificación sin parar el servidor.
  • Menú contextual de un share con iconos: abrir en el navegador, copiar URL por cada IP, abrir la carpeta, editar (en negrita), activar/desactivar y quitar.
  • Diálogo de share como el editor de la 2.0: estrecho, etiqueta encima de cada campo, obligatorios en amarillo claro y el aviso de Upload + Listing en un recuadro amarillo.
  • Ventana Explorar (botón de la pantalla): servidores de la red encontrados por DNS-SD o una dirección escrita; lista de la carpeta remota con iconos; botones con imagen para subir de nivel, descargar (elige carpeta local), subir (o arrastrar ficheros y carpetas a la lista), crear carpeta y borrar; pide usuario si el servidor lo exige.
  • Ventana de información (i): «acerca de», direcciones de cada share por interfaz (doble clic las abre; menú para copiarlas o ver su código QR) y registro.
  • Panel web: enlace «Panel web: activado/desactivado (cambiar)» en la ventana de información; diálogo con activar, contraseña (vacía: no cambia) y AllowFrom.
  • Primer arranque: al crear la configuración, si hay un sunfish2 junto al programa o en la carpeta actual, ofrece importarlo y muestra lo que no se trae.
  • Pendiente: lista de conexiones activas.
  • Icono en el área de notificación: minimizar a la bandeja; opción de iniciar con Windows (entrada en HKCU\...\Run) e iniciar minimizado.
  • Una sola instancia por configuración: abrir otra vez la trae al frente y le pasa los argumentos del modo rápido.
  • WinExe: sin ventana de consola.
  • Pendiente: que el primer arranque ofrezca la regla del cortafuegos de Windows (pedirá elevación solo para eso) o dejar que Windows lo pregunte por sí mismo.

sunfish-cli (consola, Windows / Linux / macOS)

Cómo se lanza Modo
Sin argumentos, con terminal (doble clic incluido) TUI interactiva: sirve y gestiona
Sin argumentos, con stdin/stdout redirigidos Igual que serve
sunfish-cli CARPETA Modo rápido (TUI si hay terminal)
sunfish-cli serve Sin interfaz; registro por la salida estándar (para servicios)
sunfish-cli <subcomando> Ejecuta y sale

TUI (ANSI/VT, sin bibliotecas externas): pestañas Estado (IP, URLs, QR con la tecla C), Shares, Usuarios y Registro (Explorar y Conexiones llegarán con sus fases).

A diferencia de la web, la TUI solo se usa en terminales modernos (Windows Terminal, conhost de Windows 10/11, terminales de Linux/macOS, SSH): usa sin reparos caracteres de caja Unicode (marco con esquinas redondeadas ╭╮╰╯, pestañas en el borde superior, atajos en el inferior), ● ○ ☑ ☐ ▸ • y color de 24 bits (o 256 colores si el terminal no lo anuncia).

Icono en la TUI:

  • La pestaña Estado muestra el pez luna de Sunfish dibujado con medios bloques (▀ ▄ █) y color, a partir del mismo dibujo que el icono de la aplicación (unas 16 × 8 celdas).
  • Solo aparece si cabe: a partir de un tamaño mínimo de terminal (orientativo: 100 × 30). Si no cabe, se oculta y deja el espacio a la información.
  • Color: color real si el terminal lo anuncia (COLORTERM o Windows Terminal); si no, la paleta de 256 colores.

Subcomandos:

sunfish-cli serve
sunfish-cli share add NOMBRE CARPETA [Clave=valor ...]     (claves de [Share], p. ej. Upload=true)
sunfish-cli share set NOMBRE [--location /ruta] Clave=valor ...
sunfish-cli share del NOMBRE
sunfish-cli share list
sunfish-cli user add NOMBRE            (pide la contraseña)
sunfish-cli user passwd NOMBRE
sunfish-cli user del NOMBRE
sunfish-cli user list
sunfish-cli admin status | enable | disable | passwd      (panel web; enable pide contraseña si no hay)
sunfish-cli admin allow 127.0.0.1 ::1 192.168.1.0/24       (AllowFrom; * = cualquiera)
sunfish-cli import-v2 [FICHERO]        (sunfish2 de la 2.0; añade sus shares a la configuración)

Opciones globales:  -c, --config FICHERO   -p, --port N   -v, --verbose   --lang es|en

Como servicio: unidad de systemd o launchd con serve (ejemplos en el repositorio cuando exista el código); en Windows, como tarea programada o con una herramienta de servicios (pendiente).

Futuras: GTK (Linux) y macOS

  • Interfaz nativa sobre Sunfish.Core: las mismas funciones que la de WinForms.
  • Opciones a evaluar:
    • GTK 4 con bindings de .NET (Gir.Core, que apunta a ser compatible con AOT);
    • macOS con .NET para macOS (AppKit), que admite Native AOT.
  • Mientras tanto: en Linux y macOS se usa sunfish-cli.

QR y direcciones

  • QR propio en Sunfish.Core/Qr (sin dependencias): modo byte (UTF-8), versiones 1–40, nivel de corrección M como mínimo (sube a Q o H si cabe en la misma versión) y máscara elegida por penalización. Devuelve una matriz de módulos.
    • WinForms la pinta en un Bitmap (píxeles exactos, margen de 4 módulos).
    • La TUI la dibuja con ▀ ▄ █ en negro sobre fondo blanco (sobre el fondo oscuro del terminal los móviles no lo leen) y margen de 2 módulos; si no cabe, muestra la dirección.
    • El panel web la sirve como PNG de 1 bit (QrImage.Png).
    • Las pruebas lo comprueban leyéndolo con un decodificador independiente (ZXing.Net, solo en el proyecto de pruebas).
  • Direcciones: se listan solo las interfaces activas con IPv4 o IPv6 globales/locales, indicando el nombre y el tipo de la interfaz, como hacía la 2.0.