]> git.plutz.net Git - shellwiki/blobdiff - macros/event
bugfix: octal interpretation of events at 8am and 9am, suppress calender error when...
[shellwiki] / macros / event
index 2d0a14cc115474e62386767fcfc6ea78a37f2581..0ca81afba7e6ac2e79e0d26b34b602bcd25793be 100755 (executable)
@@ -1,5 +1,19 @@
 #!/bin/sh
 
+# Copyright 2023 - 2024 Paul Hänsch
+# 
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+# 
+# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
 . $_EXEC/cgilite/cgilite.sh
 . $_EXEC/cgilite/storage.sh
 . $_EXEC/datetime.sh
@@ -91,11 +105,16 @@ if [ ! "$end_time" ]; then
   end_time="23:59"
 fi
 
+shh=${start_time%:*} shh="${shh#0}"
+smm=${start_time#*:} smm="${smm#0}"
+ehh=${end_time%:*}   ehh="${ehh#0}"
+emm=${end_time#*:}   emm="${emm#0}"
+
 if [ ! "$end_date" -a "$end_time" -a "$start_time" ]; then
-  if [ "$((${end_time%:*} * 60 + ${end_time#*:}))" -gt "$((${start_time%:*} * 60 + ${start_time#*:}))" ]; then
+  if [ "$((ehh * 60 + emm))" -gt "$((shh * 60 + smm))" ]; then
     end_date="$start_date"
   else
-    end_date="$(date -d "@$(($(date -d "$start_date" +%s) + 86400))" +%F)"
+    end_date="$(date -ud "@$(($(date -ud "$start_date" +%s) + 86400))" +%F)"
   fi
 fi
 
@@ -123,94 +142,19 @@ case $rec_int in
     rec_int="year";;
 esac
 
-if [ "$rec_end" ]; then
-  rec_end="$(date -d "$rec_end" +%s)"
-fi
+[ "$rec_end" ] && rec_end="$(date -ud "$rec_end" +%s)" \
 
 if LOCK './#events'; then
   sed -i "/^${_DATE}   /!d" './#events'
-  evid="$(wc -l './#events' || printf 0)"
-  debug "PAGE: $PATH_INFO $evid"
-  printf '%i   %i      %i      %i      %s      %i      %s\n' \
-    "$_DATE" "$(date -d "$start_date $start_time" +%s)" "$(date -d "$end_date $end_time" +%s)" \
-    "${rec_freq:-0}" "${rec_int:-\\}" "${rec_end:--1}" "$(STRING "${PATH_INFO}#event${evid}")" \
+  evid="$(wc -l <'./#events' || printf 0)"
+  printf '%i   %i      %i      %i      %s      %i      %s      %s\n' \
+    "$_DATE" "$(date -ud "$start_date $start_time" +%s)" "$(date -ud "$end_date $end_time" +%s)" \
+    "${rec_freq:-0}" "${rec_int:-\\}" "${rec_end:--1}" "$(STRING "${title}")" "$(STRING "${PATH_INFO}#event${evid}")" \
     >>'./#events'
   RELEASE './#events'
 fi
 
-start="$(date -d "$start_date $start_time" +%s)"
-  end="$(date -d "$end_date $end_time" +%s)"
-
-if [ $_DATE -le $end ]; then
-  nstart="$start" nend="$end"
-fi
-
-[ $_DATE -gt $end ] && case $rec_int in
-  day)
-    nend=$(( rec_freq * 86400 - (_DATE - end) % (rec_freq * 86400) + _DATE ))
-    nstart=$(( start - end + nend))
-    ;;
-  week)
-    nend=$(( rec_freq * 604800 - (_DATE - end) % (rec_freq * 604800) + _DATE ))
-    nstart=$(( start - end + nend))
-    ;;
-  month)
-    { read _y _m _d; read y m d; } <<-EOF
-       $(date -d @$_DATE +"%Y %_m %_d"
-         date -d @$start +"%Y %_m %_d"
-       )
-       EOF
-    _m=$((_y * 12 + _m)) m=$((y * 12 + m))
-    while :; do
-      # mod=$(( (_m - m) % rec_freq )); [ $mod -eq 0 ] && mod="$rec_freq";
-      m=$(( rec_freq - ((_m - m - 1) % rec_freq + 1) + _m ))
-      y=$((m / 12)) m=$((m % 12)); [ $m -eq 0 ] && y=$((y - 1)) m=12;
-      nstart="$(printf '%04i-%02i-%02i' "$y" "$m" "$d")"
-      if isdate "$nstart" && [ $(date -d "$nstart" +%s) -ge $_DATE ]; then
-        break
-      fi >/dev/null
-      m=$((y * 12 + m)) _m="$((_m + rec_freq))"
-    done
-    nstart="$(date -d "$nstart $start_time" +%s)"
-      nend="$((end - start + nstart))"
-    ;;
-  year)
-    { read _y _m _d; read y m d; } <<-EOF
-       $(date -d @$_DATE +"%Y %_m %_d"
-         date -d @$start +"%Y %_m %_d"
-       )
-       EOF
-    while :; do
-      # mod=$(( ( _y - y ) % rec_freq )); [ $mod -eq 0 ] && mod="$rec_freq"
-      y=$(( rec_freq - ((_y - y - 1) % rec_freq + 1) + _y ))
-      nstart="$(printf '%04i-%02i-%02i' "$y" "$m" "$d")"
-      if isdate "$nstart" && [ $(date -d "$nstart" +%s) -ge $_DATE ]; then
-        break
-      fi >/dev/null
-      _y="$((_y + rec_freq))"
-    done
-    nstart="$(date -d "$nstart $start_time" +%s)"
-      nend="$((end - start + nstart))"
-    ;;
-  '')
-    nstart="$start" nend="$end"
-    ;;
-esac
-
-if [ "$nstart" -gt "$rec_end" ]; then
-  nstart="$start" nend="$end"
-fi
-
-"$_EXEC/cgilite/html-sh.sed" <<-EOF
-  [div .macro .event #event${evid}
-    [label . $(HTML "$title")]
-    [dl
-      [dt $(_ Start:)][dd $(date -d @$nstart +"%F %T")]
-      [dt   $(_ End:)][dd $(date -d @$nend +"%F %T")]
-      [dt $(_ Until:)][dd $(date -d @$rec_end +"%F %T")]
-    ]
-  ]
-EOF
+printf '<div class="macro event" id="#event%s"></div>' "${evid}"
 
 # uid="$(timeid)"
 # tzid="$(cat /etc/timezone || printf 'UTC')"
@@ -221,10 +165,10 @@ EOF
 # PRODID:ShellWiki Event Macro
 # BEGIN:VEVENT
 # UID:$uid@$(HEADER Host)
-# DTSTAMP:TZID=${tzid}:$(date +%Y%m%dT%H%M%S)
-# DTSTART:TZID=${tzid}:$(date +%Y%m%dT%H%M%S -d "$start_date $start_time")
+# DTSTAMP:TZID=${tzid}:$(date -u +%Y%m%dT%H%M%S)
+# DTSTART:TZID=${tzid}:$(date -u +%Y%m%dT%H%M%S -d "$start_date $start_time")
 # DURATION:
-# RRULE:FREQ=$ec_freq;INTERVAL=$rec_int;UNTIL=$(date +%Y%m%dT000000Z -d "$rec_end")
+# RRULE:FREQ=$ec_freq;INTERVAL=$rec_int;UNTIL=$(date -u +%Y%m%dT000000Z -d "$rec_end")
 # SUMMARY:
 # COMMENT:
 # END:VEVENT