From e60eb23f4d3a688fa711c80317871029cf522d84 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Wed, 16 Sep 2020 13:17:03 +0300 Subject: [PATCH] statustab: show active jobs --- src/components/mail/status.rs | 64 +++++++++++++++++++++++++++++------ src/conf/accounts.rs | 43 +++++++++++++++++++++-- 2 files changed, 94 insertions(+), 13 deletions(-) diff --git a/src/components/mail/status.rs b/src/components/mail/status.rs index eb047eb01..3d22d329a 100644 --- a/src/components/mail/status.rs +++ b/src/components/mail/status.rs @@ -174,20 +174,20 @@ impl StatusPanel { ret }; self.content - .resize(120, 40 + context.accounts.len() * 20, default_cell); + .resize(120, 40 + context.accounts.len() * 45, default_cell); write_string_to_grid( "Accounts", &mut self.content, self.theme_default.fg, self.theme_default.bg, self.theme_default.attrs, - ((2, 10), (120 - 1, 10)), + ((2, 2), (120 - 1, 2)), Some(2), ); for (i, (_h, a)) in context.accounts.iter().enumerate() { for x in 2..(120 - 1) { - set_and_join_box(&mut self.content, (x, 12 + i * 10), BoxBoundary::Horizontal); + set_and_join_box(&mut self.content, (x, 4 + i * 10), BoxBoundary::Horizontal); } //create_box(&mut self.content, ((2, 5 + i * 10), (120 - 1, 15 + i * 10))); let (x, y) = write_string_to_grid( @@ -196,7 +196,7 @@ impl StatusPanel { self.theme_default.fg, self.theme_default.bg, Attr::BOLD, - ((3, 12 + i * 10), (120 - 2, 12 + i * 10)), + ((3, 4 + i * 10), (120 - 2, 4 + i * 10)), Some(3), ); write_string_to_grid( @@ -205,7 +205,7 @@ impl StatusPanel { Color::Byte(32), self.theme_default.bg, self.theme_default.attrs, - ((x, y), (120 - 2, 12 + i * 10)), + ((x, y), (120 - 2, y)), None, ); write_string_to_grid( @@ -469,7 +469,7 @@ impl Component for AccountStatus { None, ); line += 1; - for (i, (name, status)) in extensions.into_iter().enumerate() { + for (name, status) in extensions.into_iter() { let (width, height) = self.content.size(); write_string_to_grid( name.trim_at_boundary(30), @@ -477,7 +477,7 @@ impl Component for AccountStatus { self.theme_default.fg, self.theme_default.bg, self.theme_default.attrs, - ((1, line + i), (width - 1, height - 1)), + ((1, line), (width - 1, height - 1)), None, ); @@ -489,7 +489,7 @@ impl Component for AccountStatus { Color::Red, self.theme_default.bg, self.theme_default.attrs, - ((max_name_width + 6, line + i), (width - 1, height - 1)), + ((max_name_width + 6, line), (width - 1, height - 1)), None, ), MailBackendExtensionStatus::Supported { comment: _ } => write_string_to_grid( @@ -498,7 +498,7 @@ impl Component for AccountStatus { Color::Green, self.theme_default.bg, self.theme_default.attrs, - ((max_name_width + 6, line + i), (width - 1, height - 1)), + ((max_name_width + 6, line), (width - 1, height - 1)), None, ), MailBackendExtensionStatus::Enabled { comment: _ } => write_string_to_grid( @@ -507,7 +507,7 @@ impl Component for AccountStatus { Color::Green, self.theme_default.bg, self.theme_default.attrs, - ((max_name_width + 6, line + i), (width - 1, height - 1)), + ((max_name_width + 6, line), (width - 1, height - 1)), None, ), }; @@ -546,8 +546,52 @@ impl Component for AccountStatus { } } }; + line += 1; } } + line += 2; + + write_string_to_grid( + "In-progress jobs:", + &mut self.content, + self.theme_default.fg, + self.theme_default.bg, + Attr::BOLD, + ((1, line), (width - 1, height - 1)), + None, + ); + + for (job_id, req) in a.active_jobs.iter() { + use crate::conf::accounts::JobRequest; + let (x, y) = write_string_to_grid( + &format!("{} {}", req, job_id), + &mut self.content, + self.theme_default.fg, + self.theme_default.bg, + self.theme_default.attrs, + ((1, line), (width - 1, height - 1)), + None, + ); + if let JobRequest::DeleteMailbox { mailbox_hash, .. } + | JobRequest::SetMailboxPermissions(mailbox_hash, _, _) + | JobRequest::SetMailboxSubscription(mailbox_hash, _, _) + | JobRequest::CopyTo(mailbox_hash, _, _) + | JobRequest::Refresh(mailbox_hash, _, _) + | JobRequest::Fetch(mailbox_hash, _, _) = req + { + write_string_to_grid( + a.mailbox_entries[mailbox_hash].name(), + &mut self.content, + self.theme_default.fg, + self.theme_default.bg, + self.theme_default.attrs, + ((x + 1, y), (width - 1, height - 1)), + None, + ); + } + + line += 1; + } /* self.content may have been resized with write_string_to_grid() calls above since it has * growable set */ diff --git a/src/conf/accounts.rs b/src/conf/accounts.rs index 040f53dca..ad2874473 100644 --- a/src/conf/accounts.rs +++ b/src/conf/accounts.rs @@ -278,22 +278,59 @@ impl core::fmt::Debug for JobRequest { } } +impl core::fmt::Display for JobRequest { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + match self { + JobRequest::Generic { name, .. } => write!(f, "{}", name), + JobRequest::Mailboxes(_, _) => write!(f, "Get mailbox list"), + JobRequest::Fetch(_, _, _) => write!(f, "Mailbox fetch"), + JobRequest::IsOnline(_, _) => write!(f, "Online status check"), + JobRequest::Refresh(_, _, _) => write!(f, "Refresh mailbox"), + JobRequest::SetFlags(batch, _, _) => write!( + f, + "Set flags for {} message{}", + batch.len(), + if batch.len() == 1 { "" } else { "s" } + ), + JobRequest::SaveMessage { .. } => write!(f, "Save message"), + JobRequest::CopyTo(_, _, _) => write!(f, "Copy message."), + JobRequest::DeleteMessages(batch, _, _) => write!( + f, + "Delete {} message{}", + batch.len(), + if batch.len() == 1 { "" } else { "s" } + ), + JobRequest::CreateMailbox { path, .. } => write!(f, "Create mailbox {}", path), + JobRequest::DeleteMailbox { .. } => write!(f, "Delete mailbox"), + //JobRequest::RenameMailbox, + JobRequest::Search(_) => write!(f, "Search"), + JobRequest::AsBytes(_) => write!(f, "Message body fetch"), + JobRequest::SetMailboxPermissions(_, _, _) => write!(f, "Set mailbox permissions"), + JobRequest::SetMailboxSubscription(_, _, _) => write!(f, "Set mailbox subscription"), + JobRequest::Watch { .. } => write!(f, "Background watch"), + JobRequest::SendMessageBackground(_, _) | JobRequest::SendMessage => { + write!(f, "Sending message") + } + } + } +} + impl JobRequest { - fn is_watch(&self) -> bool { + pub fn is_watch(&self) -> bool { match self { JobRequest::Watch { .. } => true, _ => false, } } - fn is_fetch(&self, mailbox_hash: MailboxHash) -> bool { + pub fn is_fetch(&self, mailbox_hash: MailboxHash) -> bool { match self { JobRequest::Fetch(h, _, _) if *h == mailbox_hash => true, _ => false, } } - fn is_online(&self) -> bool { + pub fn is_online(&self) -> bool { match self { JobRequest::IsOnline(_, _) => true, _ => false,