Calendrier - Module CalDAV

#1

Bonjour à tous,

Pour commencer merci à tous les contributeurs de ce magnifique projet qu’est Gladys (plus particulièrement à Pierre-Gilles bien sûr). J’ai découvert ce projet il y a quelques années mais je suis tout nouveau sur le forum (je m’étais mis en pause après un déménagement sans jamais vraiment reprendre). Et depuis quelques jours je me suis dit que ça serait intéressant de m’y replonger et d’y contribuer. Une présentation plus aboutie sera faite une fois qu’une véritable installation verra le jour chez moi.

Attendant la v4 mais trop impatient de m’y remettre, je vous propose dès maintenant un module CalDAV qui vous permettra de synchroniser le calendrier Gladys v3 avec celui d’un serveur proposant ce protocole. Plusieurs discussions ont été lancées sur le forum mais sans vraiment aller au bout, j’ai donc repris le sujet.

Les fonctionnalités principales du calendrier ont été implémentées :

  • synchronisation des événements
  • événement journée complète
  • gestion des événements récurrents (grosse difficulté pour cette partie j’ai donc simplement repris le code d’exemple de la lib en l’adaptant)

Aujourd’hui le module réalise une synchronisation complète à chaque fois, ce n’est pas très optimisé mais ça reste fonctionnel et rapide. Améliorer cette partie est dans mes futurs plans mais je n’ai pour l’instant aucune idée de comment bien gérer la synchronisation par incrémentation avec CalDAV.
Également un meilleur moyen d’authentification pourrait voir le jour. Pour l’instant nous sommes sur du login/mdp mais OAuth est disponible avec la lib utilisée donc pourquoi ne pas essayer de l’implémenter.
Aucune idée si c’est un vrai problème ou non, mais lors de la création des calendriers dans Gladys, on est censé lui assigner un external id, pour l’instant je n’ai pas trouvé d’identifiant dans les données reçus du serveur, donc on utilise l’url du calendrier (uniquement pour le calendrier, les évènements ont bien un uid).

Au niveau architecture du code j’ai essayé dans la mesure du possible de conserver la même que celle du module gladys-google.

Voilà, comme vous voyez nous sommes donc encore sur une version d’essai, des erreurs sont surement présentes et tous les retours seront les bienvenue en particulier si vous utilisez d’autres services que Nextcloud (c’est avec l’agenda d’une instance NC que je teste le module). Des conseils sur le code seront également très appréciés.

Le projet sur github :

Installation :

Passons aux choses sérieuses.

  • Il vous faudra auparavant avoir l’URL CalDAV fourni par votre service, votre nom d’utilisateur et votre mot de passe
  • Sur votre interface Gladys aller sur “Modules”, puis “Avancé” et remplissez de cette manière
Nom Version URL git Slug
Gladys CalDAV 0.1.0 https://github.com/bertrandda/gladys-caldav caldav

Et “Installer”.

  • Dans “Paramètres”, puis “Paramètres”, ajoutez 3 paramètres utilisateurs :

    • CALDAV_URL : l’URL fourni par le serveur CalDAV
    • CALDAV_USERNAME : votre nom d’utilisateur
    • CALDAV_PASSWORD: votre mot de passe
  • Redémarrez

  • Faites une première synchronisation en cliquant sur “Configuration” ou en exécutant le script :

gladys.modules.caldav.calendar.sync();

Vous devriez voir vos évènements sur la box calendrier.

J’attends vos premiers retours avec impatience

1 Like
#2

Hello @bertrandda! wow ça fait plaisir ce module, bien joué ! :slight_smile:

Je vais le partager sur les réseaux sociaux pour que tu ai plus de retour dessus.

Niveau qualité de code c’est vraiment propre.

Je vais te recontacter assez vite pour qu’on puisse intégrer ce module à Gladys 4. ça me parait être une base nécessaire pour cette v4.

Encore bravo :clap:

Edit: partagé

