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)

Reply via email to