melib/backends: MailBackend::refresh() returns Result
Handle cases were refresh() would fail properly. Fixes a crash reported in #13memfd
parent
17a0f31b3e
commit
0201241786
|
@ -252,8 +252,8 @@ pub trait MailBackend: ::std::fmt::Debug + Send + Sync {
|
|||
&mut self,
|
||||
folder_hash: FolderHash,
|
||||
sender: RefreshEventConsumer,
|
||||
) -> Async<Result<Vec<RefreshEvent>>> {
|
||||
unimplemented!()
|
||||
) -> Result<Async<Result<Vec<RefreshEvent>>>> {
|
||||
Err(MeliError::new("Unimplemented."))
|
||||
}
|
||||
fn watch(
|
||||
&self,
|
||||
|
|
|
@ -203,7 +203,7 @@ impl MailBackend for MaildirType {
|
|||
&mut self,
|
||||
folder_hash: FolderHash,
|
||||
sender: RefreshEventConsumer,
|
||||
) -> Async<Result<Vec<RefreshEvent>>> {
|
||||
) -> Result<Async<Result<Vec<RefreshEvent>>>> {
|
||||
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,
|
||||
|
|
|
@ -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(_) => {
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue