conf/accounts: call is_online if Refresh job fails
parent
281a6ee6ae
commit
46e3bb8074
|
@ -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,23 +1594,39 @@ impl Account {
|
|||
{
|
||||
self.watch();
|
||||
}
|
||||
if !(self.is_online.is_err()
|
||||
&& self
|
||||
.is_online
|
||||
.as_ref()
|
||||
.unwrap_err()
|
||||
.kind
|
||||
.is_authentication())
|
||||
{
|
||||
self.is_online = Ok(());
|
||||
self.sender
|
||||
.send(ThreadEvent::UIEvent(UIEvent::AccountStatusChange(
|
||||
self.hash,
|
||||
)))
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
if !(self.is_online.is_err()
|
||||
&& self
|
||||
.is_online
|
||||
.as_ref()
|
||||
.unwrap_err()
|
||||
.kind
|
||||
.is_authentication())
|
||||
{
|
||||
self.last_online_request = std::time::Instant::now();
|
||||
self.is_online = Ok(());
|
||||
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) => {
|
||||
|
|
Loading…
Reference in New Issue