aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnonymized <anonymous@example.com>2018-01-20 02:25:18 +0100
committerAnonymized <anonymous@example.com>2018-01-20 02:25:18 +0100
commit59ee9129c87d5009648a2f9892c32c85d5115f72 (patch)
tree9d8a7816af3ceae60d445e26a9d4a9eeeda4694e
parentf8d398218d339f001a3eca920d4c79f2ff64e67a (diff)
downloadgnunet-guile2-59ee9129c87d5009648a2f9892c32c85d5115f72.tar.gz
gnunet-guile2-59ee9129c87d5009648a2f9892c32c85d5115f72.zip
sync: add search
-rw-r--r--gnunet/sync.scm44
1 files changed, 44 insertions, 0 deletions
diff --git a/gnunet/sync.scm b/gnunet/sync.scm
index c351a95..038e937 100644
--- a/gnunet/sync.scm
+++ b/gnunet/sync.scm
@@ -22,6 +22,8 @@
22(use-modules ((gnunet))) 22(use-modules ((gnunet)))
23 23
24 24
25;;; publish
26
25(define (publish/task/shutdown publish-context) 27(define (publish/task/shutdown publish-context)
26 (lambda () 28 (lambda ()
27 (fs-publish-stop publish-context))) 29 (fs-publish-stop publish-context)))
@@ -82,3 +84,45 @@ code is non-zero; otherwise return #t."
82 (let ((uri (publish-file configuration filename))) 84 (let ((uri (publish-file configuration filename)))
83 (publish-keywords configuration uri keywords) 85 (publish-keywords configuration uri keywords)
84 uri)) 86 uri))
87
88;;; search
89
90(define (search/task/shutdown search-context)
91 (lambda ()
92 (fs-search-stop search-context)))
93
94(define (search/progress callback)
95 (lambda (info)
96 (let ((status (fs-progress-info-status info)))
97 (cond
98 ((eq? status %fs-status-search-result)
99 (callback (uri->string (fs-progress-info-search-result-uri info))))))))
100
101(define (search/timeout)
102 (scheduler-shutdown))
103
104(define %ten-seconds (* 10 (expt 10 6)))
105
106(define (search/task configuration uri callback)
107 (lambda ()
108 (let ((fs (fs-start configuration "gnunet-guile" (search/progress callback))))
109 (let ((search-context (fs-search-start fs uri 1 %fs-search-option-none)))
110 (scheduler-add-delayed %ten-seconds search/timeout)
111 (scheduler-add-shutdown (search/task/shutdown search-context))))))
112
113(define (search-exec configuration keywords callback)
114 (let ((configuration* (configuration-create))
115 (uri (apply fs-uri-ksk-create keywords)))
116 (configuration-load! configuration* configuration)
117 (scheduler-run (search/task configuration* uri callback))))
118
119(define-public (search configuration keywords)
120 "Search for files on matchin KEYWORDS"
121 (let ((out '()))
122 (let ((thread (call-with-new-thread
123 (lambda ()
124 (search-exec configuration
125 keywords
126 (lambda (uri) (set! out (cons uri out))))))))
127 (join-thread thread))
128 out))