Show error if watch job fails
parent
341ff9164b
commit
b545a0b905
|
@ -199,7 +199,10 @@ pub enum JobRequest {
|
||||||
AsBytes(JoinHandle),
|
AsBytes(JoinHandle),
|
||||||
SetMailboxPermissions(MailboxHash, JoinHandle, oneshot::Receiver<Result<()>>),
|
SetMailboxPermissions(MailboxHash, JoinHandle, oneshot::Receiver<Result<()>>),
|
||||||
SetMailboxSubscription(MailboxHash, JoinHandle, oneshot::Receiver<Result<()>>),
|
SetMailboxSubscription(MailboxHash, JoinHandle, oneshot::Receiver<Result<()>>),
|
||||||
Watch(JoinHandle),
|
Watch {
|
||||||
|
channel: oneshot::Receiver<Result<()>>,
|
||||||
|
handle: JoinHandle,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for JobRequest {
|
impl Drop for JobRequest {
|
||||||
|
@ -225,7 +228,7 @@ impl Drop for JobRequest {
|
||||||
JobRequest::SetMailboxSubscription(_, h, _) => {
|
JobRequest::SetMailboxSubscription(_, h, _) => {
|
||||||
h.0.cancel();
|
h.0.cancel();
|
||||||
}
|
}
|
||||||
JobRequest::Watch(h) => h.0.cancel(),
|
JobRequest::Watch { handle, .. } => handle.0.cancel(),
|
||||||
JobRequest::SendMessage => {}
|
JobRequest::SendMessage => {}
|
||||||
JobRequest::SendMessageBackground(h, _) => {
|
JobRequest::SendMessageBackground(h, _) => {
|
||||||
h.0.cancel();
|
h.0.cancel();
|
||||||
|
@ -257,7 +260,7 @@ impl core::fmt::Debug for JobRequest {
|
||||||
JobRequest::SetMailboxSubscription(_, _, _) => {
|
JobRequest::SetMailboxSubscription(_, _, _) => {
|
||||||
write!(f, "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::SendMessage => write!(f, "JobRequest::SendMessage"),
|
||||||
JobRequest::SendMessageBackground(_, _) => {
|
JobRequest::SendMessageBackground(_, _) => {
|
||||||
write!(f, "JobRequest::SendMessageBackground")
|
write!(f, "JobRequest::SendMessageBackground")
|
||||||
|
@ -269,7 +272,7 @@ impl core::fmt::Debug for JobRequest {
|
||||||
impl JobRequest {
|
impl JobRequest {
|
||||||
fn is_watch(&self) -> bool {
|
fn is_watch(&self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
JobRequest::Watch(_) => true,
|
JobRequest::Watch { .. } => true,
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -843,12 +846,13 @@ impl Account {
|
||||||
if !self.active_jobs.values().any(|j| j.is_watch()) {
|
if !self.active_jobs.values().any(|j| j.is_watch()) {
|
||||||
match self.backend.read().unwrap().watch() {
|
match self.backend.read().unwrap().watch() {
|
||||||
Ok(fut) => {
|
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)
|
self.job_executor.spawn_specialized(fut)
|
||||||
} else {
|
} else {
|
||||||
self.job_executor.spawn_blocking(fut)
|
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) => {
|
Err(e) => {
|
||||||
self.sender
|
self.sender
|
||||||
|
@ -1769,8 +1773,23 @@ impl Account {
|
||||||
None => {}
|
None => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
JobRequest::Watch(_) => {
|
JobRequest::Watch {
|
||||||
|
ref mut channel,
|
||||||
|
handle: _,
|
||||||
|
} => {
|
||||||
debug!("JobRequest::Watch finished??? ");
|
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 {
|
JobRequest::Generic {
|
||||||
ref name,
|
ref name,
|
||||||
|
|
Loading…
Reference in New Issue