Calendario
Libre WebUI incluye un calendario personal. Cada usuario que inicia sesión dispone de sus propias vistas mensual y semanal con eventos puntuales y periódicos; las automatizaciones programadas también proyectan en la misma cuadrícula sus próximas ejecuciones y su historial.
Eventos
Un evento tiene título, notas opcionales, hora de inicio, hora de finalización opcional, indicador de día completo y regla de periodicidad opcional. Los títulos y notas se cifran en reposo con la misma envoltura que los chats y las notas.
La periodicidad utiliza el modelo de activación compartido:
| Tipo | Campos | Significado |
|---|---|---|
once | at | Una única ejecución |
hourly | minute, startHour?, endHour? | Cada hora dentro de un intervalo |
daily | hour, minute | Cada día a una hora local determinada |
weekly | dayOfWeek, hour, minute | Cada semana en un día elegido |
monthly | dayOfMonth, hour, minute | Cada mes en un día elegido |
yearly | month, dayOfMonth, hour, minute | Cada año en una fecha elegida |
Los eventos periódicos se almacenan una sola vez. Las consultas de intervalo los expanden en el servidor: cada ejecución proyectada incluye un baseEventId que apunta al evento original, de modo que modificarlo actualiza todas las ejecuciones futuras. Un dayOfMonth posterior al final del mes se ajusta al último día. Todos los cálculos utilizan la zona horaria local del servidor.
Calendarios con nombre y uso compartido
Además del ámbito personal predeterminado, un usuario puede crear hasta 20 calendarios con nombre, cada uno con un color de visualización opcional. Los eventos incluyen un calendarId opcional; los que no lo tienen pertenecen al ámbito predeterminado, que sigue siendo privado.
Los calendarios se comparten mediante el modelo común de permisos: read permite al destinatario ver el calendario y sus eventos junto a los suyos, y write también le permite crear y editar. Los eventos creados por un colaborador se almacenan en la cuenta del propietario del calendario, por lo que las cuotas, la eliminación y el archivo portátil siguen ligados al propietario. El acceso se vuelve a autorizar en cada solicitud; revocar un permiso oculta el calendario en la siguiente lectura. Al eliminar un calendario, sus eventos vuelven al ámbito predeterminado del propietario y se quitan los permisos.
Recordatorios
Un evento puede incluir un desfase de recordatorio (reminderMinutes, hasta 14 días). El ciclo con arrendamiento del programador recorre los recordatorios vencidos y publica una notificación calendar-reminder en el buzón del propietario. Una operación de comparación y asignación por ejecución garantiza que nunca se vuelva a activar, incluso en eventos periódicos.
Importación y exportación de ICS
GET /api/calendar/export?calendarId= descarga un calendario (o el ámbito predeterminado) como archivo .ics RFC 5545: marcas UTC, texto escapado, reglas RRULE básicas asignadas a los tipos nativos y bloques VALARM para recordatorios. POST /api/calendar/import acepta una carga ICS (hasta 2 MB / 1,000 eventos) en un calendario escribible. El importador admite horas UTC y flotantes, valores DATE de día completo y reglas FREQ sencillas. Las reglas que no puede representar fielmente (INTERVAL, COUNT, UNTIL, EXDATE) importan el evento sin periodicidad y se contabilizan como descartadas en lugar de desviarse silenciosamente.
Acceso de los modelos
Tres herramientas de chat integradas dan acceso al calendario bajo la identidad del usuario que las invoca: list_calendar_events (solo lectura), create_calendar_event y delete_calendar_event (ambas con efectos secundarios y sujetas al flujo normal de aprobación).
API
Todos los endpoints exigen autenticación. Las lecturas incluyen los eventos propios y los calendarios compartidos; las escrituras requieren propiedad o permiso de escritura en el calendario de destino.
| Método | Ruta | Finalidad |
|---|---|---|
GET | /api/calendar/events?from=&to= | Eventos de un intervalo, periodicidad expandida |
POST | /api/calendar/events | Crear un evento |
PUT | /api/calendar/events/:eventId | Actualizar un evento |
DELETE | /api/calendar/events/:eventId | Eliminar un evento |
GET | /api/calendar/calendars | Calendarios propios y compartidos |
POST | /api/calendar/calendars | Crear un calendario con nombre |
PUT | /api/calendar/calendars/:id | Cambiar nombre o color |
DELETE | /api/calendar/calendars/:id | Eliminar calendario (los eventos se desvinculan) |
GET | /api/calendar/export | Exportación ICS |
POST | /api/calendar/import | Importación ICS |
Las consultas de intervalo reciben límites from/to en milisegundos desde la época Unix y abarcan como máximo 13 meses por solicitud. Un usuario puede almacenar hasta 2000 eventos; los títulos tienen un límite de 200 caracteres y las notas de 10,000.