[Bug] 57_Calendar.pm - Ganztägig wiederholte Termine mit Enddatum

Begonnen von Virsacer, 23 März 2020, 22:28:21

Vorheriges Thema - Nächstes Thema

Virsacer

Hallo,
mir ist ein kleiner Fehler aufgefallen:

Ich habe in meinem Google-Kalender einen Termin, der wiederholt wird.
Wenn ich da jetzt ein Enddatum eintrage, wird der Termin am letzen Tag vom Kalender-Modul unterschlagen.

Exportiert (und vereinfacht) sieht der Kalender so aus:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:PHP
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART;VALUE=DATE:20200101
DTEND;VALUE=DATE:20200102
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20200323;BYDAY=FR,MO,TH,TU,WE
UID:Test
SUMMARY:Test
END:VEVENT
END:VCALENDAR


Der Termin taucht am letzen Tag (im Beispiel 23.3.) noch im Google-Kalender auf, aber im Kalender-Modul ist "modeStart" leer.

Wenn der Termin nicht als ganztägig eingetragen ist, funktioniert es problemlos...
Ich vermute mal, dass es am Vergleich des Startzeitpunktes liegt, aber ich hab die betroffene Stelle jetzt nicht im Code ausfindig machen können...

Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

Hallo,

ich habe Deine Datei genommen und UNTIL=20200326 gesetzt. Der 23.03. war ein Montag, heute ist Donnerstag, beide Wochentage sind in der BYDAY-Auflistung.

Ich sehe den Termin in modeStart und er wird auch bei get ... events angezeigt.

Übersehe ich ein Problem?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Virsacer

Ich habs grade nochmal überprüft und dabei folgendes festgestellt:

Ich habe bei mir "cutoffOlderThan" gesetzt.
Wenn ich das Attribut rausschmeiße funktioniert es korrekt :)

Und mit dieser Info hab ich jetzt auch die Problemstelle gefunden:
--- 57_Calendar.pm Thu Mar 26 19:27:42 2020
+++ 57_Calendar.pm Thu Mar 26 19:26:27 2020
@@ -2945,6 +2945,7 @@
             my @rrparts= split(";", $rrule);
             my %r= map { split("=", $_); } @rrparts;
             if(exists($r{"UNTIL"})) {
+              $r{"UNTIL"}.="T235959" if($r{"UNTIL"} !~ "T");
               next if($v->tm($r{"UNTIL"}) < $cutoffLowerBound)
               #main::Debug "UNTIL exists with " . $v->tm($r{"UNTIL"}) . " <=> $cutoffLowerBound";
             }

Dr. Boris Neubert

Danke.

Die verallgemeinerte Fragestellung ist, wie der Zeitpunkt 20200326 in Vergleichen zu behandeln ist. Da mache ich mich ran, wenn ich konzentrierter bin als heute.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

Hallo Virsacer,

ich habe den Code in Zusammenhang mit cutoffOlderThan und cutoffLaterThan so angepasst, dass er mit zwei Funktionen before und after arbeitet, und bei before eine Angabe, die nur aus Datum ohne Zeit besteht, als Ende des Tages interpretiert.

Im Vergleichstest alt/neu bin ich allerdings gerade steckengeblieben. Ich kann nämlich das ursprüngliche Problem nicht nachvollziehen.

Anpassung im Kalender:

RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20200328;BYDAY=FR,SA,MO,TH,TU,WE

Definition:

define C Calendar ical file ICS/109456.ics
attr C cutoffOlderThan 0


Kannst Du mir bitte einen Kalender und eine Definition schicken, mit der ich das Problem heute nachvollziehen kann?

Vielen Dank im Voraus dafür.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Virsacer

Danke schonmal für deine Mühe :)

Also bei mir siehts so aus:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:PHP
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART;VALUE=DATE:20200101
DTEND;VALUE=DATE:20200102
RRULE:FREQ=WEEKLY;WKST=MO;UNTIL=20200328;BYDAY=FR,MO,SA,SU,TH,TU,WE
UID:Test
SUMMARY:Test
END:VEVENT
END:VCALENDAR

define Calendar_Test Calendar ical file DEBUG/Test.ics
attr Calendar_Test cutoffOlderThan 30
attr Calendar_Test hideOlderThan 10
attr Calendar_Test icon time_calendar
attr Calendar_Test room defaultRoom
attr Calendar_Test verbose 5

Dr. Boris Neubert

Danke!

Ich Schussel habe vergessen, den Kalender zu aktualisieren, nachdem ich das Attribut gesetzt hatte.  :-[

Bitte finde anbei die überarbeitete Version mit der Bitte um Test. Ich habe nur die Passagen rund um die cutoff-Attribute angepasst und alle anderen Zeitvergleiche nicht verändert.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Virsacer

Also bei meinen Fall funktioniert es jetzt :)
Habe auch geprüft, wenn der Termin nicht ganztägig ist - das geht auch (selbst wenn er um Mitternacht startet) 8)

Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!