diff --git a/melib/src/conf.rs b/melib/src/conf.rs index 6168e60ab..32effd8e8 100644 --- a/melib/src/conf.rs +++ b/melib/src/conf.rs @@ -21,6 +21,7 @@ //! Basic mail account configuration to use with [`backends`](./backends/index.html) use crate::backends::SpecialUsageMailbox; +pub use crate::{SortField, SortOrder}; use serde::{Deserialize, Deserializer, Serialize, Serializer}; use std::collections::HashMap; @@ -33,6 +34,8 @@ pub struct AccountSettings { pub extra_identities: Vec, pub read_only: bool, pub display_name: Option, + #[serde(default)] + pub order: (SortField, SortOrder), pub subscribed_mailboxes: Vec, #[serde(default)] pub mailboxes: HashMap, @@ -64,6 +67,9 @@ impl AccountSettings { pub fn display_name(&self) -> Option<&String> { self.display_name.as_ref() } + pub fn order(&self) -> Option<(SortField, SortOrder)> { + Some(self.order) + } pub fn subscribed_mailboxes(&self) -> &Vec { &self.subscribed_mailboxes diff --git a/src/conf.rs b/src/conf.rs index 8bf4c3cb9..d4eeea100 100644 --- a/src/conf.rs +++ b/src/conf.rs @@ -50,6 +50,7 @@ pub use self::composing::*; pub use self::pgp::*; pub use self::shortcuts::*; pub use self::tags::*; +pub use melib::thread::{SortField, SortOrder}; use self::default_vals::*; use self::listing::ListingSettings; @@ -170,6 +171,8 @@ pub struct FileAccount { mailboxes: IndexMap, #[serde(default)] search_backend: SearchBackend, + #[serde(default)] + order: (SortField, SortOrder), #[serde(default = "false_val")] pub manual_refresh: bool, #[serde(default = "none")] @@ -247,6 +250,7 @@ impl From for AccountConf { let root_mailbox = x.root_mailbox.clone(); let identity = x.identity.clone(); let display_name = x.display_name.clone(); + let order = x.order.clone(); let mailboxes = x .mailboxes .iter() @@ -261,6 +265,7 @@ impl From for AccountConf { extra_identities: x.extra_identities.clone(), read_only: x.read_only, display_name, + order, subscribed_mailboxes: x.subscribed_mailboxes.clone(), mailboxes, manual_refresh: x.manual_refresh, @@ -452,6 +457,7 @@ This is required so that you don't accidentally start meli and find out later th extra_identities, read_only, display_name, + order, subscribed_mailboxes, mailboxes, extra, @@ -470,6 +476,7 @@ This is required so that you don't accidentally start meli and find out later th extra_identities, read_only, display_name, + order, subscribed_mailboxes, manual_refresh, mailboxes: mailboxes @@ -945,6 +952,7 @@ mod dotaddressable { { } impl DotAddressable for HashSet {} + impl DotAddressable for (SortField, SortOrder) {} impl DotAddressable for LogSettings { fn lookup(&self, parent_field: &str, path: &[&str]) -> Result { @@ -1079,6 +1087,7 @@ mod dotaddressable { "refresh_command" => self.refresh_command.lookup(field, tail), "conf_override" => self.conf_override.lookup(field, tail), "extra" => self.extra.lookup(field, tail), + "order" => self.order.lookup(field, tail), other => Err(MeliError::new(format!( "{} has no field named {}", parent_field, other