Gladys 4 - Service CalDAV

Bonjour tout le monde,

Sur demande de Pierre-Gilles et pour ne pas avoir de confusion avec le module CalDAV de l’ancienne version de Gladys un nouveau sujet est lancé.

Pour les nouveaux, ce service vous permet de synchroniser le calendrier de votre instance Gladys avec un service d’agenda compatible CalDAV (Google Calendar, iCloud, Nextcloud…).

Vous trouverez dans la documentation Gladys de l’aide pour configurer ce service :

Pour info, à l’heure où j’écris ce message, 3 sujets sont en cours :

Sur mon téléphone j’utilise l’application DAVx5 pour la synchronisation contact/calendrier que j’affiche avec le calendrier Etar (Qui est une alternative au calendrier Android de base).

Et effectivement sur mon téléphone portable je ne synchronise pas tout les calendrier de mon instance nextcloud. L’application DAVx5 propose le choix des calendriers à synchroniser, c’est le “use case” qui m’est venu à l’idée. Car je ne veux pas forcément que Gladys contrôle mon agenda, mais plutôt que Gladys affiche sur un jolie tableau de bord mes prochains rendez-vous ou l’utiliser dans des scénarios pour déclancher des évènements.

Salut tout le monde, pour info je viens de proposer une PR pour la sélection des calendriers à synchroniser.

https://github.com/GladysAssistant/Gladys/pull/1091

Ça sera dans un nouvel onglet dans la page de configuration du service

1 Like

Salut @bertrandda ! Génial, ça rend super :slight_smile:

Autre sujet vis à vis du service Caldav. On en parlait ici => Point stabilité, mise à jour des dépendance & qualité de code, ça serait cool qu’on retire la dépendance “moment” utilisée dans le front du service Caldav, dépendance qui est deprecated et assez lourde.

C’est un sujet indépendant de cette PR biensur, mais il faudrait s’y pencher à un moment :slight_smile:

10/10 pour le jeu de mot :stuck_out_tongue_winking_eye:

2 Likes

j’avais même pas vu aha ^^

Oui j’ai vu, je vais étudier une solution mais comme le disait Vincent à l’époque j’avais laissé moment parce que la lib react-big-calendar n’était pas compatible dayjs.

Bonjour, j’essaie de connecter mon calendrier iCloud, mais j’obtiens l’erreur suivante :

{ 
    "status": 409,
    "code": "CONFLICT",
    "error": {
        "message": "selector must be unique",
        "attribute": "selector",
        "value": "films-series-",
        "type": "unique violation"
    }
}

à cause de :

2021-05-17T09:41:06+0200 <info> calendar.syncUserCalendars.js:38 (CalDAVHandler.syncUserCalendars) CalDAV : Found 10 calendars.
2021-05-17T09:41:06+0200 <error> index.js:48 (Timeout.syncAllUsers [as _onTimeout]) UniqueConstraintError [SequelizeUniqueConstraintError]: Validation error
    at Query.formatError (/src/server/node_modules/sequelize/lib/dialects/sqlite/query.js:409:16)
    at Query._handleQueryResponse (/src/server/node_modules/sequelize/lib/dialects/sqlite/query.js:72:18)
    at Statement.afterExecute (/src/server/node_modules/sequelize/lib/dialects/sqlite/query.js:246:27) {
  errors: [
    ValidationErrorItem {
      message: 'selector must be unique',
      type: 'unique violation',
      path: 'selector',
      value: 'films-series-',
      origin: 'DB',
      instance: [t_calendar],
      validatorKey: 'not_unique',
      validatorName: null,
      validatorArgs: []
    }
  ],
  fields: [ 'selector' ],
  parent: [Error: SQLITE_CONSTRAINT: UNIQUE constraint failed: t_calendar.selector] {
    errno: 19,
    code: 'SQLITE_CONSTRAINT',
    sql: 'INSERT INTO `t_calendar` (`id`,`user_id`,`service_id`,`name`,`selector`,`external_id`,`description`,`sync`,`notify`,`ctag`,`sync_token`,`color`,`created_at`,`updated_at`) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14);'
  },
  original: [Error: SQLITE_CONSTRAINT: UNIQUE constraint failed: t_calendar.selector] {
    errno: 19,
    code: 'SQLITE_CONSTRAINT',
    sql: 'INSERT INTO `t_calendar` (`id`,`user_id`,`service_id`,`name`,`selector`,`external_id`,`description`,`sync`,`notify`,`ctag`,`sync_token`,`color`,`created_at`,`updated_at`) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14);'
  },
  sql: 'INSERT INTO `t_calendar` (`id`,`user_id`,`service_id`,`name`,`selector`,`external_id`,`description`,`sync`,`notify`,`ctag`,`sync_token`,`color`,`created_at`,`updated_at`) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14);'
}

