From 50cd81772f39b67cd84ca973a11d2bd398a7fede Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Tue, 5 Jan 2021 19:18:45 +0200 Subject: [PATCH] melib/jmap: impl watch() with polling Concerns #22 --- melib/src/backends/jmap.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/melib/src/backends/jmap.rs b/melib/src/backends/jmap.rs index 1a5a23ab6..3131b1bc2 100644 --- a/melib/src/backends/jmap.rs +++ b/melib/src/backends/jmap.rs @@ -341,7 +341,32 @@ impl MailBackend for JmapType { } fn watch(&self) -> ResultFuture<()> { - Err(MeliError::from("JMAP watch for updates is unimplemented")) + let connection = self.connection.clone(); + let store = self.store.clone(); + Ok(Box::pin(async move { + { + let mut conn = connection.lock().await; + conn.connect().await?; + } + loop { + { + let mailbox_hashes = { + store + .mailboxes + .read() + .unwrap() + .keys() + .cloned() + .collect::>() + }; + let conn = connection.lock().await; + for mailbox_hash in mailbox_hashes { + conn.email_changes(mailbox_hash).await?; + } + } + crate::connections::sleep(std::time::Duration::from_secs(60)).await; + } + })) } fn mailboxes(&self) -> ResultFuture> {