Bug : Date J+1 au lieu de J pour l'heure de fin forcée

Bonjour @sagitaz,

J’ai vu qu’il y avait la possibilité de mettre des heures de début et de fin forcées pour tous les évènements du calendrier.
Comme j’ai fais un agenda pour le télétravail, je me suis dit je peux mettre la journée et dans Jeedom j’ai des actions à des heures de début et de fin…
Je fais un petit test je créais un évènement récurent (journée entière) sur 3 jours consécutifs que je répète jusqu’à la fin de l’année dans iCloud.
Je créais le paramétrage qui va bien dans le plugin :

image

Après l’enregistrement je regarde le calendrier généré et j’ai évènement qui commence bien à l’heure de départ et de fin mais pour la date de fin c’est pour le jour J+1 (voir capture).

Log
[2025-01-09 15:52:18] DEBUG  : ----------START PARSE ICAL----------
[2025-01-09 15:52:18] INFO  : | Conversion du calendrier iCal Test télétravail dans le plugin Agenda.
[2025-01-09 15:52:18] DEBUG  : | ICAL = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-\/\/caldav.icloud.com\/\/CALDAVJ 1234A321\/\/EN\r\nX-WR-CALNAME:Test T\u00e9l\u00e9travail\r\nX-APPLE-CALENDAR-COLOR:#63DA38\r\nBEGIN:VEVENT\r\nCREATED:20250109T145135Z\r\nDTEND;VALUE=DATE:20250109\r\nDTSTAMP:20250109T145135Z\r\nDTSTART;VALUE=DATE:20250108\r\nLAST-MODIFIED:20250109T145135Z\r\nRRULE:FREQ=WEEKLY;BYDAY=WE,TH,FR\r\nSEQUENCE:0\r\nSUMMARY:T\u00e9l\u00e9travail\r\nUID:__uid__\r\nURL;VALUE=URI:\r\nX-APPLE-CREATOR-IDENTITY:com.apple.mobilecal\r\nX-APPLE-CREATOR-TEAM-IDENTITY:0000000000\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"
[2025-01-09 15:52:18] DEBUG  : | modification horaire de début d'èvénement
[2025-01-09 15:52:18] DEBUG  : | modification horaire de fin d'èvénement
[2025-01-09 15:52:18] DEBUG  : | Event 1: {"end_date":"2025-01-09 17:00:00","start_date":"2025-01-08 08:00:00","rrule":{"FREQ":"WEEKLY","BYDAY":"WE,TH,FR"},"summary":"T\u00e9l\u00e9travail","uid":"__uid__"}
[2025-01-09 15:52:18] DEBUG  : ---------- START OPTIONS Télétravail ----------
[2025-01-09 15:52:18] DEBUG  : | Aucun calendrier correspondant à : 922
[2025-01-09 15:52:18] DEBUG  : | Aucun calendrier correspondant à : 922
[2025-01-09 15:52:18] DEBUG  : | Evènement Télétravail créé.
[2025-01-09 15:52:19] DEBUG  : ---------- END OPTIONS ----------
[2025-01-09 15:52:19] DEBUG  : ----------END PARSE ICAL----------

Sans aller plus loin en écrivant, j’imagine que la journée retournée par iCloud doit être le lendemain à 00h00. Est-il possible de faire qqch si c’est bien le cas ? (par ex enlever une seconde avant d’appliquer l’heure de fin)


Informations Jeedom

Core : 4.4.19 (master)
DNS Jeedom : non

Plugin : ical2Calendar
Version : 2024-11-11 09:17:06 (stable)

Informations complémentaires

Debian : 11.11
Plugin : 1.1.4
1 « J'aime »

Hello @sagitaz,

Je viens de voir que ce bug est déjà été corrigé dans la beta 1.1.7 (avant même que je l’ai constaté)
J’étais sur la version stable quand je l’ai constaté.

Merci

EDIT ça me le refait de nouveau en version 1.1.7 c’est étrange, je vais essayé de jeter un oeil.

