branch: elpa/hyperdrive
commit cee4a24868ecdb00a625077e18d1efd8614d1792
Merge: e4788eef52 d1bc88af15
Author: Joseph Turner <[email protected]>
Commit: Joseph Turner <[email protected]>

    Merge: Drive disk-usage
---
 CHANGELOG.org          |  1 +
 hyperdrive-describe.el |  9 ++++++++-
 hyperdrive-lib.el      | 13 ++++++++++---
 hyperdrive-menu.el     |  8 +++++++-
 hyperdrive-vars.el     |  2 +-
 5 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG.org b/CHANGELOG.org
index 1098226bbc..118d136c36 100644
--- a/CHANGELOG.org
+++ b/CHANGELOG.org
@@ -26,6 +26,7 @@ installation with ~M-x hyperdrive-install~, and a faster 
directory UI!
   ~hyperdrive-menu~ and menu bar.
 - When visiting an old version of a hyperdrive file, press ~n~ and ~p~ to
   traverse the version history.  Press ~q~ to kill the current buffer.
+- View hyperdrive disk usage with ~hyperdrive-describe~ and ~hyperdrive-menu~.
 
 ** Changed
 
diff --git a/hyperdrive-describe.el b/hyperdrive-describe.el
index d42ee40803..8eb6c6e428 100644
--- a/hyperdrive-describe.el
+++ b/hyperdrive-describe.el
@@ -54,7 +54,9 @@ Universal prefix argument \\[universal-argument] forces
     (with-silent-modifications
       (h/describe-mode)
       (setq-local h/describe-current-hyperdrive hyperdrive)
-      (pcase-let (((cl-struct hyperdrive metadata writablep) hyperdrive))
+      (pcase-let*
+          (((cl-struct hyperdrive metadata writablep etc) hyperdrive)
+           ((map disk-usage) etc))
         (erase-buffer)
         (insert
          (propertize "Hyperdrive: \n" 'face 'bold)
@@ -65,6 +67,11 @@ Universal prefix argument \\[universal-argument] forces
          (h//format hyperdrive "Domains: %D\n" h/raw-formats)
          (format "Latest version: %s\n" (h/latest-version hyperdrive))
          (format "Writable: %s\n" (if writablep "yes" "no"))
+         (format "Disk usage: %s\n"
+                 (propertize (if disk-usage
+                                 (file-size-human-readable disk-usage)
+                               "Unknown")
+                             'face 'hyperdrive-size))
          (format "Metadata: %s\n"
                  (if metadata
                      (with-temp-buffer
diff --git a/hyperdrive-lib.el b/hyperdrive-lib.el
index 3941e7424d..67d7001dd0 100644
--- a/hyperdrive-lib.el
+++ b/hyperdrive-lib.el
@@ -84,7 +84,8 @@ Passes ARGS to `format-message'."
   (domains nil :documentation "List of DNSLink domains which resolve to the 
drive's public-key.")
   (metadata nil :documentation "Public metadata alist.")
   (latest-version nil :documentation "Latest known version of hyperdrive.")
-  (etc nil :documentation "Alist of extra data."))
+  (etc nil :documentation "Alist of extra data.
+- disk-usage :: Number of bytes occupied locally by the drive."))
 
 (defun h/url (hyperdrive)
   "Return a \"hyper://\"-prefixed URL from a HYPERDRIVE struct.
@@ -672,12 +673,15 @@ The following ENTRY hyperdrive slots are filled:
 - \\+`public-key'
 - \\+`writablep' (when headers include Allow)
 - \\+`domains' (merged with current persisted value)
+- \\+`etc' (disk-usage)
 
 Returns filled ENTRY."
   (pcase-let*
       (((cl-struct hyperdrive-entry hyperdrive) entry)
-       ((cl-struct hyperdrive writablep domains) hyperdrive)
-       ((map link content-length content-type etag last-modified allow) 
headers)
+       ((cl-struct hyperdrive writablep domains etc) hyperdrive)
+       ((map link content-length content-type etag
+             last-modified allow x-drive-size)
+        headers)
        ;; If URL hostname was a DNSLink domain,
        ;; entry doesn't yet have a public-key slot.
        (public-key (progn (string-match h//public-key-re link)
@@ -693,6 +697,9 @@ Returns filled ENTRY."
                                  (cl-parse-integer content-length))))
     (setf (he/type entry) content-type)
     (setf (he/mtime entry) last-modified)
+    (when x-drive-size
+      (setf (map-elt etc 'disk-usage) (cl-parse-integer x-drive-size)))
+    (setf (h/etc hyperdrive) etc)
     (if persisted-hyperdrive
         (progn
           ;; Ensure that entry's hyperdrive is the persisted
diff --git a/hyperdrive-menu.el b/hyperdrive-menu.el
index cd91e98649..f84264b122 100644
--- a/hyperdrive-menu.el
+++ b/hyperdrive-menu.el
@@ -279,7 +279,13 @@
     :inapt-if-not (lambda () (h/writablep (h/menu--scope))))
    ( :info (lambda () (h//format (h/menu--scope) "Domain: %D" h/raw-formats))
      :if (lambda () (h/domains (h/menu--scope))))
-   (:info (lambda () (format "Latest version: %s" (h/latest-version 
(h/menu--scope)))))]
+   (:info (lambda () (format "Latest version: %s" (h/latest-version 
(h/menu--scope)))))
+   ( :info (lambda ()
+             (format "Disk usage: %s"
+                     (propertize (file-size-human-readable
+                                  (map-elt (h/etc (h/menu--scope)) 
'disk-usage))
+                                 'face 'hyperdrive-size)))
+     :if (lambda () (map-elt (h/etc (h/menu--scope)) 'disk-usage)))]
   [["Open"
     ("f"   "Find file"    h/menu-open-file)
     ("v"   "View file"    h/menu-view-file)
diff --git a/hyperdrive-vars.el b/hyperdrive-vars.el
index 1507ee04b4..31bf171e53 100644
--- a/hyperdrive-vars.el
+++ b/hyperdrive-vars.el
@@ -320,7 +320,7 @@ value (and should only be present once in the string).  
Used in
   "Subdirectories.")
 
 (defface h/size '((t (:inherit font-lock-doc-face)))
-  "Size of entries.")
+  "File sizes.")
 
 (defface h/timestamp '((t (:inherit default)))
   "Entry timestamp.")

Reply via email to