Fixed hubmgr so that it rereads the hublist when changed.
authorFredrik Tolf <fredrik@dolda2000.com>
Fri, 29 Feb 2008 23:10:26 +0000 (00:10 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Fri, 29 Feb 2008 23:10:26 +0000 (00:10 +0100)
lib/guile/hubmgr

index 8da04f5..e323992 100755 (executable)
@@ -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)))
                                    (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)))
                                  (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")