Calendrier
Libre WebUI comprend un calendrier personnel. Chaque personne connectée dispose de ses propres vues mensuelle et hebdomadaire avec des événements ponctuels et récurrents. Les automatisations planifiées y projettent également leurs prochaines occurrences et leur historique d’exécution.
Événements
Un événement possède un titre, des notes facultatives, une heure de début, une heure de fin facultative, un indicateur de journée entière et une règle de récurrence facultative. Les titres et les notes sont chiffrés au repos avec la même enveloppe que les discussions et les notes.
La récurrence utilise le modèle de déclenchement commun :
| Type | Champs | Signification |
|---|---|---|
once | at | Une occurrence unique |
hourly | minute, startHour?, endHour? | Toutes les heures dans une plage donnée |
daily | hour, minute | Tous les jours à une heure locale donnée |
weekly | dayOfWeek, hour, minute | Toutes les semaines un jour choisi |
monthly | dayOfMonth, hour, minute | Tous les mois un jour choisi |
yearly | month, dayOfMonth, hour, minute | Tous les ans à une date choisie |
Les événements récurrents ne sont stockés qu’une fois. Les requêtes de plage les développent côté serveur : chaque occurrence projetée comporte un baseEventId qui renvoie à son événement source. Modifier la source actualise ainsi toutes les occurrences futures. Si un dayOfMonth dépasse la fin d’un mois, il est ramené au dernier jour de ce mois. Tous les calculs de récurrence utilisent le fuseau horaire local du serveur.
Calendriers nommés et partage
Au-delà du périmètre personnel par défaut, une personne peut créer jusqu’à 20 calendriers nommés, chacun pouvant avoir une couleur d’affichage. Les événements comportent un calendarId facultatif ; ceux qui n’en ont pas appartiennent au périmètre par défaut, qui reste privé.
Les calendriers nommés sont partagés au moyen du modèle d’autorisation commun : une autorisation read permet à la personne destinataire d’afficher le calendrier et ses événements avec les siens, tandis qu’une autorisation write lui permet en plus d’y créer et de modifier des événements. Les événements créés par une personne collaboratrice sont stockés sous le compte du propriétaire du calendrier. Les quotas, la suppression et l’archive portable restent donc rattachés à ce propriétaire. L’accès est de nouveau autorisé à chaque requête ; révoquer une autorisation masque le calendrier dès la lecture suivante. Supprimer un calendrier rattache ses événements au périmètre par défaut de son propriétaire et supprime ses autorisations.
Rappels
Un événement peut comporter un délai de rappel (reminderMinutes, jusqu’à 14 jours). À chaque cycle avec bail, le planificateur d’automatisations recherche les rappels arrivés à échéance et publie une notification calendar-reminder dans la boîte de réception du propriétaire de l’événement. Une opération de comparaison et échange propre à chaque occurrence garantit qu’elle ne se déclenche jamais une deuxième fois, y compris pour les événements récurrents.
Importation et exportation ICS
GET /api/calendar/export?calendarId= télécharge un calendrier (ou le périmètre par défaut) sous forme de fichier .ics RFC 5545 : horodatages UTC, texte échappé, règles RRULE de base correspondant aux types de récurrence natifs et blocs VALARM pour les rappels. POST /api/calendar/import accepte une charge utile ICS (jusqu’à 2 MB / 1,000 événements) dans un périmètre de calendrier accessible en écriture. L’outil d’importation gère les heures UTC et flottantes, les valeurs DATE pour les journées entières ainsi que les règles FREQ simples. Lorsqu’une règle ne peut pas être représentée fidèlement (INTERVAL, COUNT, UNTIL, EXDATE), l’événement est importé sans récurrence et la réponse la compte comme règle abandonnée au lieu de la laisser dériver silencieusement.
Accès des modèles
Trois outils de discussion intégrés donnent aux modèles accès au calendrier sous l’identité de la personne qui les appelle : list_calendar_events (lecture seule), create_calendar_event et delete_calendar_event (ces deux derniers produisent des effets et sont donc soumis au flux standard d’approbation des outils).
API
Tous les points de terminaison nécessitent une authentification. La lecture des événements couvre ceux de l’appelant ainsi que les calendriers partagés avec lui ; l’écriture exige la propriété du calendrier cible ou une autorisation d’écriture.
| Méthode | Chemin | Rôle |
|---|---|---|
GET | /api/calendar/events?from=&to= | Événements d’une plage, récurrence développée |
POST | /api/calendar/events | Créer un événement |
PUT | /api/calendar/events/:eventId | Mettre à jour un événement |
DELETE | /api/calendar/events/:eventId | Supprimer un événement |
GET | /api/calendar/calendars | Calendriers nommés personnels et partagés |
POST | /api/calendar/calendars | Créer un calendrier nommé |
PUT | /api/calendar/calendars/:id | Renommer ou recolorer un calendrier |
DELETE | /api/calendar/calendars/:id | Supprimer un calendrier (événements dissociés) |
GET | /api/calendar/export | Exportation ICS |
POST | /api/calendar/import | Importation ICS |
Les requêtes de plage utilisent des limites from/to en millisecondes depuis l’époque Unix et couvrent au maximum 13 mois par requête. Une personne peut stocker jusqu’à 2000 événements ; les titres sont limités à 200 caractères et les notes à 10,000.