Calendário
O Libre WebUI inclui um calendário pessoal. Cada usuário conectado tem suas próprias visões mensal e semanal com eventos únicos e recorrentes, e as automações agendadas projetam suas próximas ocorrências e histórico de execuções na mesma grade.
Eventos
Um evento tem título, notas opcionais, horário de início, horário de término opcional, indicador de dia inteiro e regra de recorrência opcional. Títulos e notas são criptografados em repouso com o mesmo envelope usado para chats e notas.
A recorrência usa o modelo compartilhado de acionadores:
| Tipo | Campos | Significado |
|---|---|---|
once | at | Uma única ocorrência |
hourly | minute, startHour?, endHour? | A cada hora dentro de uma janela |
daily | hour, minute | Todos os dias em um horário local |
weekly | dayOfWeek, hour, minute | Toda semana no dia escolhido |
monthly | dayOfMonth, hour, minute | Todo mês no dia escolhido |
yearly | month, dayOfMonth, hour, minute | Todo ano na data escolhida |
Eventos recorrentes são armazenados uma vez. Consultas de intervalo os expandem no servidor; cada ocorrência projetada carrega um baseEventId que aponta ao evento original, de modo que editar a origem atualiza todas as ocorrências futuras. Um dayOfMonth além do fim do mês é ajustado ao último dia. Todos os cálculos usam o fuso horário local do servidor.
Calendários nomeados e compartilhamento
Além do escopo pessoal padrão, um usuário pode criar até 20 calendários nomeados, cada um com cor opcional. Eventos podem ter um calendarId; sem ele, ficam no escopo padrão privado.
Calendários nomeados usam o modelo comum de permissões: read permite ao destinatário ver calendário e eventos ao lado dos seus; write também permite criar e editar eventos. Eventos criados por colaboradores são armazenados na conta do proprietário do calendário, mantendo cotas, exclusão e arquivo portátil no escopo do proprietário. O acesso é reautorizado em cada solicitação; revogar uma permissão oculta o calendário na próxima leitura. Excluir um calendário devolve seus eventos ao escopo padrão do proprietário e remove suas permissões.
Lembretes
Um evento pode ter um deslocamento de lembrete (reminderMinutes, até 14 dias). O ciclo com concessão do agendador verifica lembretes vencidos e publica uma notificação calendar-reminder na caixa de entrada do proprietário. Um compare-and-set por ocorrência garante que nenhuma seja repetida, inclusive em eventos recorrentes.
Importação e exportação ICS
GET /api/calendar/export?calendarId= baixa um calendário (ou o escopo padrão) como arquivo RFC 5545 .ics: horários UTC, texto escapado, regras RRULE básicas mapeadas dos tipos nativos e blocos VALARM para lembretes. POST /api/calendar/import aceita um payload ICS (até 2 MB/1.000 eventos) em um calendário gravável. O importador trata horários UTC e flutuantes, valores DATE de dia inteiro e regras FREQ simples. Regras que não pode representar fielmente (INTERVAL, COUNT, UNTIL, EXDATE) importam o evento sem recorrência e são contadas como descartadas, em vez de se desviarem silenciosamente.
Acesso por modelos
Três ferramentas integradas dão aos modelos acesso ao calendário sob a identidade do usuário: list_calendar_events (somente leitura), create_calendar_event e delete_calendar_event (ambas com efeito colateral e, portanto, sujeitas ao fluxo padrão de aprovação).
API
Todos os endpoints exigem autenticação. Leituras incluem eventos próprios e calendários compartilhados; gravações exigem propriedade ou permissão de escrita no calendário.
| Método | Caminho | Finalidade |
|---|---|---|
GET | /api/calendar/events?from=&to= | Eventos no intervalo, recorrência expandida |
POST | /api/calendar/events | Criar evento |
PUT | /api/calendar/events/:eventId | Atualizar evento |
DELETE | /api/calendar/events/:eventId | Excluir evento |
GET | /api/calendar/calendars | Calendários nomeados próprios e compartilhados |
POST | /api/calendar/calendars | Criar calendário nomeado |
PUT | /api/calendar/calendars/:id | Renomear ou alterar a cor |
DELETE | /api/calendar/calendars/:id | Excluir calendário (eventos são desvinculados) |
GET | /api/calendar/export | Exportação ICS |
POST | /api/calendar/import | Importação ICS |
As consultas usam limites from/to em milissegundos desde epoch e abrangem no máximo 13 meses por solicitação. Um usuário pode armazenar até 2000 eventos; títulos são limitados a 200 caracteres e notas a 10.000.