melib/backends: MailBackend::refresh() returns Result
Handle cases were refresh() would fail properly. Fixes a crash reported in #13async
parent
17a0f31b3e
commit
0201241786
|
@ -252,8 +252,8 @@ pub trait MailBackend: ::std::fmt::Debug + Send + Sync {
|
||||||
&mut self,
|
&mut self,
|
||||||
folder_hash: FolderHash,
|
folder_hash: FolderHash,
|
||||||
sender: RefreshEventConsumer,
|
sender: RefreshEventConsumer,
|
||||||
) -> Async<Result<Vec<RefreshEvent>>> {
|
) -> Result<Async<Result<Vec<RefreshEvent>>>> {
|
||||||
unimplemented!()
|
Err(MeliError::new("Unimplemented."))
|
||||||
}
|
}
|
||||||
fn watch(
|
fn watch(
|
||||||
&self,
|
&self,
|
||||||
|
|
|
@ -203,7 +203,7 @@ impl MailBackend for MaildirType {
|
||||||
&mut self,
|
&mut self,
|
||||||
folder_hash: FolderHash,
|
folder_hash: FolderHash,
|
||||||
sender: RefreshEventConsumer,
|
sender: RefreshEventConsumer,
|
||||||
) -> Async<Result<Vec<RefreshEvent>>> {
|
) -> Result<Async<Result<Vec<RefreshEvent>>>> {
|
||||||
let w = AsyncBuilder::new();
|
let w = AsyncBuilder::new();
|
||||||
let cache_dir = xdg::BaseDirectories::with_profile("meli", &self.name).unwrap();
|
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(
|
fn watch(
|
||||||
&self,
|
&self,
|
||||||
|
|
|
@ -676,10 +676,16 @@ impl Component for Listing {
|
||||||
UIEvent::Input(ref key)
|
UIEvent::Input(ref key)
|
||||||
if shortcut!(key == shortcuts[Listing::DESCRIPTION]["refresh"]) =>
|
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];
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
UIEvent::StartupCheck(_) => {
|
UIEvent::StartupCheck(_) => {
|
||||||
|
|
|
@ -699,13 +699,14 @@ impl Account {
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
pub fn refresh(&mut self, folder_hash: FolderHash) {
|
pub fn refresh(&mut self, folder_hash: FolderHash) -> Result<()> {
|
||||||
let sender_ = self.sender.clone();
|
let sender_ = self.sender.clone();
|
||||||
let r = RefreshEventConsumer::new(Box::new(move |r| {
|
let r = RefreshEventConsumer::new(Box::new(move |r| {
|
||||||
sender_.send(ThreadEvent::from(r)).unwrap();
|
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();
|
self.work_context.new_work.send(h.work().unwrap()).unwrap();
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
pub fn watch(&self) {
|
pub fn watch(&self) {
|
||||||
if self.settings.account().manual_refresh {
|
if self.settings.account().manual_refresh {
|
||||||
|
|
Loading…
Reference in New Issue