diff --git a/melib/src/backends.rs b/melib/src/backends.rs index 42e09b2c7..3c484e2e3 100644 --- a/melib/src/backends.rs +++ b/melib/src/backends.rs @@ -252,8 +252,8 @@ pub trait MailBackend: ::std::fmt::Debug + Send + Sync { &mut self, folder_hash: FolderHash, sender: RefreshEventConsumer, - ) -> Async>> { - unimplemented!() + ) -> Result>>> { + Err(MeliError::new("Unimplemented.")) } fn watch( &self, diff --git a/melib/src/backends/maildir/backend.rs b/melib/src/backends/maildir/backend.rs index 33b19a903..93c6c17d6 100644 --- a/melib/src/backends/maildir/backend.rs +++ b/melib/src/backends/maildir/backend.rs @@ -203,7 +203,7 @@ impl MailBackend for MaildirType { &mut self, folder_hash: FolderHash, sender: RefreshEventConsumer, - ) -> Async>> { + ) -> Result>>> { let w = AsyncBuilder::new(); let cache_dir = xdg::BaseDirectories::with_profile("meli", &self.name).unwrap(); @@ -327,7 +327,7 @@ impl MailBackend for MaildirType { } }) }; - w.build(handle) + Ok(w.build(handle)) } fn watch( &self, diff --git a/ui/src/components/mail/listing.rs b/ui/src/components/mail/listing.rs index 24ed7c943..c78a07316 100644 --- a/ui/src/components/mail/listing.rs +++ b/ui/src/components/mail/listing.rs @@ -676,10 +676,16 @@ impl Component for Listing { UIEvent::Input(ref key) if shortcut!(key == shortcuts[Listing::DESCRIPTION]["refresh"]) => { - let folder_hash = - context.accounts[self.cursor_pos.0].folders_order[self.cursor_pos.1]; let account = &mut context.accounts[self.cursor_pos.0]; - account.refresh(folder_hash); + if let Some(&folder_hash) = account.folders_order.get(self.cursor_pos.1) { + if let Err(err) = account.refresh(folder_hash) { + context.replies.push_back(UIEvent::Notification( + Some("Could not refresh.".to_string()), + err.to_string(), + Some(NotificationType::INFO), + )); + } + } return true; } UIEvent::StartupCheck(_) => { diff --git a/ui/src/conf/accounts.rs b/ui/src/conf/accounts.rs index 198c5c1ae..3c808c6cc 100644 --- a/ui/src/conf/accounts.rs +++ b/ui/src/conf/accounts.rs @@ -699,13 +699,14 @@ impl Account { } None } - pub fn refresh(&mut self, folder_hash: FolderHash) { + pub fn refresh(&mut self, folder_hash: FolderHash) -> Result<()> { let sender_ = self.sender.clone(); let r = RefreshEventConsumer::new(Box::new(move |r| { sender_.send(ThreadEvent::from(r)).unwrap(); })); - let mut h = self.backend.write().unwrap().refresh(folder_hash, r); + let mut h = self.backend.write().unwrap().refresh(folder_hash, r)?; self.work_context.new_work.send(h.work().unwrap()).unwrap(); + Ok(()) } pub fn watch(&self) { if self.settings.account().manual_refresh {