branch: elpa/hyperdrive
commit 53b76cc4a2a5476c6a33488147eccb788f2250e0
Author: Adam Porter <a...@alphapapa.net>
Commit: Joseph Turner <jos...@ushin.org>

    Add: (he//api-then)
---
 hyperdrive-lib.el | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/hyperdrive-lib.el b/hyperdrive-lib.el
index 24e9592b72..c8ceaf7849 100644
--- a/hyperdrive-lib.el
+++ b/hyperdrive-lib.el
@@ -208,7 +208,26 @@ make the request."
   "Make hyperdrive API request by METHOD for ENTRY.
 REST is passed to `h/api', which see."
   (declare (indent defun))
-  (apply #'h/api method (he/url entry) rest))
+  (cl-assert (eq 'response (plist-get rest :as)))
+  (pcase-let* (((map :then) rest)
+               (then* (lambda (response)
+                        (he//api-then entry response)
+                        (funcall then response))))
+    (plist-put rest :then then*)
+    (apply #'h/api method (he/url entry) rest)))
+
+(defun he//api-then (entry response)
+  "Update ENTRY's metadata according to RESPONSE.
+Updates ENTRY's hyperdrive's disk usage."
+  (pcase-let* (((cl-struct plz-response (headers (map x-drive-size)))
+                response)
+               ((cl-struct h/entry hyperdrive) entry)
+               ((cl-struct hyperdrive etc) hyperdrive))
+    (when x-drive-size
+      (setf (map-elt etc 'disk-usage) (cl-parse-integer x-drive-size)
+            (h/etc hyperdrive) etc)
+      ;; TODO: Consider debouncing or something for hyperdrive-persist to 
minimize I/O.
+      (h/persist hyperdrive))))
 
 (defun h/gateway-needs-upgrade-p ()
   "Return non-nil if the gateway is responsive and needs upgraded."

Reply via email to