summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-04-16 01:36:21 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-04-22 13:46:50 +0000
commit5ce4927c57bf23ca2b37d792634c08bef1a52e53 (patch)
treed5f4d670f3809b118dd410f453fa66f42c721a11
parent91b3ed6e5eed30c331d367fb2cae26aebd10c69d (diff)
downloadmullvadvpn-5ce4927c57bf23ca2b37d792634c08bef1a52e53.tar.xz
mullvadvpn-5ce4927c57bf23ca2b37d792634c08bef1a52e53.zip
Move `save` method to `SettingsPersister`
-rw-r--r--mullvad-daemon/src/settings.rs40
-rw-r--r--mullvad-types/src/settings/mod.rs21
2 files changed, 31 insertions, 30 deletions
diff --git a/mullvad-daemon/src/settings.rs b/mullvad-daemon/src/settings.rs
index 78ec0016dc..ded46aea1d 100644
--- a/mullvad-daemon/src/settings.rs
+++ b/mullvad-daemon/src/settings.rs
@@ -1,4 +1,4 @@
-use log::info;
+use log::{debug, info};
use mullvad_types::{
relay_constraints::{BridgeSettings, BridgeState, RelaySettingsUpdate},
settings::Settings,
@@ -26,6 +26,12 @@ pub enum Error {
#[cfg(not(target_os = "android"))]
DeleteError(String, #[error(source)] io::Error),
+ #[error(display = "Unable to serialize settings to JSON")]
+ SerializeError(#[error(source)] serde_json::Error),
+
+ #[error(display = "Unable to write settings to {}", _0)]
+ WriteError(String, #[error(source)] io::Error),
+
#[error(display = "Settings operation failed")]
SettingsError(#[error(source)] mullvad_types::settings::Error),
}
@@ -45,16 +51,20 @@ pub struct SettingsPersister {
impl SettingsPersister {
/// Loads user settings from file. If no file is present it returns the defaults.
pub fn load() -> Self {
- let mut settings = Self::load_settings();
+ let settings = Self::load_settings();
+ let mut persister = SettingsPersister { settings };
// Force IPv6 to be enabled on Android
if cfg!(target_os = "android") {
- if Self::update_field(&mut settings.tunnel_options.generic.enable_ipv6, true) {
- let _ = settings.save();
+ if Self::update_field(
+ &mut persister.settings.tunnel_options.generic.enable_ipv6,
+ true,
+ ) {
+ let _ = persister.save();
}
}
- SettingsPersister { settings }
+ persister
}
fn load_settings() -> Settings {
@@ -139,11 +149,24 @@ impl SettingsPersister {
}
}
+ /// Serializes the settings and saves them to the file it was loaded from.
+ fn save(&mut self) -> Result<(), Error> {
+ let path = Settings::get_settings_path()?;
+
+ debug!("Writing settings to {}", path.display());
+ let mut file =
+ File::create(&path).map_err(|e| Error::WriteError(path.display().to_string(), e))?;
+
+ serde_json::to_writer_pretty(&mut file, &self.settings).map_err(Error::SerializeError)?;
+ file.sync_all()
+ .map_err(|e| Error::WriteError(path.display().to_string(), e))
+ }
+
/// Resets default settings
#[cfg(not(target_os = "android"))]
pub fn reset(&mut self) -> Result<(), Error> {
self.settings = Settings::default();
- self.settings.save().or_else(|e| {
+ self.save().or_else(|e| {
log::error!(
"{}",
e.display_chain_with_msg("Unable to save default settings")
@@ -254,10 +277,7 @@ impl SettingsPersister {
fn update(&mut self, should_save: bool) -> Result<bool, Error> {
if should_save {
- self.settings
- .save()
- .map(|_| true)
- .map_err(Error::SettingsError)
+ self.save().map(|_| true)
} else {
Ok(false)
}
diff --git a/mullvad-types/src/settings/mod.rs b/mullvad-types/src/settings/mod.rs
index ff3b93e39b..7ffd27222d 100644
--- a/mullvad-types/src/settings/mod.rs
+++ b/mullvad-types/src/settings/mod.rs
@@ -7,7 +7,7 @@ use jnix::IntoJava;
use log::{debug, info};
use serde::{Deserialize, Serialize};
use serde_json;
-use std::{fs::File, io, path::PathBuf};
+use std::path::PathBuf;
use talpid_types::net::{openvpn, wireguard, GenericTunnelOptions};
mod migrations;
@@ -23,12 +23,6 @@ pub enum Error {
#[error(display = "Malformed settings")]
ParseError(#[error(source)] serde_json::Error),
- #[error(display = "Unable to serialize settings to JSON")]
- SerializeError(#[error(source)] serde_json::Error),
-
- #[error(display = "Unable to write settings to {}", _0)]
- WriteError(String, #[error(source)] io::Error),
-
#[error(display = "Unable to read any version of the settings")]
NoMatchingVersion,
}
@@ -97,19 +91,6 @@ impl Settings {
migrations::try_migrate_settings(&bytes)
}
- /// Serializes the settings and saves them to the file it was loaded from.
- pub fn save(&self) -> Result<()> {
- let path = Self::get_settings_path()?;
-
- debug!("Writing settings to {}", path.display());
- let mut file =
- File::create(&path).map_err(|e| Error::WriteError(path.display().to_string(), e))?;
-
- serde_json::to_writer_pretty(&mut file, self).map_err(Error::SerializeError)?;
- file.sync_all()
- .map_err(|e| Error::WriteError(path.display().to_string(), e))
- }
-
pub fn get_settings_path() -> Result<PathBuf> {
let dir = ::mullvad_paths::settings_dir().map_err(Error::DirectoryError)?;
Ok(dir.join(SETTINGS_FILE))