aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2020-08-18 19:58:26 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2020-08-18 19:59:21 +0200
commit78c9575acca2ad461f2b6cbae1bbc92e939ef6d6 (patch)
tree22d559fc39b9771d9d4bd2a1209544ad1f22c836
parentCPP, rename 'atom?' to 'immediate?'. (diff)
downloadcalp-78c9575acca2ad461f2b6cbae1bbc92e939ef6d6.tar.gz
calp-78c9575acca2ad461f2b6cbae1bbc92e939ef6d6.tar.xz
SIGUSR1 to reload calendars.
-rw-r--r--module/calp/entry-points/server.scm11
-rw-r--r--module/html/vcomponent.scm4
-rw-r--r--module/vcomponent/instance.scm6
3 files changed, 17 insertions, 4 deletions
diff --git a/module/calp/entry-points/server.scm b/module/calp/entry-points/server.scm
index 443892f3..f8262b76 100644
--- a/module/calp/entry-points/server.scm
+++ b/module/calp/entry-points/server.scm
@@ -6,7 +6,6 @@
:use-module (srfi srfi-1)
:use-module (ice-9 getopt-long)
- ;; :use-module (ice-9 regex) #| regex here due to bad macros |#
:use-module ((calp server server) :select (start-server))
@@ -23,6 +22,7 @@
;; numbers as single-char doesn't work.
(six (description "Use IPv6."))
(four (description "Use IPv4."))
+ (sigusr (description "Reload events on SIGUSR1"))
(help (single-char #\h)
(description "Print this help."))))
@@ -51,6 +51,15 @@
(if (eqv? family AF_INET6)
"::" "0.0.0.0")))
+ (when (option-ref opts 'sigusr #f)
+ (display "Listening for SIGUSR1\n" (current-error-port))
+ ;; NOTE this uses the main thread, and does therefore block HTTP requests
+ ;; while reloading. However, it appears to not cause any race conditions.
+ (sigaction SIGUSR1
+ (lambda _
+ (display "Received SIGUSR1, reloading calendars\n"
+ (current-error-port))
+ ((@ (vcomponent instance) reload)))))
(format #t "Starting server on ~a:~a~%I'm ~a, runing from ~a~%"
addr port
diff --git a/module/html/vcomponent.scm b/module/html/vcomponent.scm
index fc70be1b..c0bbe8e1 100644
--- a/module/html/vcomponent.scm
+++ b/module/html/vcomponent.scm
@@ -216,9 +216,7 @@
,(tabset
`(("📅" title: "Översikt"
- ,(begin(format (current-error-port)
- "start=~a end=~a~%" (prop ev 'DTSTART)
- (prop ev 'DTEND)) (fmt-single-event ev)))
+ ,(fmt-single-event ev))
("⤓" title: "Nedladdning"
(div (@ (class "eventtext") (style "font-family:sans"))
(h2 "Ladda ner")
diff --git a/module/vcomponent/instance.scm b/module/vcomponent/instance.scm
index 2128b303..88858709 100644
--- a/module/vcomponent/instance.scm
+++ b/module/vcomponent/instance.scm
@@ -14,3 +14,9 @@
(define-once global-event-object
(make (@@ (vcomponent instance methods) <events>)
calendar-files: (get-config 'calendar-files)))
+
+(define-public (reload)
+ (let ((new-value (make (@@ (vcomponent instance methods) <events>)
+ calendar-files: (get-config 'calendar-files))))
+ (display "Reload done\n" (current-error-port))
+ (set! global-event-object new-value)))