diff options
author | Guillaume Ranquet <granquet@baylibre.com> | 2022-07-19 14:27:38 +0200 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2022-08-25 12:52:39 +0300 |
commit | 9205f3b8afe28ef3a68959d590ed967946a5d622 (patch) | |
tree | 8beabf3f4af50cf0b7f707dec51466b8112856f7 | |
parent | 97ff3e787fbfb5ff50e3ba787f067829509f7cd2 (diff) | |
download | meli-9205f3b8afe28ef3a68959d590ed967946a5d622.zip |
conf.rs: handle a per account mail order parameter
The new order parameter adds the possibility to specify a
sort order on a per account basis.
Signed-off-by: Guillaume Ranquet <granquet@baylibre.com>
-rw-r--r-- | melib/src/conf.rs | 6 | ||||
-rw-r--r-- | src/conf.rs | 9 |
2 files changed, 15 insertions, 0 deletions
diff --git a/melib/src/conf.rs b/melib/src/conf.rs index 6168e60a..32effd8e 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<String>, pub read_only: bool, pub display_name: Option<String>, + #[serde(default)] + pub order: (SortField, SortOrder), pub subscribed_mailboxes: Vec<String>, #[serde(default)] pub mailboxes: HashMap<String, MailboxConf>, @@ -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<String> { &self.subscribed_mailboxes diff --git a/src/conf.rs b/src/conf.rs index 8bf4c3cb..d4eeea10 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<String, FileMailboxConf>, #[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<FileAccount> 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<FileAccount> 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<K: DotAddressable + std::cmp::Eq + std::hash::Hash> DotAddressable for HashSet<K> {} + impl DotAddressable for (SortField, SortOrder) {} impl DotAddressable for LogSettings { fn lookup(&self, parent_field: &str, path: &[&str]) -> Result<String> { @@ -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 |