statustab: show active jobs

Manos Pitsidianakis 2020-09-16 13:17:03 +03:00
parent 92b25de34e
commit e60eb23f4d
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
2 changed files with 94 additions and 13 deletions

View File

@ -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 */

View File

@ -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,