aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Barksdale <amatus@amatus.name>2014-12-07 17:30:08 -0600
committerDavid Barksdale <amatus@amatus.name>2014-12-07 17:30:08 -0600
commita871571b75d3be47132ef10bf65edc4158ff418f (patch)
tree239716db0e9d935988defdc00df6d3879b9ff6c5
parente5aaf1a88fa05a25bdc46c9a6b1c590c3a039ccc (diff)
Avoid dynamic use of Runtime.addFunction
-rw-r--r--src/cljs/gnunet_web/filesharing.cljs31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/cljs/gnunet_web/filesharing.cljs b/src/cljs/gnunet_web/filesharing.cljs
index ad3d8e5..7be5617 100644
--- a/src/cljs/gnunet_web/filesharing.cljs
+++ b/src/cljs/gnunet_web/filesharing.cljs
@@ -56,16 +56,19 @@
keywords))
(defn metadata-iterator
- [metadata cls plugin-name type format mime-type data data-size]
- (swap! metadata conj
- {:plugin-name (js/Pointer_stringify plugin-name)
- :type type
- :format format
- :mime-type (js/Pointer_stringify mime-type)
- :data (if (or (= format e/format-utf8)
- (= format e/format-string))
- (js/Pointer_stringify data)
- (read-memory data data-size))}))
+ [cls plugin-name type format mime-type data data-size]
+ (let [metadata (get-object cls)]
+ (swap! metadata conj
+ {:plugin-name (js/Pointer_stringify plugin-name)
+ :type type
+ :format format
+ :mime-type (js/Pointer_stringify mime-type)
+ :data (if (or (= format e/format-utf8)
+ (= format e/format-string))
+ (js/Pointer_stringify data)
+ (read-memory data data-size))})))
+
+(def metadata-iterator-pointer (js/Runtime.addFunction metadata-iterator))
(defn parse-progress-publish
[status info-pointer]
@@ -113,13 +116,13 @@
:cctx (js/_GNUNET_FS_ProgressInfo_get_search_cctx info-pointer)}
(condp = status
:search-result (let [metadata (atom [])
- callback (partial metadata-iterator metadata)
- callback-pointer (js/Runtime.addFunction callback)]
+ metadata-key (register-object metadata)]
(js/_GNUNET_CONTAINER_meta_data_iterate
(js/_GNUNET_FS_ProgressInfo_get_search_result_meta
info-pointer)
- callback-pointer)
- (js/Runtime.removeFunction callback-pointer)
+ metadata-iterator-pointer
+ metadata-key)
+ (unregister-object metadata-key)
{:uri (uri-pointer-to-string
(js/_GNUNET_FS_ProgressInfo_get_search_result_uri
info-pointer))