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."