summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock1
-rw-r--r--installer-downloader/src/controller.rs12
-rw-r--r--mullvad-update/Cargo.toml1
-rw-r--r--mullvad-update/src/app.rs18
4 files changed, 24 insertions, 8 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 888450184f..c65542b0dc 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3004,6 +3004,7 @@ dependencies = [
"serde",
"serde_json",
"sha2",
+ "thiserror 2.0.9",
"tokio",
]
diff --git a/installer-downloader/src/controller.rs b/installer-downloader/src/controller.rs
index 103f06a3f5..5021785fb5 100644
--- a/installer-downloader/src/controller.rs
+++ b/installer-downloader/src/controller.rs
@@ -11,6 +11,7 @@ use mullvad_update::{
};
use rand::seq::SliceRandom;
+use std::error::Error;
use std::future::Future;
use std::path::PathBuf;
use tokio::sync::{mpsc, oneshot};
@@ -339,7 +340,16 @@ async fn handle_action_messages<D, A, DirProvider>(
});
let ui_downloader = UiAppDownloader::new(self_, downloader);
- let _ = tx.send(tokio::spawn(app::install_and_upgrade(ui_downloader)));
+ let _ = tx.send(tokio::spawn(async move {
+ if let Err(err) = app::install_and_upgrade(ui_downloader).await {
+ eprintln!("install_and_upgrade failed: {err}");
+ let mut source = err.source();
+ while let Some(error) = source {
+ eprintln!("caused by: {error}");
+ source = error.source();
+ }
+ }
+ }));
});
active_download = rx.await.ok();
}
diff --git a/mullvad-update/Cargo.toml b/mullvad-update/Cargo.toml
index 4c1cc1d3b9..5fbf620adf 100644
--- a/mullvad-update/Cargo.toml
+++ b/mullvad-update/Cargo.toml
@@ -24,6 +24,7 @@ reqwest = { version = "0.12.9", features = ["blocking", "json"] }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
sha2 = "0.10"
+thiserror = { workspace = true }
tokio = { version = "1", features = ["full"] }
async-trait = "0.1"
diff --git a/mullvad-update/src/app.rs b/mullvad-update/src/app.rs
index f543c15955..f9de31c499 100644
--- a/mullvad-update/src/app.rs
+++ b/mullvad-update/src/app.rs
@@ -9,14 +9,18 @@ use crate::{
verify::{AppVerifier, Sha256Verifier},
};
-#[derive(Debug)]
+#[derive(Debug, thiserror::Error)]
pub enum DownloadError {
- CreateDir(anyhow::Error),
- FetchSignature(anyhow::Error),
- FetchApp(anyhow::Error),
- Verification(anyhow::Error),
- Launch(std::io::Error),
- InstallFailed(anyhow::Error),
+ #[error("Failed to create download directory")]
+ CreateDir(#[source] anyhow::Error),
+ #[error("Failed to download app")]
+ FetchApp(#[source] anyhow::Error),
+ #[error("Failed to verify app")]
+ Verification(#[source] anyhow::Error),
+ #[error("Failed to launch app")]
+ Launch(#[source] std::io::Error),
+ #[error("App installer failed")]
+ InstallFailed(#[source] anyhow::Error),
}
/// Parameters required to construct an [AppDownloader].