diff --git a/src/conf.rs b/src/conf.rs index 1f294f87..0706ca41 100644 --- a/src/conf.rs +++ b/src/conf.rs @@ -894,7 +894,7 @@ mod dotaddressable { "accounts" => self.accounts.lookup(field, tail), "pager" => self.pager.lookup(field, tail), "listing" => self.listing.lookup(field, tail), - "notifications" => Err(MeliError::new("unimplemented")), + "notifications" => self.notifications.lookup(field, tail), "shortcuts" => self.shortcuts.lookup(field, tail), "tags" => Err(MeliError::new("unimplemented")), "composing" => Err(MeliError::new("unimplemented")), diff --git a/src/conf/notifications.rs b/src/conf/notifications.rs index 25756765..6502662a 100644 --- a/src/conf/notifications.rs +++ b/src/conf/notifications.rs @@ -20,6 +20,8 @@ */ use super::default_vals::{internal_value_false, none, true_val}; +use super::DotAddressable; +use melib::{MeliError, Result, ToggleFlag}; /// Settings for the notifications function. #[derive(Debug, Serialize, Deserialize, Clone)] @@ -39,7 +41,7 @@ pub struct NotificationsSettings { #[serde(default = "none", alias = "xbiff-file-path")] pub xbiff_file_path: Option, #[serde(default = "internal_value_false", alias = "play-sound")] - pub play_sound: super::ToggleFlag, + pub play_sound: ToggleFlag, #[serde(default = "none", alias = "sound-file")] pub sound_file: Option, } @@ -50,8 +52,29 @@ impl Default for NotificationsSettings { enable: true, script: None, xbiff_file_path: None, - play_sound: super::ToggleFlag::InternalVal(false), + play_sound: ToggleFlag::InternalVal(false), sound_file: None, } } } +impl DotAddressable for NotificationsSettings { + fn lookup(&self, parent_field: &str, path: &[&str]) -> Result { + match path.first() { + Some(field) => { + let tail = &path[1..]; + match *field { + "enable" => self.enable.lookup(field, tail), + "script" => self.script.lookup(field, tail), + "xbiff_file_path" => self.xbiff_file_path.lookup(field, tail), + "play_sound" => self.play_sound.lookup(field, tail), + "sound_file" => self.sound_file.lookup(field, tail), + other => Err(MeliError::new(format!( + "{} has no field named {}", + parent_field, other + ))), + } + } + None => Ok(toml::to_string(self).map_err(|err| err.to_string())?), + } + } +} diff --git a/src/conf/overrides.rs b/src/conf/overrides.rs index 14ac388a..45d30274 100644 --- a/src/conf/overrides.rs +++ b/src/conf/overrides.rs @@ -151,7 +151,7 @@ pub struct NotificationsSettingsOverride { pub xbiff_file_path: Option>, #[serde(alias = "play-sound")] #[serde(default)] - pub play_sound: Option, + pub play_sound: Option, #[serde(alias = "sound-file")] #[serde(default)] pub sound_file: Option>,