Guile Freenet
 
(drak)
2016-02-05: crawn: only redownload if #:redownload #t

crawn: only redownload if #:redownload #t

diff --git a/crawl-wot.scm b/crawl-wot.scm
--- a/crawl-wot.scm
+++ b/crawl-wot.scm
@@ -88,21 +88,31 @@
   (let ((u (if (string-prefix? "freenet:" uri)
                (substring uri 8)
                uri)))
+    (format #t "Download to file ~A\n" filename)
     (if (string-prefix? "USK@" u)
         (let ((data (get (furl-uri u))))
           (if (string? data)
             (let ((port (open-output-file filename)))
               (put-string port data)
               (close-port port))
-            (error (format #t "tried to save in file ~A" filename))))
-        (error (format #t "tried to save in file ~A" filename)))))
+            (error (format #t "tried to save in file ~A\n" filename))))
+        (error (format #t "tried to save in file ~A\n" filename)))))
 
-(define (crawl-wot seed-id)
+(define* (crawl-wot seed-id #:key (redownload #f))
   (let ((known '()))
     (let crawl ((seed seed-id))
       ;; save the data
       (if (catch 'misc-error
-            (lambda () (dump-wot-id seed (wot-uri-filename seed)) #f)
+            (lambda () (let* ((filename (wot-uri-filename seed))
+                              (dump (lambda () (dump-wot-id seed filename))))
+                         (if (and (not redownload) (file-exists? filename))
+                             (let* ((s (stat filename))
+                                    (size (stat:size s)))
+                               (if (= size 0)
+                                 (dump)
+                                 (format #t "Use local copy of file ~A (redownload ~A).\n" filename redownload)))
+                             (dump))
+                         #f))
             (lambda (key . args) #t))
           known
           ;; snarf all uris