Project

General

Profile

Bug #88594

CalDAV l'ajout de UNTIL à RRULE provoque un bug dans EGW

Added by Yann Weber 6 months ago. Updated 27 days ago.

Status:
Solution déployée
Priority:
Bas
Assignee:
Target version:
-
Start date:
25 March 2024
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

Description

Même problème que #88417.

Cependant, dans #88417 le problème avait été testé/détecté/résolu sur une "grosse" modification du RRULE (typiquement la modification du jour de récurrence RRULE/BYDAY couplé à l'ajout d'un champ RRULE/UNTIL).

Malheureusement, si #88417 résout bien le problème, il reste entier quand la seule modification d'un événement consiste en l'ajout du RRULE/UNTIL : c'est dommage c'est typiquement le cas d'usage qu'on a avec les jours off...

Associated revisions

Revision eac58f2f (diff)
Added by Yann Weber 28 days ago

caldav: fix RRULE/UNTIL type according to DTSTART field (#88594)

History

#1

Updated by Yann Weber 6 months ago

  • Priority changed from Normal to Bas

Pas certain qu'il faille chercher à fix : ça ressemble fort à un bug côté EGW. Un contournement qui semble fonctionner consiste à créer l’événement qui sera modifié plus tard avec un RRULE/UNTIL super loin (testé avec 2100-01-01).

#2

Updated by Benjamin Dauvergne 4 months ago

J'ai l'impression que c'est juste un non respect de la spec (https://www.rfc-editor.org/rfc/inline-errata/rfc5545.html#inline-4414) :

      The UNTIL rule part defines a DATE or DATE-TIME value that bounds
      the recurrence rule in an inclusive manner.  If the value
      specified by UNTIL is synchronized with the specified recurrence,
      this DATE or DATE-TIME becomes the last instance of the
      recurrence.  The value of the UNTIL rule part MUST have the same
      value type as the "DTSTART" property.  Furthermore, if the
      "DTSTART" property is specified as a date with local time, then
      the UNTIL rule part MUST also be specified as a date with local
      time.  If the "DTSTART" property is specified as a date with UTC
      time or a date with local time and time zone reference, then the
      UNTIL rule part MUST be specified as a date with UTC time.  In the
      case of the "STANDARD" and "DAYLIGHT" sub-components the UNTIL
      rule part MUST always be specified as a date with UTC time.  If
      specified as a DATE-TIME value, then it MUST be specified in a UTC
      time format.  If not present, and the COUNT rule part is also not
      present, the "RRULE" is considered to repeat forever.

Donc ici le 2100-01-01 ne devrait pas non plus fonctionner si DTSTART contient un date-time et pas un date, en me référant à :

Je ne sais pas s'il existe un validateur de format iCal en python mais ce serait pratique d'avoir ça dans le connecteur avant de pousser du contenu vers le serveur caldav.

#3

Updated by Robot Gitea about 2 months ago

  • Status changed from Nouveau to En cours
  • Assignee set to Yann Weber

Yann Weber (yweber) a ouvert une pull request sur Gitea concernant cette demande :

#4

Updated by Yann Weber about 2 months ago

Benjamin Dauvergne a écrit :

J'ai l'impression que c'est juste un non respect de la spec (https://www.rfc-editor.org/rfc/inline-errata/rfc5545.html#inline-4414) :

Ah oui, bien vu, c'est certainement une bonne piste !

Je ne sais pas s'il existe un validateur de format iCal en python mais ce serait pratique d'avoir ça dans le connecteur avant de pousser du contenu vers le serveur caldav.

J'avoue que j’espérais un peu qu'avec caldav basé sur icalendar ça soit le cas.. Dans la doc de icalendar on trouve "It’s outside the scope of this library to implement logic for parsing and modifying RFC 5545, instead we depend on another library for that". Mais visiblement l'autre bilbliothèque n'aide pas vraiment pour le problème dont il est question :

>>> import datetime, icalendar
>>> event = icalendar.Event()
>>> event.add('dtstart', datetime.datetime.fromisoformat('2020-02-20T20:00Z'))
>>> event.add('dtend', datetime.datetime.fromisoformat('2020-02-21T20:00Z'))
>>> event.add('summary', 'test')
>>> event.add('uid', '1234567890abcdef')
>>> event.add('rrule', {'FREQ': 'DAILY', 'UNTIL': datetime.date(2020, 5, 1)})
>>> print(event.to_ical().decode('utf-8'))
BEGIN:VEVENT
SUMMARY:test
DTSTART:20200220T200000Z
DTEND:20200221T200000Z
UID:1234567890abcdef
RRULE:FREQ=DAILY;UNTIL=20200501
END:VEVENT

Il génère un truc invalide sans broncher, et j'ai pas trouvé de méthode check/verify ou autre qui permettrait de garantir que la RFC 5545 est respectée :/

Du coup dans la PR proposée les vérifications/conversions sont faites "à la main" pour garantir la cohérence entre DTSTART et RRULE/UNTIL

#5

Updated by Robot Gitea about 2 months ago

  • Status changed from En cours to Solution proposée
#6

Updated by Robot Gitea about 2 months ago

  • Status changed from Solution proposée to Solution validée

Benjamin Dauvergne (bdauvergne) a approuvé une pull request sur Gitea concernant cette demande :

#7

Updated by Robot Gitea 28 days ago

  • Status changed from Solution validée to Résolu (à déployer)

Yann Weber (yweber) a mergé une pull request sur Gitea concernant cette demande :

#8

Updated by Transition automatique 27 days ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF