summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-12-18 13:34:04 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-01-07 16:43:43 +0000
commit5822d57e273ef8db8af79caf52f2d23d0ddb1146 (patch)
treeffe3833d5d8e38ab170920c08d7495fd59650208
parentc36a45f09463f604d833b440021323ba28b3f2ed (diff)
downloadmullvadvpn-5822d57e273ef8db8af79caf52f2d23d0ddb1146.tar.xz
mullvadvpn-5822d57e273ef8db8af79caf52f2d23d0ddb1146.zip
Replace closure with sender in `VersionUpdater`
-rw-r--r--mullvad-daemon/src/lib.rs14
-rw-r--r--mullvad-daemon/src/version_check.rs19
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!(