Je regarde dès que j’ai un moment :pray:

Merci

Moi aussi j’essaye de comprendre dans le code pourquoi j’ai ce comportement…
J’ai mis des logs pour essayer de comprendre et à 18h44 la date de fin avant l’application des l’horaire de fin d’évènement était au 2025-01-08 23:59:00 et maintenant ça me met 2025-01-09 00:00:00

Le pire c’est que bien toujours la même ligne dans le log :

ICAL = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-\/\/caldav.icloud.com\/\/CALDAVJ xxxxx\/\/EN\r\nX-WR-CALNAME:Test T\u00e9l\u00e9travail\r\nX-APPLE-CALENDAR-COLOR:#63DA38\r\nBEGIN:VEVENT\r\nCREATED:20250109T145135Z\r\nDTEND;VALUE=DATE:20250109\r\nDTSTAMP:20250109T145135Z\r\nDTSTART;VALUE=DATE:20250108\r\nLAST-MODIFIED:20250109T145135Z\r\nRRULE:FREQ=WEEKLY;BYDAY=WE,TH,FR\r\nSEQUENCE:0\r\nSUMMARY:T\u00e9l\u00e9travail\r\nUID:__UID__\r\nURL;VALUE=URI:\r\nX-APPLE-CREATOR-IDENTITY:com.apple.mobilecal\r\nX-APPLE-CREATOR-TEAM-IDENTITY:0000000000\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"

Dès que je trouve une piste, je te le dirais, mais pour le moment je trouve « normal » en lisant le code que l’on ait 2025-01-09 00:00:00 sachant que c’est bien ce qui est dans DTEND. Je n’ai pas vu dans le code ou la minute aurait pu être enlevé.

Ca m’a donné une idée de rajouté ce comportement dans le code

Dans la fonction parse_icalendar_file, j’ai rajouté à la ligne 428 le code suivant pour tester pour le moment ça fonctionne :

            // On enlever 1 minutes à la date de fin si elle tombe exactement 24h après la date de début (cas d'un évènement sur une journée entière)
            $start_date_add_day = new DateTime($event['start_date']);
            $start_date_add_day->add(new DateInterval('P1D'));
            $start_date_add_day = $start_date_add_day->format('Y-m-d H:i:s');
            if (!isset($event['end_date']) || $start_date_add_day === $event['end_date']) {
              log::add(__CLASS__, 'debug', "| Suppression une minute sur la date de fin ");
              $endDateTime = new DateTime($event['end_date']);
              $endDateTime->sub(new DateInterval('PT1M'));
              $event['end_date'] = $endDateTime->format('Y-m-d H:i:s');
            }

Dans la fonction formatDate().

Dans ta modification, que ce passe t’il dans le cas où ?

start : 2024-01-10 08:00:00
end : 2024-01-11 08:00:00

Avec la dernière beta je ne reproduit pas de toute façon, le -1 est bien appliqué et ensuite l’heure forcé est ok. Bizarre.

image

Ne tiens pas compte de mon message c’est bien corrigé dans la beta 1.1.7, je viens de comparer par rapport à ton repo GitHub et j’avais pas le bon fichier.
J’ai du faire une mauvaise manip pour re-comparer avec la version stable et quand j’ai redéployé la beta l’éditeur de fichier intégré dans Jeedom gardait l’ancien en cache et comme j’avais ajouté une log c’est la que ça a du caffouillé.
Quand j’ai réinstallé ce matin la version beta, et lorsque j’ai ouvert le fichier php j’avais encore mon code, j’ai du me déplacer dans l’arborescence et revenir pour qu’il prenne bien en compte le fichier déployé (ta version).

Sinon pour répondre à ta question, mon code aurait supprimé une minute à la date de fin. Ce qui n’aurait pas été souhaité dans ce cas précis.
Désolé de t’avoir dérangé pour ça, j’aurais du ouvrir le fichier autrement, mais comme j’ai voulu allez vite…

1 « J'aime »