diff --git a/melib/src/backends.rs b/melib/src/backends.rs index b26ba479a..e3981f335 100644 --- a/melib/src/backends.rs +++ b/melib/src/backends.rs @@ -297,6 +297,8 @@ impl NotifyFn { pub type ResultFuture = Result> + Send + 'static>>>; pub trait MailBackend: ::std::fmt::Debug + Send + Sync { + fn is_async(&self) -> bool; + fn is_remote(&self) -> bool; fn is_online(&self) -> Result<()>; fn is_online_async(&self) -> ResultFuture<()> { Err(MeliError::new("Unimplemented.")) diff --git a/melib/src/backends/imap.rs b/melib/src/backends/imap.rs index b83c83412..f97a770db 100644 --- a/melib/src/backends/imap.rs +++ b/melib/src/backends/imap.rs @@ -185,6 +185,14 @@ pub(self) fn try_lock( } impl MailBackend for ImapType { + fn is_async(&self) -> bool { + false + } + + fn is_remote(&self) -> bool { + true + } + fn is_online(&self) -> Result<()> { //if let Ok(mut g) = try_lock(&self.connection, None) { // let _ = g.connect(); diff --git a/melib/src/backends/imap_async.rs b/melib/src/backends/imap_async.rs index bca41fdb5..ba61d2d6b 100644 --- a/melib/src/backends/imap_async.rs +++ b/melib/src/backends/imap_async.rs @@ -174,6 +174,12 @@ pub struct ImapType { } impl MailBackend for ImapType { + fn is_async(&self) -> bool { + true + } + fn is_remote(&self) -> bool { + true + } fn get_async( &mut self, mailbox: &Mailbox, diff --git a/melib/src/backends/jmap.rs b/melib/src/backends/jmap.rs index 8d7f095d7..9394a1246 100644 --- a/melib/src/backends/jmap.rs +++ b/melib/src/backends/jmap.rs @@ -190,6 +190,14 @@ pub struct JmapType { } impl MailBackend for JmapType { + fn is_async(&self) -> bool { + false + } + + fn is_remote(&self) -> bool { + true + } + fn is_online(&self) -> Result<()> { self.online.lock().unwrap().1.clone() } diff --git a/melib/src/backends/maildir/backend.rs b/melib/src/backends/maildir/backend.rs index fd7761ba1..ac2637c5c 100644 --- a/melib/src/backends/maildir/backend.rs +++ b/melib/src/backends/maildir/backend.rs @@ -175,6 +175,14 @@ pub fn move_to_cur(p: PathBuf) -> Result { } impl MailBackend for MaildirType { + fn is_async(&self) -> bool { + false + } + + fn is_remote(&self) -> bool { + false + } + fn is_online(&self) -> Result<()> { Ok(()) } diff --git a/melib/src/backends/mbox.rs b/melib/src/backends/mbox.rs index 81ee7db29..df23fdeb7 100644 --- a/melib/src/backends/mbox.rs +++ b/melib/src/backends/mbox.rs @@ -647,6 +647,14 @@ pub struct MboxType { } impl MailBackend for MboxType { + fn is_async(&self) -> bool { + false + } + + fn is_remote(&self) -> bool { + false + } + fn is_online(&self) -> Result<()> { Ok(()) } diff --git a/melib/src/backends/notmuch.rs b/melib/src/backends/notmuch.rs index d8c4aa7b0..9e3afdbc7 100644 --- a/melib/src/backends/notmuch.rs +++ b/melib/src/backends/notmuch.rs @@ -318,9 +318,18 @@ impl NotmuchDb { } impl MailBackend for NotmuchDb { + fn is_async(&self) -> bool { + false + } + + fn is_remote(&self) -> bool { + false + } + fn is_online(&self) -> Result<()> { Ok(()) } + fn get(&mut self, mailbox: &Mailbox) -> Result>>> { let mut w = AsyncBuilder::new(); let mailbox_hash = mailbox.hash(); diff --git a/src/plugins/backend.rs b/src/plugins/backend.rs index 507c9c1fe..d6feb4705 100644 --- a/src/plugins/backend.rs +++ b/src/plugins/backend.rs @@ -65,6 +65,16 @@ impl Drop for PluginBackend { } impl MailBackend for PluginBackend { + fn is_async(&self) -> bool { + // TODO + false + } + + fn is_remote(&self) -> bool { + // TODO + false + } + fn is_online(&self) -> Result<()> { if let Ok(mut is_online) = self.is_online.try_lock() { let now = std::time::Instant::now();