diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-01-20 19:35:23 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-01-22 13:09:15 +0100 |
| commit | 6edc7c6746c69ea6a438773c7bb7716c08ac9d9c (patch) | |
| tree | 2b9e701703b68304d72bb2d734c5fd9f7cabb01f | |
| parent | a013f4aaf542d7caa3240d4e30c5f8e5976bdb03 (diff) | |
| download | mullvadvpn-6edc7c6746c69ea6a438773c7bb7716c08ac9d9c.tar.xz mullvadvpn-6edc7c6746c69ea6a438773c7bb7716c08ac9d9c.zip | |
Fetch new version info if there is no cache
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 10 | ||||
| -rw-r--r-- | mullvad-daemon/src/version_check.rs | 46 |
2 files changed, 46 insertions, 10 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 2c943296aa..abf5d9962a 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -1098,7 +1098,7 @@ where GenerateWireguardKey(tx) => self.on_generate_wireguard_key(tx).await, GetWireguardKey(tx) => self.on_get_wireguard_key(tx).await, VerifyWireguardKey(tx) => self.on_verify_wireguard_key(tx).await, - GetVersionInfo(tx) => self.on_get_version_info(tx), + GetVersionInfo(tx) => self.on_get_version_info(tx).await, GetCurrentVersion(tx) => self.on_get_current_version(tx), #[cfg(not(target_os = "android"))] FactoryReset(tx) => self.on_factory_reset(tx).await, @@ -1468,7 +1468,13 @@ where } } - fn on_get_version_info(&mut self, tx: oneshot::Sender<Option<AppVersionInfo>>) { + async fn on_get_version_info(&mut self, tx: oneshot::Sender<Option<AppVersionInfo>>) { + if self.app_version_info.is_none() { + log::debug!("No version cache found. Fetching new info"); + let mut handle = self.version_updater_handle.clone(); + handle.run_version_check().await; + } + Self::oneshot_send( tx, self.app_version_info.clone(), diff --git a/mullvad-daemon/src/version_check.rs b/mullvad-daemon/src/version_check.rs index 340ea24600..acb2239d37 100644 --- a/mullvad-daemon/src/version_check.rs +++ b/mullvad-daemon/src/version_check.rs @@ -89,20 +89,43 @@ pub(crate) struct VersionUpdater { platform_version: String, next_update_time: Instant, show_beta_releases: bool, - rx: Option<mpsc::Receiver<bool>>, + rx: Option<mpsc::Receiver<VersionUpdaterCommand>>, } #[derive(Clone)] pub(crate) struct VersionUpdaterHandle { - tx: mpsc::Sender<bool>, + tx: mpsc::Sender<VersionUpdaterCommand>, +} + +enum VersionUpdaterCommand { + SetShowBetaReleases(bool), + RunVersionCheck, } impl VersionUpdaterHandle { pub async fn set_show_beta_releases(&mut self, show_beta_releases: bool) { - if self.tx.send(show_beta_releases).await.is_err() { + if self + .tx + .send(VersionUpdaterCommand::SetShowBetaReleases( + show_beta_releases, + )) + .await + .is_err() + { log::error!("Version updater already down, can't send new `show_beta_releases` state"); } } + + pub async fn run_version_check(&mut self) { + if self + .tx + .send(VersionUpdaterCommand::RunVersionCheck) + .await + .is_err() + { + log::error!("Version updater already down"); + } + } } impl VersionUpdater { @@ -244,15 +267,22 @@ impl VersionUpdater { loop { futures::select! { - show_beta_releases = rx.next() => { - match show_beta_releases { - Some(show_beta_releases ) => { + command = rx.next() => { + match command { + Some(VersionUpdaterCommand::SetShowBetaReleases(show_beta_releases)) => { self.show_beta_releases = show_beta_releases; - }, + } + Some(VersionUpdaterCommand::RunVersionCheck) => { + if self.update_sender.is_closed() { + return; + } + let download_future = self.create_update_future().fuse(); + version_check = download_future; + } // time to shut down None => { return; - }, + } } }, |
