Show error if watch job fails
parent
341ff9164b
commit
b545a0b905
|
@ -199,7 +199,10 @@ pub enum JobRequest {
|
|||
AsBytes(JoinHandle),
|
||||
SetMailboxPermissions(MailboxHash, JoinHandle, oneshot::Receiver<Result<()>>),
|
||||
SetMailboxSubscription(MailboxHash, JoinHandle, oneshot::Receiver<Result<()>>),
|
||||
Watch(JoinHandle),
|
||||
Watch {
|
||||
channel: oneshot::Receiver<Result<()>>,
|
||||
handle: JoinHandle,
|
||||
},
|
||||
}
|
||||
|
||||
impl Drop for JobRequest {
|
||||
|
@ -225,7 +228,7 @@ impl Drop for JobRequest {
|
|||
JobRequest::SetMailboxSubscription(_, h, _) => {
|
||||
h.0.cancel();
|
||||
}
|
||||
JobRequest::Watch(h) => h.0.cancel(),
|
||||
JobRequest::Watch { handle, .. } => handle.0.cancel(),
|
||||
JobRequest::SendMessage => {}
|
||||
JobRequest::SendMessageBackground(h, _) => {
|
||||
h.0.cancel();
|
||||
|
@ -257,7 +260,7 @@ impl core::fmt::Debug for JobRequest {
|
|||
JobRequest::SetMailboxSubscription(_, _, _) => {
|
||||
write!(f, "JobRequest::SetMailboxSubscription")
|
||||
}
|
||||
JobRequest::Watch(_) => write!(f, "JobRequest::Watch"),
|
||||
JobRequest::Watch { .. } => write!(f, "JobRequest::Watch"),
|
||||
JobRequest::SendMessage => write!(f, "JobRequest::SendMessage"),
|
||||
JobRequest::SendMessageBackground(_, _) => {
|
||||
write!(f, "JobRequest::SendMessageBackground")
|
||||
|
@ -269,7 +272,7 @@ impl core::fmt::Debug for JobRequest {
|
|||
impl JobRequest {
|
||||
fn is_watch(&self) -> bool {
|
||||
match self {
|
||||
JobRequest::Watch(_) => true,
|
||||
JobRequest::Watch { .. } => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
@ -843,12 +846,13 @@ impl Account {
|
|||
if !self.active_jobs.values().any(|j| j.is_watch()) {
|
||||
match self.backend.read().unwrap().watch() {
|
||||
Ok(fut) => {
|
||||
let (_channel, handle, job_id) = if self.backend_capabilities.is_async {
|
||||
let (channel, handle, job_id) = if self.backend_capabilities.is_async {
|
||||
self.job_executor.spawn_specialized(fut)
|
||||
} else {
|
||||
self.job_executor.spawn_blocking(fut)
|
||||
};
|
||||
self.active_jobs.insert(job_id, JobRequest::Watch(handle));
|
||||
self.active_jobs
|
||||
.insert(job_id, JobRequest::Watch { channel, handle });
|
||||
}
|
||||
Err(e) => {
|
||||
self.sender
|
||||
|
@ -1769,8 +1773,23 @@ impl Account {
|
|||
None => {}
|
||||
}
|
||||
}
|
||||
JobRequest::Watch(_) => {
|
||||
JobRequest::Watch {
|
||||
ref mut channel,
|
||||
handle: _,
|
||||
} => {
|
||||
debug!("JobRequest::Watch finished??? ");
|
||||
let r = channel.try_recv().unwrap();
|
||||
debug!("JobRequest::Watch {:?}", r);
|
||||
if let Some(Err(err)) = r {
|
||||
//TODO: relaunch watch job with ratelimit for failure
|
||||
self.sender
|
||||
.send(ThreadEvent::UIEvent(UIEvent::Notification(
|
||||
Some(format!("{}: watch thread failed", &self.name)),
|
||||
err.to_string(),
|
||||
Some(crate::types::NotificationType::ERROR),
|
||||
)))
|
||||
.expect("Could not send event on main channel");
|
||||
}
|
||||
}
|
||||
JobRequest::Generic {
|
||||
ref name,
|
||||
|
|
Loading…
Reference in New Issue