Files
meshmonitor-chat.el/TODO.org
Andros Fenollosa 5f427ff8df Initial implementation of meshmonitor-chat.el
Emacs chat client for MeshMonitor (Meshtastic) with channel
and DM support, polling, delivery confirmation icons, and
tabulated-list buffers for channels and conversations.
2026-03-24 09:45:11 +01:00

2.8 KiB

meshmonitor-chat.el - Plan de desarrollo

Fase 1: Infraestructura base

DONE Estructura del paquete y dependencias

  • Crear meshmonitor-chat.el con header, requires, defgroup, defcustom
  • Variables: host, port, token, user/pass
  • Dependencias: url.el (built-in)

DONE Autenticación y conexión REST

  • Login con usuario/contraseña via POST + cookies de url.el
  • Soporte Bearer token alternativo
  • Funciones auxiliares para GET/POST con auth

DONE Buffer base y major mode

  • meshmonitor-chat-mode derivado de fundamental-mode
  • Prompt al final del buffer (estilo rcirc)
  • Markers para separar contenido de input
  • Keybindings: RET para enviar, M-p/M-n historial

Fase 2: Listados (buffers exclusivos)

DONE Listado de canales

  • GET /api/v1/channels
  • Buffer MeshMonitor: Channels con tabulated-list-mode
  • Acción RET para abrir canal
  • Refresh con g

DONE Listado de conversaciones DM

  • GET /api/v1/nodes para obtener nodos conocidos
  • Buffer MeshMonitor: Direct Messages con tabulated-list-mode
  • Acción RET para abrir conversación
  • Refresh con g

Fase 3: Chat funcional (lectura)

DONE Buffer de canal con historial

  • GET /api/v1/messages?channel=X&limit=50
  • Renderizado: [timestamp] <sender> texto
  • Scroll automático cuando se está al final
  • Resolución de nodeId a nombre legible via nodos
  • Deduplicación por message ID

DONE Buffer de DM con historial

  • GET doble: fromNodeId=X + toNodeId=X, merge con dedup
  • Mismo renderizado que canales
  • Indicar nodo destino en el buffer name

Fase 4: Chat funcional (envío)

DONE Enviar mensajes a canales

  • POST /api/v1/messages con channel
  • Echo local inmediato del mensaje enviado
  • Manejo de errores (mensaje de sistema)

DONE Enviar DMs

  • POST /api/v1/messages con toNodeId
  • Mismo feedback visual

Fase 5: Tiempo real

DONE Polling de mensajes nuevos

  • Timer periódico con GET /api/v1/messages?since=TIMESTAMP
  • Insertar nuevos mensajes en buffers abiertos
  • Limpieza de buffers muertos

TODO Socket.IO via websocket.el

  • Engine.IO handshake (HTTP polling inicial)
  • Upgrade a WebSocket
  • Parser de paquetes Socket.IO (tipos 0-6)
  • Escuchar message:new para mensajes en tiempo real
  • Escuchar routing:update para confirmación de entrega
  • Escuchar connection:status para estado de conexión
  • Reemplazar polling por Socket.IO

Fase 6: Pulido

DONE Faces y formato visual

  • Faces para timestamps, nicks, mensajes propios
  • Mensajes de sistema con estilo diferente

DONE Comandos slash

  • /join #channel, /msg nodeId texto
  • /channels, /dms para abrir listados
  • /status para ver conexión

DONE Checkdoc, byte-compile y package-lint

  • Todas las verificaciones pasan sin errores