2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-12 22:56:34 +00:00

57_SSCal: contrib 1.15.0

git-svn-id: https://svn.fhem.de/fhem/trunk@21269 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2020-02-24 17:48:34 +00:00
parent bed0dab8ab
commit 1b480bf0d9

View File

@ -48,6 +48,7 @@ eval "use FHEM::Meta;1" or my $modMetaAbsent = 1;
# Versions History intern
my %SSCal_vNotesIntern = (
"1.15.0" => "24.02.2020 fix recurrence WEEKLY by DAY ",
"1.14.0" => "23.02.2020 new setter \"calUpdate\" consistent for both models, calEventList and calToDoList are obsolete ",
"1.13.0" => "22.02.2020 manage recurring entries if one/more of a series entry is deleted or changed and their reminder times ",
"1.12.0" => "15.02.2020 create At-devices from calendar entries if FHEM-commands or Perl-routines detected in \"Summary\", minor fixes ",
@ -1812,31 +1813,19 @@ sub SSCal_extractEventlist ($) {
if ($freq eq "WEEKLY") { # wöchentliche Wiederholung
if ($byday) { # Wiederholungseigenschaft -> Wochentag z.B. 2WE,-1SU,4FR (kann auch Liste bei WEEKLY sein)
my ($nbhh,$nbmm,$nbss,$nehh,$nemm,$ness,$rDayOfWeekNew,$rDaysToAddOrSub);
my ($nbhh,$nbmm,$nbss,$nehh,$nemm,$ness,$rNewTime,$rDayOfWeekNew,$rDaysToAddOrSub);
my @ByDays = split(",", $byday); # Array der Wiederholungstage
my $btsstart = $bts;
$ci = -1;
while ($ci<$count) {
$rNewTime = $btsstart;
foreach (@ByDays) {
my $rNewTime = $btsstart;
$ci++;
my $rByDay = $_; # das erste Wiederholungselement
my $rByDayLength = length($rByDay); # die Länge des Strings
my $rDayStr; # Tag auf den das Datum gesetzt werden soll
my $rDayInterval; # z.B. 2 = 2nd Tag des Monats oder -1 = letzter Tag des Monats
if ($rByDayLength > 2) {
$rDayStr = substr($rByDay, -2);
$rDayInterval = int(substr($rByDay, 0, $rByDayLength - 2));
} else {
$rDayStr = $rByDay;
$rDayInterval = 1;
}
my @weekdays = qw(SU MO TU WE TH FR SA);
my ($rDayOfWeek) = grep {$weekdays[$_] eq $rDayStr} 0..$#weekdays; # liefert Nr des Wochentages: SU = 0 ... SA = 6
my ($rDayOfWeek) = grep {$weekdays[$_] eq $rByDay} 0..$#weekdays; # liefert Nr des Wochentages: SU = 0 ... SA = 6
for ($ci=-1; $ci<$count; $ci++) {
$rNewTime += $interval*604800 if($ci>=0); # Wochenintervall addieren
($nbss, $nbmm, $nbhh, $bmday, $bmonth, $byear, $rDayOfWeekNew, undef, undef) = localtime($rNewTime);
($nbhh,$nbmm,$nbss) = split(":", $nbtime);
@ -1845,11 +1834,8 @@ sub SSCal_extractEventlist ($) {
$rDaysToAddOrSub = $rDayOfWeek - $rDayOfWeekNew;
} else {
$rDaysToAddOrSub = 7 - $rDayOfWeekNew + $rDayOfWeek;
$rNewTime -= 604800; # eine Woche zurückgehen wenn Korrektur aufaddiert wurde
}
$rDaysToAddOrSub += (7 * ($rDayInterval - 1)); # addiere Tagesintervall, z.B. 4th Freitag ...
$rNewTime = SSCal_plusNSeconds($rNewTime, 86400 * $rDaysToAddOrSub, 1);
($nbss,$nbmm,$nbhh,$bmday,$bmonth,$byear,$ness,$nemm,$nehh,$emday,$emonth,$eyear) = SSCal_DTfromStartandDiff ($rNewTime,$startEndDiff);
@ -1888,15 +1874,17 @@ sub SSCal_extractEventlist ($) {
$ignore = 0;
$done = 1;
$n++;
# next;
}
last if((defined $uets && ($uets < $nbts)) || $nbts > $tend || $ci == $count);
last if((defined $uets && ($uets < $nbts)) || $nbts > $tend);
}
last if((defined $uets && ($uets < $nbts)) || $nbts > $tend || $ci == $count);
$btsstart += (7 * 86400 * $interval); # addiere Tagesintervall, z.B. 4th Freitag ...
}
} else {
my ($nbhh,$nbmm,$nbss,$nehh,$nemm,$ness,$rDayOfWeekNew,$rDaysToAddOrSub);
my ($nbhh,$nbmm,$nbss,$nehh,$nemm,$ness);
my $rNewTime = $bts;
for ($ci=-1; $ci<($count*$interval); $ci+=$interval) {