diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-01-13 12:30:56 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-01-14 10:58:10 +0100 |
| commit | 6707f6d75edbaca4019e8afc96d708d07418092d (patch) | |
| tree | 30165724890955f238e6238dce0e39f7247ab68f | |
| parent | 8635dc042e77d932bc49cc5720cc7c7fb3f7c480 (diff) | |
| download | mullvadvpn-6707f6d75edbaca4019e8afc96d708d07418092d.tar.xz mullvadvpn-6707f6d75edbaca4019e8afc96d708d07418092d.zip | |
Move error handling for version checker into version_check module
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 17 | ||||
| -rw-r--r-- | mullvad-daemon/src/version_check.rs | 41 |
2 files changed, 25 insertions, 33 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 9a9e42e697..cce096fd96 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -407,22 +407,7 @@ where &cache_dir, ); - let app_version_info = match version_check::load_cache(&cache_dir) { - Ok(app_version_info) => app_version_info, - Err(error) => { - log::warn!( - "{}", - error.display_chain_with_msg("Unable to load cached version info") - ); - // If we don't have a cache, start out with sane defaults. - AppVersionInfo { - current_is_supported: true, - current_is_outdated: false, - latest_stable: version::PRODUCT_VERSION.to_owned(), - latest: version::PRODUCT_VERSION.to_owned(), - } - } - }; + let app_version_info = version_check::load_cache(&cache_dir); let version_check_future = version_check::VersionUpdater::new( rpc_handle.clone(), cache_dir.clone(), diff --git a/mullvad-daemon/src/version_check.rs b/mullvad-daemon/src/version_check.rs index f4e8f60114..33e8fb86af 100644 --- a/mullvad-daemon/src/version_check.rs +++ b/mullvad-daemon/src/version_check.rs @@ -4,7 +4,7 @@ use mullvad_rpc::{AppVersionProxy, HttpHandle}; use mullvad_types::version::AppVersionInfo; use serde::{Deserialize, Serialize}; use std::{ - fs::{self, File}, + fs::File, io, path::{Path, PathBuf}, time::{Duration, Instant}, @@ -39,7 +39,6 @@ const PLATFORM: &str = "android"; struct CachedAppVersionInfo { #[serde(flatten)] pub version_info: AppVersionInfo, - #[serde(default)] // for compatibility with older versions pub cached_from_version: String, } @@ -70,8 +69,8 @@ pub enum Error { #[error(display = "Failed to check the latest app version")] Download(#[error(source)] mullvad_rpc::Error), - #[error(display = "Failed to clear version cache")] - ClearCache(#[error(source)] io::Error), + #[error(display = "Clearing version check cache due to a version mismatch")] + CacheVersionMismatch, } impl<T> From<TimeoutError<T>> for Error { @@ -205,27 +204,35 @@ impl<T: From<AppVersionInfo>> Future for VersionUpdater<T> { } } -pub fn load_cache(cache_dir: &Path) -> Result<AppVersionInfo, Error> { +fn try_load_cache(cache_dir: &Path) -> Result<AppVersionInfo, Error> { let path = cache_dir.join(VERSION_INFO_FILENAME); log::debug!("Loading version check cache from {}", path.display()); - let file = File::open(path).map_err(Error::ReadCachedRelays)?; + let file = File::open(&path).map_err(Error::ReadCachedRelays)?; let version_info: CachedAppVersionInfo = serde_json::from_reader(io::BufReader::new(file)).map_err(Error::Serialize)?; if version_info.cached_from_version == PRODUCT_VERSION { Ok(version_info.version_info) } else { - log::info!("Clearing version check cache due to a version mismatch"); - - let path = cache_dir.join(VERSION_INFO_FILENAME); - log::debug!("Removing version check cache in {}", path.display()); - let _ = fs::remove_file(path).map_err(Error::ClearCache)?; + Err(Error::CacheVersionMismatch) + } +} - Ok(AppVersionInfo { - current_is_supported: true, - current_is_outdated: false, - latest_stable: PRODUCT_VERSION.to_owned(), - latest: PRODUCT_VERSION.to_owned(), - }) +pub fn load_cache(cache_dir: &Path) -> AppVersionInfo { + match try_load_cache(cache_dir) { + Ok(app_version_info) => app_version_info, + Err(error) => { + log::warn!( + "{}", + error.display_chain_with_msg("Unable to load cached version info") + ); + // If we don't have a cache, start out with sane defaults. + AppVersionInfo { + current_is_supported: true, + current_is_outdated: false, + latest_stable: PRODUCT_VERSION.to_owned(), + latest: PRODUCT_VERSION.to_owned(), + } + } } } |
