branch: elpa/hyperdrive
commit 5d44ead33941d313f223b24b7e54b8436e9de684
Author: Adam Porter <[email protected]>
Commit: Adam Porter <[email protected]>

    Change: (h/install) Prompt with size before downloading
---
 hyperdrive.el | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/hyperdrive.el b/hyperdrive.el
index 050421766c..37ee04c0ca 100644
--- a/hyperdrive.el
+++ b/hyperdrive.el
@@ -1318,13 +1318,25 @@ If FORCEP, don't prompt for confirmation before 
downloading."
         (destination (expand-file-name h/gateway-program h/gateway-directory)))
     (cl-labels
         ((try ()
-           (if-let ((url-and-hash (pop urls-and-hashes)))
-               (pcase-let (((map :url :sha256) url-and-hash))
-                 ;; TODO: Prompt before downloading.
-                 (download url sha256))
-             (setf h/install-process nil)
-             (h/menu-refresh)
-             (h/error "Downloading failed; no more mirrors available")))
+           (pcase-let* (((map :url :sha256) (pop urls-and-hashes))
+                        (size (or forcep (ignore-errors
+                                           (h/message "Checking server...")
+                                           (file-size-human-readable
+                                            (head-size url))))))
+             (if size
+                 (if (or forcep
+                         (yes-or-no-p
+                          (format "Download and install gateway (%s)? " size)))
+                     (progn
+                       (setf forcep t)  ;; Don't prompt again.
+                       (download url sha256))
+                   (h/message "Installation canceled."))
+               ;; HEAD request failed: try next URL.
+               (if urls-and-hashes
+                   (try)
+                 (setf h/install-process nil)
+                 (hyperdrive-menu-refresh)
+                 (hyperdrive-error "Downloading failed; no more mirrors 
available")))))
          (head-size (url)
            (when-let ((response (plz 'head url :as 'response)))
              (cl-parse-integer
@@ -1347,10 +1359,7 @@ If FORCEP, don't prompt for confirmation before 
downloading."
                                 (try)))
                              (when (file-exists-p temp-file)
                                (delete-file temp-file))))))
-           (h/message "Downloading gateway (%s)..."
-                      (or (ignore-errors
-                            (file-size-human-readable (head-size url)))
-                          "unknown size")))
+           (h/message "Downloading gateway..."))
          (check (file-name sha256 url)
            (if (with-temp-buffer
                  (insert-file-contents-literally file-name)

Reply via email to