Rrule: Ne pas sortir DTSTART dans toString()

Créé le 25 janv. 2015  ·  11Commentaires  ·  Source: jakubroztocil/rrule

DTSTART et DTEND ne font pas partie de iCalendar RRULE et ne doivent pas être inclus lors de l'exécution de .toString().

Peut-être générer quelque chose comme "DTSTART=x;DTEND=x;RRULE=x" qui serait une syntaxe iCalendar valide.

enhancement

Commentaire le plus utile

:+1: pour ce problème

AFAIK, DTSTART est toujours censé être une ligne différente, pas seulement délimitée par ; , donc comme l'exemple référencé dans # 84 (les retours à la ligne sont significatifs):

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;BYDAY=MO,WE,FR

Je ne pense pas (mais j'attends une correction en cas d'erreur) que la concaténation de ces lignes avec un ; est une RFC 5545 valide.

Tous les 11 commentaires

aussi plus 1 ceci

D'accord - cela cause des problèmes lors de l'interaction avec d'autres implémentations (par exemple, _Python dateutil_)

:+1: pour ce problème

AFAIK, DTSTART est toujours censé être une ligne différente, pas seulement délimitée par ; , donc comme l'exemple référencé dans # 84 (les retours à la ligne sont significatifs):

DTSTART;TZID=US-Eastern:19970902T090000
RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19971224T000000Z;WKST=SU;BYDAY=MO,WE,FR

Je ne pense pas (mais j'attends une correction en cas d'erreur) que la concaténation de ces lignes avec un ; est une RFC 5545 valide.

@jkbrzt acceptez -vous les demandes d'extraction pour cela ?

Puisqu'il s'agirait d'un changement radical, je pourrais imaginer l'implémenter dans une fonction distincte, par exemple icalString() et donner également une option à l'analyseur.

Pour toute autre personne rencontrant ce problème, j'ai créé une fonction d'assistance qui semble répondre à mes besoins (remarque : elle est écrite en caractères dactylographiés)

export function rrulesetToIcalString(schedule: RRuleSet, startDate: Moment): string {
  // matches `;DTSTART=20180125T080000Z` until `;` or end
  const icalStrings = schedule.valueOf().map(ruleString => ruleString.replace(/;DTSTART=.*?(?=(?:;)|$)/, ''));

  icalStrings.unshift(`DTSTART;TZID=UTC:${startDate.utc().format('YYYYMMDDTHHmmss')}`);

  return icalStrings.join('\n');
}

Vous lui donnez un RRuleSet et un startDate (je l'ai configuré pour une utilisation avec des dates Moment , mais vous avez l'idée) et il passe et supprime toutes les sections ;DTSTART=...; dans l'ensemble de règles RRuleSet. Il ajoute ensuite une section DTSTART correctement formatée au début du RuleSet, puis il joint toutes les sections ensemble.

Remarque : je _pense_ qu'il n'y a qu'une seule DTSTART présente. Cependant, il existe peut-être des versions d'iCalendar où ce n'est pas vrai (en dehors de mon cas d'utilisation).

Pour obtenir une chaîne de règles conforme (sans le DTSTART), une option consiste à utiliser RRule.optionsToString directement :

var rule = new RRule({
   freq: RRule.WEEKLY,
   interval: 5,
   byweekday: [RRule.MO, RRule.FR],
   dtstart: new Date(2012, 1, 1, 10, 30),
   until: new Date(2012, 12, 31)
});
var copy = Object.assign({}, rule.origOptions);
delete copy.dtstart
RRule.optionsToString(copy)

Une mise à jour pour ceci? Pas trop difficile d'obtenir une chaîne de règles conforme, grâce aux conseils de @phillbaker , mais ce serait bien de pouvoir brancher et jouer avec le dateutil de Python.

D'accord, il y a quelques différences de syntaxe avec la RFC et avec Python. Serait très ouvert à une demande de tirage pour résoudre ce problème !

Maintenant que TZID a été implémenté (#261), la bibliothèque ne peut plus analyser les chaînes qu'elle sort. Je pense qu'une solution rétrocompatible peut être atteinte en continuant à analyser les chaînes de sortie antérieures à la version 2.4.0, mais en produisant des chaînes conformes à la RFC.

^ ma dernière déclaration ici ("la bibliothèque ne peut plus analyser les chaînes qu'elle produit") est maintenant incorrecte, cela a été corrigé par # 267. Pourtant, l'idéal serait de se conformer à la RFC !

Corrigé par #269

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

grigio picture grigio  ·  7Commentaires

jimmywarting picture jimmywarting  ·  9Commentaires

berardo picture berardo  ·  9Commentaires

marcoancona picture marcoancona  ·  22Commentaires

shorlbeck picture shorlbeck  ·  21Commentaires