Bonjour @Thomas_Parquier, il semblerait que tu aies plusieurs calendriers avec le même nom. Je vais voir comment régler ça en modifiant la génération du slug calendrier. En attendant peux-tu essayer en renommant sur iCloud l’un des deux calendriers qui commence par “Films séries” ?

en effet, c’est ce que j’ai dit aux modérateurs sur un autre canal…

le calendrier qui pose problème vient de Rappels… j’ai plusieurs listes de rappels qui portaient le même slug…

J’ai renommé les listes, mais sans effet. Mais ça peut être un problème de cache (car j’ai aussi supprimé une liste, et pourtant celle-ci est tjs retournée par l’api iCloud).

Bonjour,
J’ai une petite question au sujet du service CalDAV … à quelle fréquence est faite la synchro ?
J’ai pu ajouter mes calendriers sans problème, mais il semble qu’ils ne se mettent pas à jour.
Les modifs faites sont bien synchro sur mes autres appareils, mais pas dans Gladys. Est-ce que je peux voir quelque-part s’il y a un souci de communication ou autre ?
Merci d’avance.

J’ai refait un certain nombre de tests, et ne rencontre pas systématiquement le problème … Je vais donc creuser plus profond de mon côté pour commencer …

Les calendriers CalDAV son synchronisés toutes les 30 minutes. Tu peux aussi la lancer manuellement pour tester en cliquant sur le bouton vert en bas de la page d’intégration image.

Si tu as accès aux logs je peux possiblement t’aider à trouver ce qui cloche

Bonjour,
J’ai fait une remise à zéro + synchro, et tout est en ordre.
A suivre :slight_smile:

1 Like

Par contre j’ai une question complémentaire : quand je clique sur un événement du calendrier, il ne se passe rien. Est-ce que c’est normal ?

Oui c’est normal, on a aucune action associée. C’est peut être à réfléchir mais à la base l’objectif de la synchronisation des évènements du calendrier c’est de les associer à des scènes (en cours de développement il semblerai) on ne cherche pas à modifier nos évènements dans Gladys tu le fais depuis ton app mobile/service dédier.
Tu aurais des idées d’actions au clic sur un évènement ?

En fait, je me suis posé la question parce que quand on passe sur un événement avec la souris, le curseur se transforme en main comme sur un lien. Donc par réflexe je clique, mais il ne se passe rien.
Dans mon cas perso, il y a des jours où tout un tas de trucs sont notés dans le calendrier, ce qui fait que certains événements sont partiellement voire presque totalement cachés derrière d’autres, donc je pensais qu’a minima ça permettrait de faire passer celui sur lequel on clique au 1er rang, ou de l’afficher mieux.
Mais c’est sûr que si le but du calendrier n’est que de pouvoir planifier des scènes, je m’en éloigne. Dans mon esprit, l’affichage du calendrier sur un écran aurait pu me permettre d’enlever les emplois du temps collés au réfrigérateur :sweat_smile:

calendrier

2 Likes

Bonjour,

J’ai un calendrier partagé (d’un autre compte) dans mon compte Google mais ce dernier n’est pas récupéré dans la liste des calendriers disponibles. Par contre, pas de soucis avec le calendrier externe ‘Jours fériés’. Quelqu’un aurait-il ce cas de figure et une solution ? Je ne sais pas si le service ‘cal’ de Google le permet. Etant donné que ce dernier est déprécié, existe-t-il une autre solution pour se connecter a l’agenda Google?

D’avance merci,

Bonjour @Romuald_Pochet,

Pour info, on a discuté un peu partage de calendrier ici [Caldav] Configuration multicomptes mais c’est plus pour le partage en interne.
Pour ce qui est de ton problème, le protocole CalDAV étant assez complexe, tout n’est peut être pas encore parfaitement géré.
Je vais essayer de reproduire ton cas pour voir si un fix est possible. C’est bien un compte Google qui partage un calendrier avec un autre compte Google ? Lorsque tu cliques sur “Synchroniser” sur la page de configuration de l’intégration CalDAV, as tu une erreur ?

Bonjour,

Oui c’est bien un calendrier d’un autre compte partagé avec mon compte. Il se trouve dans ‘Autre agendas’ (comme les calendriers des jours fériés). Dans le service CalDav, la méthode ‘requestCalendars (const listCalendars = await xhr.send(req, homeUrl);)’ ne retourne pas ce calendrier.

Mais pas d’erreur.