summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2025-05-21 16:04:54 +0200
committerDavid Lönnhager <david.l@mullvad.net>2025-05-22 15:42:58 +0200
commitaaf81fdbc1675ee1cad5123e5617f6735d7dfe2b (patch)
tree5b810f2a336a7c9b07d9c534cb1592eca03adf01
parent99eab53e5b238c0393a8460b08f358fcb12c242d (diff)
downloadmullvadvpn-aaf81fdbc1675ee1cad5123e5617f6735d7dfe2b.tar.xz
mullvadvpn-aaf81fdbc1675ee1cad5123e5617f6735d7dfe2b.zip
Add read-only settings loader
-rw-r--r--mullvad-daemon/src/settings/mod.rs38
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>