diff options
| -rw-r--r-- | Cargo.lock | 1 | ||||
| -rw-r--r-- | installer-downloader/src/controller.rs | 12 | ||||
| -rw-r--r-- | mullvad-update/Cargo.toml | 1 | ||||
| -rw-r--r-- | mullvad-update/src/app.rs | 18 |
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]. |
