conf/accounts: call is_online if Refresh job fails

memfd
Manos Pitsidianakis 2020-09-13 00:03:12 +03:00
parent 281a6ee6ae
commit 46e3bb8074
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
1 changed files with 36 additions and 16 deletions

View File

@ -141,7 +141,6 @@ pub struct Account {
name: String,
hash: AccountHash,
pub is_online: Result<()>,
pub last_online_request: std::time::Instant,
pub(crate) mailbox_entries: IndexMap<MailboxHash, MailboxEntry>,
pub(crate) mailboxes_order: Vec<MailboxHash>,
tree: Vec<MailboxNode>,
@ -429,7 +428,6 @@ impl Account {
} else {
Err(MeliError::new("Attempting connection."))
},
last_online_request: std::time::Instant::now(),
mailbox_entries: Default::default(),
mailboxes_order: Default::default(),
tree: Default::default(),
@ -895,6 +893,13 @@ impl Account {
}
RefreshEventKind::Failure(err) => {
debug!("RefreshEvent Failure: {}", err.to_string());
while let Some((job_id, _)) =
self.active_jobs.iter().find(|(_, j)| j.is_watch())
{
let job_id = *job_id;
let j = self.active_jobs.remove(&job_id);
drop(j);
}
/*
context
.1
@ -907,7 +912,7 @@ impl Account {
*/
self.watch();
return Some(Notification(
None,
Some("Account watch failed".into()),
err.to_string(),
Some(crate::types::NotificationType::ERROR),
));
@ -1563,7 +1568,6 @@ impl Account {
{
self.watch();
}
self.last_online_request = std::time::Instant::now();
self.is_online = Ok(());
return true;
}
@ -1578,8 +1582,8 @@ impl Account {
}
JobRequest::Refresh(_mailbox_hash, _, ref mut chan) => {
let r = chan.try_recv().unwrap();
if let Some(r) = r {
if r.is_ok() {
match r {
Some(Ok(())) => {
if self.is_online.is_err()
&& !self
.is_online
@ -1590,7 +1594,6 @@ impl Account {
{
self.watch();
}
}
if !(self.is_online.is_err()
&& self
.is_online
@ -1599,7 +1602,6 @@ impl Account {
.kind
.is_authentication())
{
self.last_online_request = std::time::Instant::now();
self.is_online = Ok(());
self.sender
.send(ThreadEvent::UIEvent(UIEvent::AccountStatusChange(
@ -1608,6 +1610,24 @@ impl Account {
.unwrap();
}
}
Some(Err(err)) => {
if !err.kind.is_authentication() {
let online_job = self.backend.read().unwrap().is_online();
if let Ok(online_job) = online_job {
let (rcvr, handle, job_id) =
self.job_executor.spawn_specialized(online_job);
self.insert_job(job_id, JobRequest::IsOnline(handle, rcvr));
};
}
self.is_online = Err(err);
self.sender
.send(ThreadEvent::UIEvent(UIEvent::AccountStatusChange(
self.hash,
)))
.unwrap();
}
None => {}
}
}
JobRequest::SetFlags(_, _, ref mut chan) => {
let r = chan.try_recv().unwrap();