From f9661e7e8994604df256282ac9b8cfe2c41266e9 Mon Sep 17 00:00:00 2001
From: Fredrik Tolf <fredrik@dolda2000.com>
Date: Sat, 1 Mar 2008 00:10:26 +0100
Subject: [PATCH] Fixed hubmgr so that it rereads the hublist when changed.

---
 lib/guile/hubmgr | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/lib/guile/hubmgr b/lib/guile/hubmgr
index 8da04f5..e323992 100755
--- a/lib/guile/hubmgr
+++ b/lib/guile/hubmgr
@@ -28,6 +28,7 @@
 (define connlist '())
 (define statelist '())
 (define logdest #t)
+(define hl-mtime 0)
 
 (define (logf . args)
   (let ((fmt (car args)) (args (cdr args)))
@@ -70,6 +71,27 @@
 				    (set! nl (cons o nl))))
 			      statelist)
 		    nl))
+  (catch 'system-error
+	 (lambda ()
+	   (let ((mtime (stat:mtime (stat hl-file))))
+	     (if (> mtime hl-mtime)
+		 (let* ((delta (list-delta hublist (read-hl)))
+			(same (car delta))
+			(del (cadr delta))
+			(new (caddr delta)))
+		   (display same) (newline)
+		   (display del) (newline)
+		   (display new) (newline)
+		   (for-each (lambda (o)
+			       (let ((el (assq o connlist)))
+				 (if el
+				     (begin (if (not (eq? (cdr el) 'pend))
+						(dc-qcmd (list "dcnct" (cdr el))))
+					    (set! connlist (delq el connlist))))))
+			     del)
+		   (set! hublist (append (map (lambda (o) (car o)) same) new))
+		   (set! hl-mtime mtime)))))
+	 (lambda (key . args) '()))
   (for-each (lambda (o)
 	      (if (and (not (assq o connlist))
 		       (not (assq o statelist)))
@@ -93,6 +115,7 @@
 				  (quiet (single-char #\q) (value #f))))))
     (if (option-ref opts 'quiet #f) (set! logdest #f))
     (set! hublist (read-hl))
+    (set! hl-mtime (stat:mtime (stat hl-file)))
     (logf "read ~a hubs" (length hublist))
     (dc-c&l (not (option-ref opts 'quiet #f)) (option-ref opts 'server #f) #t)
     (dc-ecmd-assert 200 "notify" "fn:act" "on" "msg" "on")
-- 
2.11.0