diff --git a/fhem/FHEM/57_Calendar.pm b/fhem/FHEM/57_Calendar.pm index a80bc68d8..457c7ebe1 100644 --- a/fhem/FHEM/57_Calendar.pm +++ b/fhem/FHEM/57_Calendar.pm @@ -276,6 +276,11 @@ sub isDeleted { return $self->isState("deleted"); } +sub isExpired { + my ($self)= @_; + return $self->isState("expired"); +} + sub stateChanged { my ($self)= @_; @@ -399,8 +404,9 @@ sub fromVEvent { $self->{lastModified}= tm($vevent->value("DTSTAMP")); #main::Debug "DTSTAMP: $self->{lastModified} "; } - $self->{summary}= $vevent->value("SUMMARY"); - $self->{location}= $vevent->value("LOCATION"); + $self->{summary}= defined($vevent->value("SUMMARY")) ? $vevent->value("SUMMARY") : ""; + $self->{location}= defined($vevent->value("LOCATION")) ? $vevent->value("LOCATION") : ""; + #Dates to exclude in reoccuring rule my @exdate; @@ -495,6 +501,14 @@ sub asText { sub asFull { my ($self)= @_; + #main::Log3 undef,1,$self->uid(); + #main::Log3 undef,1,$self->state(); + #main::Log3 undef,1,$self->mode(); + #main::Log3 undef,1,ts($self->{alarm}); + #main::Log3 undef,1,ts($self->{start}); + #main::Log3 undef,1,ts($self->{end}); + #main::Log3 undef,1,$self->{summary}; + #main::Log3 undef,1,$self->{location}; return sprintf("%s %7s %8s %s %s-%s %s %s", $self->uid(), $self->state(), @@ -736,13 +750,13 @@ sub updateFromCalendar { my $uid; my $event; - # we first remove all elements which were previously marked for deletion + # we first remove all elements which were previously marked for deletion or are expired foreach $event ($self->events()) { - if($event->isDeleted() || $removeall) { + if($event->isDeleted() || $event->isExpired() || $removeall) { $self->deleteEvent($event->uid()); } } - + # we iterate over the VEVENTs in the calendar my @vevents= grep { $_->{type} eq "VEVENT" } @{$calendar->{entries}}; foreach my $vevent (@vevents) { @@ -780,12 +794,16 @@ sub updateFromCalendar { } } - # untouched elements get marked as deleted + # untouched elements get marked as deleted, expired elements as expired foreach $event ($self->events()) { if($event->lastSeen() != $t) { $event->setState("deleted"); + } elsif($event->mode() eq "end") { + $event->setState("expired"); } } + + } ##################################### @@ -1256,6 +1274,7 @@ sub Calendar_Undef($$) {