Emacs chat client for MeshMonitor (Meshtastic) with channel and DM support, polling, delivery confirmation icons, and tabulated-list buffers for channels and conversations.
76 lines
2.8 KiB
Org Mode
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
|