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