summaryrefslogtreecommitdiffstats
path: root/melib/src
diff options
context:
space:
mode:
Diffstat (limited to 'melib/src')
-rw-r--r--melib/src/backends.rs14
-rw-r--r--melib/src/backends/imap/folder.rs8
-rw-r--r--melib/src/backends/imap/protocol_parser.rs7
-rw-r--r--melib/src/backends/imap/watch.rs3
-rw-r--r--melib/src/backends/maildir.rs7
-rw-r--r--melib/src/backends/mbox.rs6
-rw-r--r--melib/src/backends/notmuch.rs7
-rw-r--r--melib/src/conf.rs4
-rw-r--r--melib/src/lib.rs2
9 files changed, 50 insertions, 8 deletions
diff --git a/melib/src/backends.rs b/melib/src/backends.rs
index 5f3149f4..aa433c70 100644
--- a/melib/src/backends.rs
+++ b/melib/src/backends.rs
@@ -339,7 +339,7 @@ impl BackendOp for ReadOnlyOp {
}
#[derive(Debug, Copy, Hash, Eq, Clone, Serialize, Deserialize, PartialEq)]
-pub enum SpecialUseMailbox {
+pub enum SpecialUsageMailbox {
Normal,
Inbox,
Archive,
@@ -350,6 +350,12 @@ pub enum SpecialUseMailbox {
Trash,
}
+impl Default for SpecialUsageMailbox {
+ fn default() -> Self {
+ SpecialUsageMailbox::Normal
+ }
+}
+
pub trait BackendFolder: Debug {
fn hash(&self) -> FolderHash;
fn name(&self) -> &str;
@@ -359,7 +365,7 @@ pub trait BackendFolder: Debug {
fn clone(&self) -> Folder;
fn children(&self) -> &[FolderHash];
fn parent(&self) -> Option<FolderHash>;
-
+ fn special_usage(&self) -> SpecialUsageMailbox;
fn permissions(&self) -> FolderPermissions;
}
@@ -387,6 +393,10 @@ impl BackendFolder for DummyFolder {
folder_default()
}
+ fn special_usage(&self) -> SpecialUsageMailbox {
+ SpecialUsageMailbox::Normal
+ }
+
fn children(&self) -> &[FolderHash] {
&self.v
}
diff --git a/melib/src/backends/imap/folder.rs b/melib/src/backends/imap/folder.rs
index 5a0535ab..3ca20047 100644
--- a/melib/src/backends/imap/folder.rs
+++ b/melib/src/backends/imap/folder.rs
@@ -18,7 +18,7 @@
* You should have received a copy of the GNU General Public License
* 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};
#[derive(Debug, Default, Clone)]
@@ -28,6 +28,7 @@ pub struct ImapFolder {
pub(super) name: String,
pub(super) parent: Option<FolderHash>,
pub(super) children: Vec<FolderHash>,
+ pub usage: SpecialUsageMailbox,
pub no_select: bool,
pub permissions: Arc<Mutex<FolderPermissions>>,
@@ -62,12 +63,17 @@ impl BackendFolder for ImapFolder {
name: self.name.clone(),
parent: self.parent,
children: self.children.clone(),
+ usage: self.usage,
no_select: self.no_select,
permissions: self.permissions.clone(),
exists: self.exists.clone(),
})
}
+ fn special_usage(&self) -> SpecialUsageMailbox {
+ self.usage
+ }
+
fn parent(&self) -> Option<FolderHash> {
self.parent
}
diff --git a/melib/src/backends/imap/protocol_parser.rs b/melib/src/backends/imap/protocol_parser.rs
index 9fa8b3bd..067ee279 100644
--- a/melib/src/backends/imap/protocol_parser.rs
+++ b/melib/src/backends/imap/protocol_parser.rs
@@ -89,8 +89,15 @@ named!(
let mut f = ImapFolder::default();
f.no_select = false;
for p in properties.split(|&b| b == b' ') {
+ use crate::backends::SpecialUsageMailbox;
if p.eq_ignore_ascii_case(b"\\NoSelect") {
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);
diff --git a/melib/src/backends/imap/watch.rs b/melib/src/backends/imap/watch.rs
index df631f21..1a92f433 100644
--- a/melib/src/backends/imap/watch.rs
+++ b/melib/src/backends/imap/watch.rs
@@ -19,6 +19,7 @@
* along with meli. If not, see <http://www.gnu.org/licenses/>.
*/
use super::*;
+use crate::backends::SpecialUsageMailbox;
use std::sync::{Arc, Mutex, RwLock};
/// Arguments for IMAP watching functions
@@ -123,7 +124,7 @@ pub fn idle(kit: ImapWatchKit) -> Result<()> {
.read()
.unwrap()
.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)
{
Some(folder) => folder,
diff --git a/melib/src/backends/maildir.rs b/melib/src/backends/maildir.rs
index b2bbe5b6..177c86c2 100644
--- a/melib/src/backends/maildir.rs
+++ b/melib/src/backends/maildir.rs
@@ -176,6 +176,7 @@ pub struct MaildirFolder {
path: PathBuf,
parent: Option<FolderHash>,
children: Vec<FolderHash>,
+ usage: SpecialUsageMailbox,
permissions: FolderPermissions,
}
@@ -237,6 +238,7 @@ impl MaildirFolder {
fs_path: pathbuf,
parent,
children,
+ usage: SpecialUsageMailbox::Normal,
permissions: FolderPermissions {
create_messages: !read_only,
remove_messages: !read_only,
@@ -300,11 +302,16 @@ impl BackendFolder for MaildirFolder {
fs_path: self.fs_path.clone(),
path: self.path.clone(),
children: self.children.clone(),
+ usage: self.usage,
parent: self.parent,
permissions: self.permissions,
})
}
+ fn special_usage(&self) -> SpecialUsageMailbox {
+ self.usage
+ }
+
fn parent(&self) -> Option<FolderHash> {
self.parent
}
diff --git a/melib/src/backends/mbox.rs b/melib/src/backends/mbox.rs
index a69e1010..f10674d4 100644
--- a/melib/src/backends/mbox.rs
+++ b/melib/src/backends/mbox.rs
@@ -28,7 +28,7 @@ use crate::backends::BackendOp;
use crate::backends::FolderHash;
use crate::backends::{
BackendFolder, Folder, FolderPermissions, MailBackend, RefreshEvent, RefreshEventConsumer,
- RefreshEventKind,
+ RefreshEventKind, SpecialUsageMailbox,
};
use crate::conf::AccountSettings;
use crate::email::parser::BytesExt;
@@ -128,6 +128,10 @@ impl BackendFolder for MboxFolder {
self.parent
}
+ fn special_usage(&self) -> SpecialUsageMailbox {
+ SpecialUsageMailbox::Normal
+ }
+
fn permissions(&self) -> FolderPermissions {
self.permissions
}
diff --git a/melib/src/backends/notmuch.rs b/melib/src/backends/notmuch.rs
index 70bac2b5..95582d2b 100644
--- a/melib/src/backends/notmuch.rs
+++ b/melib/src/backends/notmuch.rs
@@ -2,6 +2,7 @@ use crate::async_workers::{Async, AsyncBuilder, AsyncStatus, WorkContext};
use crate::backends::FolderHash;
use crate::backends::{
BackendFolder, BackendOp, Folder, FolderPermissions, MailBackend, RefreshEventConsumer,
+ SpecialUsageMailbox,
};
use crate::conf::AccountSettings;
use crate::email::{Envelope, EnvelopeHash, Flag};
@@ -66,6 +67,7 @@ struct NotmuchFolder {
parent: Option<FolderHash>,
name: String,
path: String,
+ usage: SpecialUsageMailbox,
query_str: String,
query: Option<*mut notmuch_query_t>,
phantom: std::marker::PhantomData<&'static mut notmuch_query_t>,
@@ -98,6 +100,10 @@ impl BackendFolder for NotmuchFolder {
self.parent
}
+ fn special_usage(&self) -> SpecialUsageMailbox {
+ self.usage
+ }
+
fn permissions(&self) -> FolderPermissions {
FolderPermissions::default()
}
@@ -156,6 +162,7 @@ impl NotmuchDb {
parent: None,
query: None,
query_str: query_str.to_string(),
+ usage: SpecialUsageMailbox::Normal,
phantom: std::marker::PhantomData,
},
);
diff --git a/melib/src/conf.rs b/melib/src/conf.rs
index d5199213..6b5f8298 100644
--- a/melib/src/conf.rs
+++ b/melib/src/conf.rs
@@ -18,7 +18,7 @@
* You should have received a copy of the GNU General Public License
* 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 std::collections::HashMap;
@@ -81,7 +81,7 @@ pub struct FolderConf {
#[serde(deserialize_with = "toggleflag_de")]
pub ignore: ToggleFlag,
#[serde(default = "none")]
- pub usage: Option<SpecialUseMailbox>,
+ pub usage: Option<SpecialUsageMailbox>,
#[serde(flatten)]
pub extra: HashMap<String, String>,
}
diff --git a/melib/src/lib.rs b/melib/src/lib.rs
index 84361f1d..0ff5c75a 100644
--- a/melib/src/lib.rs
+++ b/melib/src/lib.rs
@@ -141,7 +141,7 @@ extern crate uuid;
pub use crate::conf::*;
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::error::{MeliError, Result};