diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-04-16 01:36:21 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-04-22 13:46:50 +0000 |
| commit | 5ce4927c57bf23ca2b37d792634c08bef1a52e53 (patch) | |
| tree | d5f4d670f3809b118dd410f453fa66f42c721a11 | |
| parent | 91b3ed6e5eed30c331d367fb2cae26aebd10c69d (diff) | |
| download | mullvadvpn-5ce4927c57bf23ca2b37d792634c08bef1a52e53.tar.xz mullvadvpn-5ce4927c57bf23ca2b37d792634c08bef1a52e53.zip | |
Move `save` method to `SettingsPersister`
| -rw-r--r-- | mullvad-daemon/src/settings.rs | 40 | ||||
| -rw-r--r-- | mullvad-types/src/settings/mod.rs | 21 |
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)) |
