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>
tables
Guillaume Ranquet 2022-07-19 14:27:38 +02:00 committed by Manos Pitsidianakis
parent 97ff3e787f
commit 9205f3b8af
2 changed files with 15 additions and 0 deletions

View File

@ -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

View File

@ -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