#3

Salut @bertrandda,

super j’attendais ce module depuis un moment car j’ai un calendrier caldav hebergé sur mon synology.

Installation du module OK.
Configuration : pas de message d’erreur mais rien de s’affiche dans la box calendrier.
Je lance la synchro via le script et dans les logs de Gladys j’ai ceci : 0 user sync

Tu penses que c’est lié à un souci d’identification ? Le calendrier non pris en charge ?

Cordialement.

#4

@pierre-gilles content d’apporter ma pierre à l’édifice. Merci pour le partage, je me tiens prêt pour la v4.

@link39 au niveau de ce message le module n’a pas encore essayé de communiquer avec ton calendrier. As tu bien mis tes 3 paramètres dans “Paramètres utilisateurs” et non dans “Paramètres globaux”.

#5

Euh…bin…euh…non :smiley:

Merci je teste ce soir en rentrant, désolé j’avais pas fais attention !

#6

Ca peut s’intégrer avec un calendrier iCloud ?

#7

Il me semble que oui, iCloud peut exposer du Caldav… en revanche ça semble pas aussi simple que ça (sauf si tu mets ton calendrier en public)

#8

Exact.
C’était un peu la suite de ma question, la gestion de l’authentification Apple via le code.

#9

@Hamtaro je ne peux rien te promettre, mais je vais chercher pour le calendrier iCloud à simplifier au maximum son paramétrage en en faisant un maximum directement dans le module.

2 Likes
#10

@Hamtaro je n’ai pas encore eu le temps de voir en profondeur la configuration automatique mais ça devrait le faire, après quelques essai grâce aux indications de ce forum :

En attendant pour que ça fonctionne (chez toi et pour tous les autres qui passeront ici) regardez la deuxième réponse dans l’URL de @pierre-gilles, c’est assez facile. Je viens d’essayer, ça fonctionnait en moins de 5 minutes.
1 - Tu te connectes à iCloud
2 - Dans Calendrier tu partages un calendrier en public n’importe lequel (penses à bien désactiver le partage après avoir noté ton url)


3 - Tu notes juste le début de l’url donné sous la forme https://pXY-caldav.icloud.com => ça devient ta variable CALDAV_URL dans Gladys
4 - Tu suis le reste du tuto au début de ce topic topic

Note : ton mot de passe devra être un mot de passe application généré sur ton compte https://appleid.apple.com

#11

Le souci est la double auth je crois.
Moi j’ai activé du coup il faut saisir un code généré sur un de mes devices.

#12

En effet, il te faut un mot de passe application que tu crées sur https://appleid.apple.com dans la partie “Sécurité Générer un mot de passe…”. Tu entres un nom “Gladys” par exemple puis Apple va te donner un mot de passe unique qui remplace ton mot de passe classique, et te permettra de passer outre la double authentification dans Gladys. C’est celui là que tu vas rentrer dans CALDAV_PASSWORD.

1 Like
#13

Ooooooooh !
J’avais pas saisi… Merci, dès que j’ai un moment, je me penche là-dessus !

EDIT :

Petits soucis à l’installation

