From a0a7cd306ef6d9476b37b85365418f84c374ae59 Mon Sep 17 00:00:00 2001
From: Matthias Einwag <matthias.einwag@live.com>
Date: Wed, 23 Sep 2020 00:28:38 -0700
Subject: Use retry dialog also for downloads

Since the change already implements a retry dialog for
network operations, let's also use it for allowing to retry the
actual file.
---
 editors/code/src/main.ts | 50 +++++++++++++++++++++++++++++-------------------
 1 file changed, 30 insertions(+), 20 deletions(-)

(limited to 'editors/code/src')

diff --git a/editors/code/src/main.ts b/editors/code/src/main.ts
index 9743115fb..409e4b5c2 100644
--- a/editors/code/src/main.ts
+++ b/editors/code/src/main.ts
@@ -194,11 +194,19 @@ async function bootstrapExtension(config: Config, state: PersistentState): Promi
     assert(!!artifact, `Bad release: ${JSON.stringify(release)}`);
 
     const dest = path.join(config.globalStoragePath, "rust-analyzer.vsix");
-    await download({
-        url: artifact.browser_download_url,
-        dest,
-        progressTitle: "Downloading rust-analyzer extension",
-    });
+
+    await performDownloadWithRetryDialog(async () => {
+        // Unlinking the exe file before moving new one on its place should prevent ETXTBSY error.
+        await fs.unlink(dest).catch(err => {
+            if (err.code !== "ENOENT") throw err;
+        });
+
+        await download({
+            url: artifact.browser_download_url,
+            dest,
+            progressTitle: "Downloading rust-analyzer extension",
+        });
+    }, state);
 
     await vscode.commands.executeCommand("workbench.extensions.installExtension", vscode.Uri.file(dest));
     await fs.unlink(dest);
@@ -317,18 +325,20 @@ async function getServer(config: Config, state: PersistentState): Promise<string
     const artifact = release.assets.find(artifact => artifact.name === `rust-analyzer-${platform}.gz`);
     assert(!!artifact, `Bad release: ${JSON.stringify(release)}`);
 
-    // Unlinking the exe file before moving new one on its place should prevent ETXTBSY error.
-    await fs.unlink(dest).catch(err => {
-        if (err.code !== "ENOENT") throw err;
-    });
-
-    await download({
-        url: artifact.browser_download_url,
-        dest,
-        progressTitle: "Downloading rust-analyzer server",
-        gunzip: true,
-        mode: 0o755
-    });
+    await performDownloadWithRetryDialog(async () => {
+        // Unlinking the exe file before moving new one on its place should prevent ETXTBSY error.
+        await fs.unlink(dest).catch(err => {
+            if (err.code !== "ENOENT") throw err;
+        });
+
+        await download({
+            url: artifact.browser_download_url,
+            dest,
+            progressTitle: "Downloading rust-analyzer server",
+            gunzip: true,
+            mode: 0o755
+        });
+    }, state);
 
     // Patching executable if that's NixOS.
     if (await fs.stat("/etc/nixos").then(_ => true).catch(_ => false)) {
@@ -372,10 +382,10 @@ async function queryForGithubToken(state: PersistentState): Promise<void> {
         password: true,
         prompt: `
             This dialog allows to store a Github authorization token.
-            The usage of an authorization token allows will increase the rate
+            The usage of an authorization token will increase the rate
             limit on the use of Github APIs and can thereby prevent getting
             throttled.
-            Auth tokens can be obtained at https://github.com/settings/tokens`,
+            Auth tokens can be created at https://github.com/settings/tokens`,
     };
 
     const newToken = await vscode.window.showInputBox(githubTokenOptions);
@@ -383,4 +393,4 @@ async function queryForGithubToken(state: PersistentState): Promise<void> {
         log.info("Storing new github token");
         await state.updateGithubToken(newToken);
     }
-}
\ No newline at end of file
+}
-- 
cgit v1.2.3