Newer
Older
Sunfish / DOC / APLICACIONES.md
@Ivan Dominguez Ivan Dominguez 1 day ago 4 KB Pre 3.0 (definitions)

Aplicaciones: WinForms, consola y futuras

Diseño previsto; aún no implementado. Todas usan Sunfish.Core y el mismo fichero de configuración; ninguna contiene lógica de servidor.

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.
  • 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)

  • Ventana principal:
    • interruptores HTTP/FTP y puertos;
    • lista de shares (arrastrar una carpeta a la lista crea un share con Location = /<nombre>, como en la 2.0);
    • botones de añadir, editar y quitar;
    • acceso a usuarios y al panel web.
  • Menú contextual de un share: copiar URL por cada IP (como en la 2.0), abrir en el navegador, mostrar QR, abrir la carpeta en el Explorador.
  • Diálogo de share con todas las opciones y avisos (p. ej. Upload + Listing publica HTML subido).
  • Pestaña de registro y 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 medios bloques), Shares, Usuarios, Conexiones y Registro. Funciona en Windows Terminal, conhost, terminales de Unix y por SSH.

Subcomandos (propuesta):

sunfish-cli serve
sunfish-cli show
sunfish-cli share add NOMBRE CARPETA [--location /ruta] [--listing] [--upload] [--delete] ...
sunfish-cli share set NOMBRE OPCION=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 admin enable|disable
sunfish-cli admin passwd
sunfish-cli import-v2 [FICHERO]

Opciones globales:  -c, --config FICHERO   -l, --log FICHERO   --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 (sin dependencias): devuelve una matriz de módulos.
    • WinForms la pinta en un Bitmap.
    • La TUI la dibuja con ▀ ▄ █.
  • 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.