melib: add special_usage() method to BackendFolder
Eventually after loading potential usage values from configuration, backends will be able to change the usage values themselves. IMAP and JMAP have the ability to set Mailbox roles (IMAP needs LIST-SPECIAL extensionasync
parent
bce97d71bb
commit
6f76cd9acc
|
@ -339,7 +339,7 @@ impl BackendOp for ReadOnlyOp {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Copy, Hash, Eq, Clone, Serialize, Deserialize, PartialEq)]
|
#[derive(Debug, Copy, Hash, Eq, Clone, Serialize, Deserialize, PartialEq)]
|
||||||
pub enum SpecialUseMailbox {
|
pub enum SpecialUsageMailbox {
|
||||||
Normal,
|
Normal,
|
||||||
Inbox,
|
Inbox,
|
||||||
Archive,
|
Archive,
|
||||||
|
@ -350,6 +350,12 @@ pub enum SpecialUseMailbox {
|
||||||
Trash,
|
Trash,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Default for SpecialUsageMailbox {
|
||||||
|
fn default() -> Self {
|
||||||
|
SpecialUsageMailbox::Normal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub trait BackendFolder: Debug {
|
pub trait BackendFolder: Debug {
|
||||||
fn hash(&self) -> FolderHash;
|
fn hash(&self) -> FolderHash;
|
||||||
fn name(&self) -> &str;
|
fn name(&self) -> &str;
|
||||||
|
@ -359,7 +365,7 @@ pub trait BackendFolder: Debug {
|
||||||
fn clone(&self) -> Folder;
|
fn clone(&self) -> Folder;
|
||||||
fn children(&self) -> &[FolderHash];
|
fn children(&self) -> &[FolderHash];
|
||||||
fn parent(&self) -> Option<FolderHash>;
|
fn parent(&self) -> Option<FolderHash>;
|
||||||
|
fn special_usage(&self) -> SpecialUsageMailbox;
|
||||||
fn permissions(&self) -> FolderPermissions;
|
fn permissions(&self) -> FolderPermissions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -387,6 +393,10 @@ impl BackendFolder for DummyFolder {
|
||||||
folder_default()
|
folder_default()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn special_usage(&self) -> SpecialUsageMailbox {
|
||||||
|
SpecialUsageMailbox::Normal
|
||||||
|
}
|
||||||
|
|
||||||
fn children(&self) -> &[FolderHash] {
|
fn children(&self) -> &[FolderHash] {
|
||||||
&self.v
|
&self.v
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with meli. If not, see <http://www.gnu.org/licenses/>.
|
* along with meli. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
use crate::backends::{BackendFolder, Folder, FolderHash, FolderPermissions};
|
use crate::backends::{BackendFolder, Folder, FolderHash, FolderPermissions, SpecialUsageMailbox};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
|
@ -28,6 +28,7 @@ pub struct ImapFolder {
|
||||||
pub(super) name: String,
|
pub(super) name: String,
|
||||||
pub(super) parent: Option<FolderHash>,
|
pub(super) parent: Option<FolderHash>,
|
||||||
pub(super) children: Vec<FolderHash>,
|
pub(super) children: Vec<FolderHash>,
|
||||||
|
pub usage: SpecialUsageMailbox,
|
||||||
pub no_select: bool,
|
pub no_select: bool,
|
||||||
|
|
||||||
pub permissions: Arc<Mutex<FolderPermissions>>,
|
pub permissions: Arc<Mutex<FolderPermissions>>,
|
||||||
|
@ -62,12 +63,17 @@ impl BackendFolder for ImapFolder {
|
||||||
name: self.name.clone(),
|
name: self.name.clone(),
|
||||||
parent: self.parent,
|
parent: self.parent,
|
||||||
children: self.children.clone(),
|
children: self.children.clone(),
|
||||||
|
usage: self.usage,
|
||||||
no_select: self.no_select,
|
no_select: self.no_select,
|
||||||
permissions: self.permissions.clone(),
|
permissions: self.permissions.clone(),
|
||||||
exists: self.exists.clone(),
|
exists: self.exists.clone(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn special_usage(&self) -> SpecialUsageMailbox {
|
||||||
|
self.usage
|
||||||
|
}
|
||||||
|
|
||||||
fn parent(&self) -> Option<FolderHash> {
|
fn parent(&self) -> Option<FolderHash> {
|
||||||
self.parent
|
self.parent
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,8 +89,15 @@ named!(
|
||||||
let mut f = ImapFolder::default();
|
let mut f = ImapFolder::default();
|
||||||
f.no_select = false;
|
f.no_select = false;
|
||||||
for p in properties.split(|&b| b == b' ') {
|
for p in properties.split(|&b| b == b' ') {
|
||||||
|
use crate::backends::SpecialUsageMailbox;
|
||||||
if p.eq_ignore_ascii_case(b"\\NoSelect") {
|
if p.eq_ignore_ascii_case(b"\\NoSelect") {
|
||||||
f.no_select = true;
|
f.no_select = true;
|
||||||
|
} else if p.eq_ignore_ascii_case(b"\\Sent") {
|
||||||
|
f.usage = SpecialUsageMailbox::Sent;
|
||||||
|
} else if p.eq_ignore_ascii_case(b"\\Junk") {
|
||||||
|
f.usage = SpecialUsageMailbox::Trash;
|
||||||
|
} else if p.eq_ignore_ascii_case(b"\\Drafts") {
|
||||||
|
f.usage = SpecialUsageMailbox::Drafts;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
f.hash = get_path_hash!(path);
|
f.hash = get_path_hash!(path);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
* along with meli. If not, see <http://www.gnu.org/licenses/>.
|
* along with meli. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use crate::backends::SpecialUsageMailbox;
|
||||||
use std::sync::{Arc, Mutex, RwLock};
|
use std::sync::{Arc, Mutex, RwLock};
|
||||||
|
|
||||||
/// Arguments for IMAP watching functions
|
/// Arguments for IMAP watching functions
|
||||||
|
@ -123,7 +124,7 @@ pub fn idle(kit: ImapWatchKit) -> Result<()> {
|
||||||
.read()
|
.read()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.values()
|
.values()
|
||||||
.find(|f| f.parent.is_none() && f.path().eq_ignore_ascii_case("INBOX"))
|
.find(|f| f.parent.is_none() && (f.usage == SpecialUsageMailbox::Inbox))
|
||||||
.map(std::clone::Clone::clone)
|
.map(std::clone::Clone::clone)
|
||||||
{
|
{
|
||||||
Some(folder) => folder,
|
Some(folder) => folder,
|
||||||
|
|
|
@ -176,6 +176,7 @@ pub struct MaildirFolder {
|
||||||
path: PathBuf,
|
path: PathBuf,
|
||||||
parent: Option<FolderHash>,
|
parent: Option<FolderHash>,
|
||||||
children: Vec<FolderHash>,
|
children: Vec<FolderHash>,
|
||||||
|
usage: SpecialUsageMailbox,
|
||||||
permissions: FolderPermissions,
|
permissions: FolderPermissions,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,6 +238,7 @@ impl MaildirFolder {
|
||||||
fs_path: pathbuf,
|
fs_path: pathbuf,
|
||||||
parent,
|
parent,
|
||||||
children,
|
children,
|
||||||
|
usage: SpecialUsageMailbox::Normal,
|
||||||
permissions: FolderPermissions {
|
permissions: FolderPermissions {
|
||||||
create_messages: !read_only,
|
create_messages: !read_only,
|
||||||
remove_messages: !read_only,
|
remove_messages: !read_only,
|
||||||
|
@ -300,11 +302,16 @@ impl BackendFolder for MaildirFolder {
|
||||||
fs_path: self.fs_path.clone(),
|
fs_path: self.fs_path.clone(),
|
||||||
path: self.path.clone(),
|
path: self.path.clone(),
|
||||||
children: self.children.clone(),
|
children: self.children.clone(),
|
||||||
|
usage: self.usage,
|
||||||
parent: self.parent,
|
parent: self.parent,
|
||||||
permissions: self.permissions,
|
permissions: self.permissions,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn special_usage(&self) -> SpecialUsageMailbox {
|
||||||
|
self.usage
|
||||||
|
}
|
||||||
|
|
||||||
fn parent(&self) -> Option<FolderHash> {
|
fn parent(&self) -> Option<FolderHash> {
|
||||||
self.parent
|
self.parent
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ use crate::backends::BackendOp;
|
||||||
use crate::backends::FolderHash;
|
use crate::backends::FolderHash;
|
||||||
use crate::backends::{
|
use crate::backends::{
|
||||||
BackendFolder, Folder, FolderPermissions, MailBackend, RefreshEvent, RefreshEventConsumer,
|
BackendFolder, Folder, FolderPermissions, MailBackend, RefreshEvent, RefreshEventConsumer,
|
||||||
RefreshEventKind,
|
RefreshEventKind, SpecialUsageMailbox,
|
||||||
};
|
};
|
||||||
use crate::conf::AccountSettings;
|
use crate::conf::AccountSettings;
|
||||||
use crate::email::parser::BytesExt;
|
use crate::email::parser::BytesExt;
|
||||||
|
@ -128,6 +128,10 @@ impl BackendFolder for MboxFolder {
|
||||||
self.parent
|
self.parent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn special_usage(&self) -> SpecialUsageMailbox {
|
||||||
|
SpecialUsageMailbox::Normal
|
||||||
|
}
|
||||||
|
|
||||||
fn permissions(&self) -> FolderPermissions {
|
fn permissions(&self) -> FolderPermissions {
|
||||||
self.permissions
|
self.permissions
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ use crate::async_workers::{Async, AsyncBuilder, AsyncStatus, WorkContext};
|
||||||
use crate::backends::FolderHash;
|
use crate::backends::FolderHash;
|
||||||
use crate::backends::{
|
use crate::backends::{
|
||||||
BackendFolder, BackendOp, Folder, FolderPermissions, MailBackend, RefreshEventConsumer,
|
BackendFolder, BackendOp, Folder, FolderPermissions, MailBackend, RefreshEventConsumer,
|
||||||
|
SpecialUsageMailbox,
|
||||||
};
|
};
|
||||||
use crate::conf::AccountSettings;
|
use crate::conf::AccountSettings;
|
||||||
use crate::email::{Envelope, EnvelopeHash, Flag};
|
use crate::email::{Envelope, EnvelopeHash, Flag};
|
||||||
|
@ -66,6 +67,7 @@ struct NotmuchFolder {
|
||||||
parent: Option<FolderHash>,
|
parent: Option<FolderHash>,
|
||||||
name: String,
|
name: String,
|
||||||
path: String,
|
path: String,
|
||||||
|
usage: SpecialUsageMailbox,
|
||||||
query_str: String,
|
query_str: String,
|
||||||
query: Option<*mut notmuch_query_t>,
|
query: Option<*mut notmuch_query_t>,
|
||||||
phantom: std::marker::PhantomData<&'static mut notmuch_query_t>,
|
phantom: std::marker::PhantomData<&'static mut notmuch_query_t>,
|
||||||
|
@ -98,6 +100,10 @@ impl BackendFolder for NotmuchFolder {
|
||||||
self.parent
|
self.parent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn special_usage(&self) -> SpecialUsageMailbox {
|
||||||
|
self.usage
|
||||||
|
}
|
||||||
|
|
||||||
fn permissions(&self) -> FolderPermissions {
|
fn permissions(&self) -> FolderPermissions {
|
||||||
FolderPermissions::default()
|
FolderPermissions::default()
|
||||||
}
|
}
|
||||||
|
@ -156,6 +162,7 @@ impl NotmuchDb {
|
||||||
parent: None,
|
parent: None,
|
||||||
query: None,
|
query: None,
|
||||||
query_str: query_str.to_string(),
|
query_str: query_str.to_string(),
|
||||||
|
usage: SpecialUsageMailbox::Normal,
|
||||||
phantom: std::marker::PhantomData,
|
phantom: std::marker::PhantomData,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with meli. If not, see <http://www.gnu.org/licenses/>.
|
* along with meli. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
use crate::backends::SpecialUseMailbox;
|
use crate::backends::SpecialUsageMailbox;
|
||||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ pub struct FolderConf {
|
||||||
#[serde(deserialize_with = "toggleflag_de")]
|
#[serde(deserialize_with = "toggleflag_de")]
|
||||||
pub ignore: ToggleFlag,
|
pub ignore: ToggleFlag,
|
||||||
#[serde(default = "none")]
|
#[serde(default = "none")]
|
||||||
pub usage: Option<SpecialUseMailbox>,
|
pub usage: Option<SpecialUsageMailbox>,
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
pub extra: HashMap<String, String>,
|
pub extra: HashMap<String, String>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,7 +141,7 @@ extern crate uuid;
|
||||||
pub use crate::conf::*;
|
pub use crate::conf::*;
|
||||||
pub use crate::mailbox::*;
|
pub use crate::mailbox::*;
|
||||||
|
|
||||||
pub use crate::backends::{Backends, RefreshEvent, RefreshEventConsumer, SpecialUseMailbox};
|
pub use crate::backends::{Backends, RefreshEvent, RefreshEventConsumer, SpecialUsageMailbox};
|
||||||
pub use crate::email::{Envelope, Flag};
|
pub use crate::email::{Envelope, Flag};
|
||||||
pub use crate::error::{MeliError, Result};
|
pub use crate::error::{MeliError, Result};
|
||||||
|
|
||||||
|
|
|
@ -574,7 +574,7 @@ impl Component for Composer {
|
||||||
context,
|
context,
|
||||||
self.account_cursor,
|
self.account_cursor,
|
||||||
self.draft.clone(),
|
self.draft.clone(),
|
||||||
SpecialUseMailbox::Sent,
|
SpecialUsageMailbox::Sent,
|
||||||
Flag::SEEN,
|
Flag::SEEN,
|
||||||
) {
|
) {
|
||||||
context
|
context
|
||||||
|
@ -584,7 +584,7 @@ impl Component for Composer {
|
||||||
save_draft(
|
save_draft(
|
||||||
self.draft.clone().finalise().unwrap().as_bytes(),
|
self.draft.clone().finalise().unwrap().as_bytes(),
|
||||||
context,
|
context,
|
||||||
SpecialUseMailbox::Drafts,
|
SpecialUsageMailbox::Drafts,
|
||||||
Flag::SEEN | Flag::DRAFT,
|
Flag::SEEN | Flag::DRAFT,
|
||||||
self.account_cursor,
|
self.account_cursor,
|
||||||
);
|
);
|
||||||
|
@ -633,7 +633,7 @@ impl Component for Composer {
|
||||||
save_draft(
|
save_draft(
|
||||||
self.draft.clone().finalise().unwrap().as_bytes(),
|
self.draft.clone().finalise().unwrap().as_bytes(),
|
||||||
context,
|
context,
|
||||||
SpecialUseMailbox::Drafts,
|
SpecialUsageMailbox::Drafts,
|
||||||
Flag::SEEN | Flag::DRAFT,
|
Flag::SEEN | Flag::DRAFT,
|
||||||
self.account_cursor,
|
self.account_cursor,
|
||||||
);
|
);
|
||||||
|
@ -1069,7 +1069,7 @@ pub fn send_draft(
|
||||||
context: &mut Context,
|
context: &mut Context,
|
||||||
account_cursor: usize,
|
account_cursor: usize,
|
||||||
mut draft: Draft,
|
mut draft: Draft,
|
||||||
folder_type: SpecialUseMailbox,
|
folder_type: SpecialUsageMailbox,
|
||||||
flags: Flag,
|
flags: Flag,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
@ -1216,7 +1216,7 @@ pub fn send_draft(
|
||||||
pub fn save_draft(
|
pub fn save_draft(
|
||||||
bytes: &[u8],
|
bytes: &[u8],
|
||||||
context: &mut Context,
|
context: &mut Context,
|
||||||
folder_type: SpecialUseMailbox,
|
folder_type: SpecialUsageMailbox,
|
||||||
flags: Flag,
|
flags: Flag,
|
||||||
account_cursor: usize,
|
account_cursor: usize,
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -1200,7 +1200,7 @@ impl Component for MailView {
|
||||||
unsafe { &mut *(unsafe_context) },
|
unsafe { &mut *(unsafe_context) },
|
||||||
self.coordinates.0,
|
self.coordinates.0,
|
||||||
draft,
|
draft,
|
||||||
SpecialUseMailbox::Sent,
|
SpecialUsageMailbox::Sent,
|
||||||
Flag::SEEN,
|
Flag::SEEN,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ use self::default_vals::*;
|
||||||
use self::notifications::NotificationsSettings;
|
use self::notifications::NotificationsSettings;
|
||||||
use self::terminal::TerminalSettings;
|
use self::terminal::TerminalSettings;
|
||||||
use crate::pager::PagerSettings;
|
use crate::pager::PagerSettings;
|
||||||
use melib::backends::SpecialUseMailbox;
|
use melib::backends::SpecialUsageMailbox;
|
||||||
use melib::conf::{toggleflag_de, AccountSettings, FolderConf, ToggleFlag};
|
use melib::conf::{toggleflag_de, AccountSettings, FolderConf, ToggleFlag};
|
||||||
use melib::error::*;
|
use melib::error::*;
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ impl From<FileAccount> for AccountConf {
|
||||||
}
|
}
|
||||||
|
|
||||||
if folder_confs[s].folder_conf().ignore.is_unset() {
|
if folder_confs[s].folder_conf().ignore.is_unset() {
|
||||||
use SpecialUseMailbox::*;
|
use SpecialUsageMailbox::*;
|
||||||
if [Junk, Sent, Trash]
|
if [Junk, Sent, Trash]
|
||||||
.contains(&folder_confs[s].folder_conf().usage.as_ref().unwrap())
|
.contains(&folder_confs[s].folder_conf().usage.as_ref().unwrap())
|
||||||
{
|
{
|
||||||
|
@ -564,23 +564,23 @@ impl Serialize for CacheType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn usage(name: &str) -> Option<SpecialUseMailbox> {
|
pub fn usage(name: &str) -> Option<SpecialUsageMailbox> {
|
||||||
if name.eq_ignore_ascii_case("inbox") {
|
if name.eq_ignore_ascii_case("inbox") {
|
||||||
Some(SpecialUseMailbox::Inbox)
|
Some(SpecialUsageMailbox::Inbox)
|
||||||
} else if name.eq_ignore_ascii_case("archive") {
|
} else if name.eq_ignore_ascii_case("archive") {
|
||||||
Some(SpecialUseMailbox::Archive)
|
Some(SpecialUsageMailbox::Archive)
|
||||||
} else if name.eq_ignore_ascii_case("drafts") {
|
} else if name.eq_ignore_ascii_case("drafts") {
|
||||||
Some(SpecialUseMailbox::Drafts)
|
Some(SpecialUsageMailbox::Drafts)
|
||||||
} else if name.eq_ignore_ascii_case("junk") {
|
} else if name.eq_ignore_ascii_case("junk") {
|
||||||
Some(SpecialUseMailbox::Junk)
|
Some(SpecialUsageMailbox::Junk)
|
||||||
} else if name.eq_ignore_ascii_case("spam") {
|
} else if name.eq_ignore_ascii_case("spam") {
|
||||||
Some(SpecialUseMailbox::Junk)
|
Some(SpecialUsageMailbox::Junk)
|
||||||
} else if name.eq_ignore_ascii_case("sent") {
|
} else if name.eq_ignore_ascii_case("sent") {
|
||||||
Some(SpecialUseMailbox::Sent)
|
Some(SpecialUsageMailbox::Sent)
|
||||||
} else if name.eq_ignore_ascii_case("trash") {
|
} else if name.eq_ignore_ascii_case("trash") {
|
||||||
Some(SpecialUseMailbox::Trash)
|
Some(SpecialUsageMailbox::Trash)
|
||||||
} else {
|
} else {
|
||||||
Some(SpecialUseMailbox::Normal)
|
Some(SpecialUsageMailbox::Normal)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ use fnv::FnvHashMap;
|
||||||
use melib::async_workers::{Async, AsyncBuilder, AsyncStatus, WorkContext};
|
use melib::async_workers::{Async, AsyncBuilder, AsyncStatus, WorkContext};
|
||||||
use melib::backends::{
|
use melib::backends::{
|
||||||
BackendOp, Backends, Folder, FolderHash, FolderOperation, MailBackend, NotifyFn, ReadOnlyOp,
|
BackendOp, Backends, Folder, FolderHash, FolderOperation, MailBackend, NotifyFn, ReadOnlyOp,
|
||||||
RefreshEvent, RefreshEventConsumer, RefreshEventKind, SpecialUseMailbox,
|
RefreshEvent, RefreshEventConsumer, RefreshEventKind, SpecialUsageMailbox,
|
||||||
};
|
};
|
||||||
use melib::error::{MeliError, Result};
|
use melib::error::{MeliError, Result};
|
||||||
use melib::mailbox::*;
|
use melib::mailbox::*;
|
||||||
|
@ -335,7 +335,7 @@ impl Account {
|
||||||
|
|
||||||
if self.settings.folder_confs.contains_key(f.path()) {
|
if self.settings.folder_confs.contains_key(f.path()) {
|
||||||
match self.settings.folder_confs[f.path()].folder_conf().usage {
|
match self.settings.folder_confs[f.path()].folder_conf().usage {
|
||||||
Some(SpecialUseMailbox::Sent) => {
|
Some(SpecialUsageMailbox::Sent) => {
|
||||||
sent_folder = Some(f.hash());
|
sent_folder = Some(f.hash());
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
|
@ -452,9 +452,9 @@ impl Account {
|
||||||
let our_tx = builder.tx();
|
let our_tx = builder.tx();
|
||||||
let folder_hash = folder.hash();
|
let folder_hash = folder.hash();
|
||||||
let priority = match folder_confs[&folder.hash()].folder_conf().usage {
|
let priority = match folder_confs[&folder.hash()].folder_conf().usage {
|
||||||
Some(SpecialUseMailbox::Inbox) => 0,
|
Some(SpecialUsageMailbox::Inbox) => 0,
|
||||||
Some(SpecialUseMailbox::Sent) => 1,
|
Some(SpecialUsageMailbox::Sent) => 1,
|
||||||
Some(SpecialUseMailbox::Drafts) | Some(SpecialUseMailbox::Trash) => 2,
|
Some(SpecialUsageMailbox::Drafts) | Some(SpecialUsageMailbox::Trash) => 2,
|
||||||
Some(_) | None => {
|
Some(_) | None => {
|
||||||
3 * folder
|
3 * folder
|
||||||
.path()
|
.path()
|
||||||
|
@ -876,14 +876,14 @@ impl Account {
|
||||||
pub fn save_special(
|
pub fn save_special(
|
||||||
&self,
|
&self,
|
||||||
bytes: &[u8],
|
bytes: &[u8],
|
||||||
folder_type: SpecialUseMailbox,
|
folder_type: SpecialUsageMailbox,
|
||||||
flags: Flag,
|
flags: Flag,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let mut failure = true;
|
let mut failure = true;
|
||||||
for folder in &[
|
for folder in &[
|
||||||
self.special_use_folder(folder_type),
|
self.special_use_folder(folder_type),
|
||||||
self.special_use_folder(SpecialUseMailbox::Inbox),
|
self.special_use_folder(SpecialUsageMailbox::Inbox),
|
||||||
self.special_use_folder(SpecialUseMailbox::Normal),
|
self.special_use_folder(SpecialUsageMailbox::Normal),
|
||||||
] {
|
] {
|
||||||
if folder.is_none() {
|
if folder.is_none() {
|
||||||
continue;
|
continue;
|
||||||
|
@ -965,7 +965,7 @@ impl Account {
|
||||||
let sent_folder = self
|
let sent_folder = self
|
||||||
.folder_confs
|
.folder_confs
|
||||||
.iter()
|
.iter()
|
||||||
.find(|(_, f)| f.folder_conf().usage == Some(SpecialUseMailbox::Sent));
|
.find(|(_, f)| f.folder_conf().usage == Some(SpecialUsageMailbox::Sent));
|
||||||
if let Some(sent_folder) = sent_folder.as_ref() {
|
if let Some(sent_folder) = sent_folder.as_ref() {
|
||||||
&self.folder_names[&sent_folder.0]
|
&self.folder_names[&sent_folder.0]
|
||||||
} else {
|
} else {
|
||||||
|
@ -973,7 +973,7 @@ impl Account {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn special_use_folder(&self, special_use: SpecialUseMailbox) -> Option<&str> {
|
pub fn special_use_folder(&self, special_use: SpecialUsageMailbox) -> Option<&str> {
|
||||||
let ret = self
|
let ret = self
|
||||||
.folder_confs
|
.folder_confs
|
||||||
.iter()
|
.iter()
|
||||||
|
|
Loading…
Reference in New Issue