0|gladys   | 05-05 09:14:29.409: Installing NPM dependencies for module caldav
0|gladys   | 05-05 09:14:31.585: Module install : Fail to install NPM dependencies. Stderr :
0|gladys   | 05-05 09:14:31.588: npm ERR! path /usr/local/lib/node_modules/npm/node_modules/string-width/node_modules/ansi-regex/package.json
0|gladys   | npm ERR! Error parsing /usr/local/lib/node_modules/npm/node_modules/string-width/node_modules/ansi-regex/package.json: Unexpected token ; in JSON at position 76
0|gladys   | npm ERR! A complete log of this run can be found in:
0|gladys   | npm ERR!     /home/pi/.npm/_logs/2019-05-05T07_14_31_460Z-debug.log
0|gladys   | 05-05 09:14:31.590: Module installation failed! Cleaning folder
0|gladys   | 05-05 09:14:31.958: (node:740) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: Command failed: npm install --prefix ./api/hooks/caldav > /dev/null
0|gladys   | npm ERR! path /usr/local/lib/node_modules/npm/node_modules/string-width/node_modules/ansi-regex/package.json
0|gladys   | npm ERR! Error parsing /usr/local/lib/node_modules/npm/node_modules/string-width/node_modules/ansi-regex/package.json: Unexpected token ; in JSON at position 76
0|gladys   | npm ERR! A complete log of this run can be found in:
0|gladys   | npm ERR!     /home/pi/.npm/_logs/2019-05-05T07_14_31_460Z-debug.log
0|gladys   | 05-05 09:14:31.959: (node:740) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.```
#14

Bonjour @Hamtaro,
Je ne sais pas vraiment quoi te dire, je n’arrive pas à reproduire cette erreur. J’imagine que ce n’est pas directement lié au module. As tu essayé de réinstaller le module ?
Quelles versions utilises tu de Node et de npm ?
Essaie aussi de nettoyer ton cache npm : https://docs.npmjs.com/common-errors#invalid-json

#15

Comme promis @Hamtaro, le module a maintenant une configuration automatique pour les calendriers iCloud.

Les interfaces ne sont pas mon point fort, donc si quelqu’un veut y toucher, qu’il n’hésite pas à revoir la vue de configuration. Je vais pour ma part commencer à regarder la migration du module vers Gladys v4.

1 Like
#16

Salut @bertrandda,

Je viens de mettre à jour le module. Dans la vue configuration la liste déroulante est vide pour moi.

#17

Bonsoir @link39, je viens de tester à nouveau sur une installation toute fraiche de Gladys, ça semble fonctionner. Peux tu ouvrir la console de ton navigateur et me dire ce qui est écrit quand tu arrives sur la page de configuration ?

#18

Échec du chargement pour l’élément dont la source est « https://192.168.10.101/hooks/caldav/js/caldav.controller.js ». configuration:222

Error: [ng:areq] http://errors.angularjs.org/1.5.0/ng/areq?p0=calDavCtrl&p1=not%20a%20function%2C%20got%20undefined h/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:365250 [email protected]https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:373110 [email protected]https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:373204 Be/this.$get</<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:401471 a/c<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:390777 [email protected]https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:390607 D/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:387480 D/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:387589 D/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:387589 D/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:387589 D/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:387589 D/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:387589 D/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:387589 D/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:387589 H/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:386879 r/</<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:372488 [email protected]https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:429053 [email protected]https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:429285 r/<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:372446 [email protected]https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:378326 [email protected]https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:372349 [email protected]https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:372656 [email protected]https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:371962 @https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:517370 [email protected]https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:98869 c/</t<@https://192.168.10.101/min/production.121fbfd1bf6689f05afd785c51369d0bb7dad60b.min.js:1:99184

#19

Il semble que Gladys ne trouve pas le controller, peux tu regarder les logs de Gladys au moment où tu as installé le module et chercher une possible erreur ?

#20

Salut.

J’ai désinstallé et réinstalle le module et j’ai maintenant le contenu de la liste. Par contre si je met l’url sans guillemet j’ai une erreur m’indiquant que : “URL is not a string”.
Confirmes-tu que c’est normal et qu’il faut forcement mettre les guillemet ? Si c’est le cas peut-être le préciser dans le readme.

Quand je lance la synchro j’ai ceci :

0|gladys   | User 1
0|gladys   | CalDAV - Calendar : Syncing 1 users.

et rien ne se passe après.

Concernant l’URL, est-ce que je dois pointer vers un fichier ICS spécifique ou bien juste à la racine de mon calendrier, par exemple : “http://monip:port/monCalendrier/”

Pour info mon calendrier est hébergé sur un syno via le paquet webDavServer.

Merci d’avance pour ton aide.