diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-12-18 13:34:04 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-01-07 16:43:43 +0000 |
| commit | 5822d57e273ef8db8af79caf52f2d23d0ddb1146 (patch) | |
| tree | ffe3833d5d8e38ab170920c08d7495fd59650208 | |
| parent | c36a45f09463f604d833b440021323ba28b3f2ed (diff) | |
| download | mullvadvpn-5822d57e273ef8db8af79caf52f2d23d0ddb1146.tar.xz mullvadvpn-5822d57e273ef8db8af79caf52f2d23d0ddb1146.zip | |
Replace closure with sender in `VersionUpdater`
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 14 | ||||
| -rw-r--r-- | mullvad-daemon/src/version_check.rs | 19 |
2 files changed, 17 insertions, 16 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 4d01e802f5..853ee0fd7d 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -178,6 +178,12 @@ impl From<ManagementCommand> for InternalDaemonEvent { } } +impl From<AppVersionInfo> for InternalDaemonEvent { + fn from(command: AppVersionInfo) -> Self { + InternalDaemonEvent::NewAppVersionInfo(command) + } +} + #[derive(Clone, Debug, Eq, PartialEq)] enum DaemonExecutionState { Running, @@ -397,12 +403,6 @@ where &cache_dir, ); - let version_check_internal_event_tx = internal_event_tx.clone(); - let on_version_check_update = move |app_version_info: &AppVersionInfo| { - let _ = version_check_internal_event_tx.send(InternalDaemonEvent::NewAppVersionInfo( - app_version_info.clone(), - )); - }; let app_version_info = match version_check::load_cache(&cache_dir) { Ok(app_version_info) => app_version_info, Err(error) => { @@ -422,7 +422,7 @@ where let version_check_future = version_check::VersionUpdater::new( rpc_handle.clone(), cache_dir.clone(), - on_version_check_update, + internal_event_tx.clone(), app_version_info.clone(), ); tokio_remote.spawn(|_| version_check_future); diff --git a/mullvad-daemon/src/version_check.rs b/mullvad-daemon/src/version_check.rs index 6a89ee8060..b0cff09aaf 100644 --- a/mullvad-daemon/src/version_check.rs +++ b/mullvad-daemon/src/version_check.rs @@ -5,6 +5,7 @@ use std::{ fs::File, io, path::{Path, PathBuf}, + sync::mpsc, time::{Duration, Instant}, }; use talpid_types::ErrorExt; @@ -52,17 +53,17 @@ pub enum Error { Download(#[error(source)] mullvad_rpc::Error), } -impl<F> From<TimeoutError<F>> for Error { - fn from(_: TimeoutError<F>) -> Error { +impl<T> From<TimeoutError<T>> for Error { + fn from(_: TimeoutError<T>) -> Error { Error::DownloadTimeout } } -pub struct VersionUpdater<F: Fn(&AppVersionInfo) + Send + 'static> { +pub struct VersionUpdater<T: From<AppVersionInfo>> { version_proxy: AppVersionProxy<HttpHandle>, cache_path: PathBuf, - on_version_update: F, + update_sender: mpsc::Sender<T>, last_app_version_info: AppVersionInfo, next_update_time: Instant, state: VersionUpdaterState, @@ -73,11 +74,11 @@ enum VersionUpdaterState { Updating(Box<dyn Future<Item = AppVersionInfo, Error = Error> + Send + 'static>), } -impl<F: Fn(&AppVersionInfo) + Send + 'static> VersionUpdater<F> { +impl<T: From<AppVersionInfo>> VersionUpdater<T> { pub fn new( rpc_handle: HttpHandle, cache_dir: PathBuf, - on_version_update: F, + update_sender: mpsc::Sender<T>, last_app_version_info: AppVersionInfo, ) -> Self { let version_proxy = AppVersionProxy::new(rpc_handle); @@ -85,7 +86,7 @@ impl<F: Fn(&AppVersionInfo) + Send + 'static> VersionUpdater<F> { Self { version_proxy, cache_path, - on_version_update, + update_sender, last_app_version_info, next_update_time: Instant::now(), state: VersionUpdaterState::Sleeping(Self::create_sleep_future()), @@ -118,7 +119,7 @@ impl<F: Fn(&AppVersionInfo) + Send + 'static> VersionUpdater<F> { } } -impl<F: Fn(&AppVersionInfo) + Send + 'static> Future for VersionUpdater<F> { +impl<T: From<AppVersionInfo>> Future for VersionUpdater<T> { type Item = (); type Error = (); @@ -150,7 +151,7 @@ impl<F: Fn(&AppVersionInfo) + Send + 'static> Future for VersionUpdater<F> { log::debug!("Got new version check: {:?}", app_version_info); self.next_update_time = Instant::now() + UPDATE_INTERVAL; if app_version_info != self.last_app_version_info { - (self.on_version_update)(&app_version_info); + self.update_sender.send(app_version_info.clone().into()); self.last_app_version_info = app_version_info; if let Err(e) = self.write_cache() { log::error!( |
