branch: elpa/hyperdrive commit 8f44b09e9fe008ab1495db86b0ec94b7c3e1aea6 Author: Joseph Turner <jos...@ushin.org> Commit: Joseph Turner <jos...@ushin.org>
Change: (he//api-then) Fill entry metadata Moving logic for filling entry metadata into he//api-then lets us consolidate calls to `hyperdrive-invalidate-entry` as well as logic for filling entry etc slot values for block-length and block-length-downloaded. --- hyperdrive-lib.el | 59 +++++++++++++++++++++++-------------------------------- 1 file changed, 25 insertions(+), 34 deletions(-) diff --git a/hyperdrive-lib.el b/hyperdrive-lib.el index 1794821e49..86ea998347 100644 --- a/hyperdrive-lib.el +++ b/hyperdrive-lib.el @@ -230,8 +230,11 @@ Sets ENTRY's hyperdrive to the persisted version of the drive if it exists. Updates ENTRY's hyperdrive's disk usage and latest version. Finally, persists ENTRY's hyperdrive." (pcase-let* - (((cl-struct plz-response - (headers (map link allow x-drive-size x-drive-version))) + (((cl-struct + plz-response + (headers (map link allow content-length content-type last-modified + x-drive-size x-drive-version + x-file-block-length x-file-block-length-downloaded))) response) ;; RESPONSE is guaranteed to have a "Link" header with the public key, ;; while ENTRY may have a DNSLink domain but no public key yet. @@ -264,7 +267,24 @@ version. Finally, persists ENTRY's hyperdrive." (string-to-number x-drive-version))) ;; TODO: Update buffers like h/describe-hyperdrive after updating drive. ;; TODO: Consider debouncing or something for hyperdrive-persist to minimize I/O. - (h/persist (he/hyperdrive entry)))) + (h/persist (he/hyperdrive entry)) + + ;; Fill entry. + (when content-length + (setf (he/size entry) + (ignore-errors (cl-parse-integer content-length)))) + (when content-type + (setf (he/type entry) content-type)) + (when last-modified + (setf (he/mtime entry) (encode-time (parse-time-string last-modified)))) + (when x-file-block-length + (setf (map-elt (he/etc entry) 'block-length) + (ignore-errors + (cl-parse-integer x-file-block-length)))) + (when x-file-block-length-downloaded + (setf (map-elt (he/etc entry) 'block-length-downloaded) + (ignore-errors + (cl-parse-integer x-file-block-length-downloaded)))))) (defun h/gateway-needs-upgrade-p () "Return non-nil if the gateway is responsive and needs upgraded." @@ -710,42 +730,13 @@ the given `plz-queue'" :noquery t)))) (defun he//fill (entry headers) - "Fill ENTRY slots from HEADERS. - -- \\+`type' -- \\+`mtime' -- \\+`size' -- \\+`etc' - - \\+`block-length' - - \\+`block-length-downloaded' - -Also fills existent range in `hyperdrive-version-ranges'. + "Fill existent range for ENTRY in `hyperdrive-version-ranges' from HEADERS. Returns filled ENTRY." - (pcase-let* - (((map content-length content-type etag last-modified - x-file-block-length x-file-block-length-downloaded) - headers)) - (when last-modified - (setf last-modified (encode-time (parse-time-string last-modified)))) - (when content-length - (setf (he/size entry) - (ignore-errors (cl-parse-integer content-length)))) - (when content-type - (setf (he/type entry) content-type)) - (when last-modified - (setf (he/mtime entry) last-modified)) + (pcase-let (((map etag) headers)) (when (and etag (not (h//entry-directory-p entry))) ;; Directory version ranges are not supported. (h/update-existent-version-range entry (string-to-number etag))) - (when x-file-block-length - (setf (map-elt (he/etc entry) 'block-length) - (ignore-errors - (cl-parse-integer x-file-block-length)))) - (when x-file-block-length-downloaded - (setf (map-elt (he/etc entry) 'block-length-downloaded) - (ignore-errors - (cl-parse-integer x-file-block-length-downloaded)))) entry)) (defun h//fill-listing-entries (listing hyperdrive version)