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

76 lines
2.8 KiB
Org Mode

#+TITLE: meshmonitor-chat.el - Plan de desarrollo
#+STARTUP: showall
* 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