From 78c9575acca2ad461f2b6cbae1bbc92e939ef6d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 18 Aug 2020 19:58:26 +0200 Subject: SIGUSR1 to reload calendars. --- module/calp/entry-points/server.scm | 11 ++++++++++- module/html/vcomponent.scm | 4 +--- module/vcomponent/instance.scm | 6 ++++++ 3 files changed, 17 insertions(+), 4 deletions(-) (limited to 'module') 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) ) calendar-files: (get-config 'calendar-files))) + +(define-public (reload) + (let ((new-value (make (@@ (vcomponent instance methods) ) + calendar-files: (get-config 'calendar-files)))) + (display "Reload done\n" (current-error-port)) + (set! global-event-object new-value))) -- cgit v1.2.3