diff options
| author | David Lönnhager <david.l@mullvad.net> | 2025-05-21 16:04:54 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2025-05-22 15:42:58 +0200 |
| commit | aaf81fdbc1675ee1cad5123e5617f6735d7dfe2b (patch) | |
| tree | 5b810f2a336a7c9b07d9c534cb1592eca03adf01 | |
| parent | 99eab53e5b238c0393a8460b08f358fcb12c242d (diff) | |
| download | mullvadvpn-aaf81fdbc1675ee1cad5123e5617f6735d7dfe2b.tar.xz mullvadvpn-aaf81fdbc1675ee1cad5123e5617f6735d7dfe2b.zip | |
Add read-only settings loader
| -rw-r--r-- | mullvad-daemon/src/settings/mod.rs | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/mullvad-daemon/src/settings/mod.rs b/mullvad-daemon/src/settings/mod.rs index 030bedebaa..03d027acb4 100644 --- a/mullvad-daemon/src/settings/mod.rs +++ b/mullvad-daemon/src/settings/mod.rs @@ -99,23 +99,15 @@ pub struct SettingsPersister { pub type MadeChanges = bool; impl SettingsPersister { - /// Loads user settings from file. If it fails, it returns the defaults. + /// Loads user settings from file. If it fails, it returns the defaults, and overwrites the old + /// settings. pub async fn load(settings_dir: &Path) -> Self { let path = settings_dir.join(SETTINGS_FILE); let LoadSettingsResult { - mut settings, - mut should_save, + settings, + should_save, } = Self::load_inner(|| Self::load_from_file(&path)).await; - if cfg!(target_os = "android") { - // Auto-connect is managed by Android itself. - settings.auto_connect = false; - } - if crate::version::is_beta_version() { - should_save |= !settings.show_beta_releases; - settings.show_beta_releases = true; - } - let mut persister = SettingsPersister { settings, path, @@ -134,6 +126,15 @@ impl SettingsPersister { persister } + /// Loads user settings from file. The only difference between this and [Self::load] is that + /// it is read-only. + pub async fn read_only(settings_dir: &Path) -> Settings { + let path = settings_dir.join(SETTINGS_FILE); + let LoadSettingsResult { settings, .. } = + Self::load_inner(|| Self::load_from_file(&path)).await; + settings + } + /// Loads user settings, returning default settings if it should fail. /// /// `load_settings` allows the caller to decide how to load [`Settings`] @@ -147,7 +148,7 @@ impl SettingsPersister { F: FnOnce() -> R, R: std::future::Future<Output = Result<Settings, Error>>, { - match load_settings().await { + let mut result = match load_settings().await { Ok(settings) => LoadSettingsResult { settings, should_save: false, @@ -180,7 +181,18 @@ impl SettingsPersister { should_save: true, } } + }; + + if cfg!(target_os = "android") { + // Auto-connect is managed by Android itself. + result.settings.auto_connect = false; } + if crate::version::is_beta_version() { + result.should_save |= !result.settings.show_beta_releases; + result.settings.show_beta_releases = true; + } + + result } async fn load_from_file<P>(path: P) -> Result<Settings, Error> |
