diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-12-17 14:12:41 +0200 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-12-18 08:58:49 +0200 |
commit | 2b6f6ab42c4278cc2ff5f8c1819979d37b22ec50 (patch) | |
tree | 1c6b10b363837441738b02da24b30814d94401b0 /ui/src/components | |
parent | 7bd2b6932deefe01986686cfb8dd4e080f39c429 (diff) |
melib: Add BackendFolder methods, move special usage logic to backend
- add count() method to return (unseen, total) counts
- add is_subscribed()
- add set_special_usage() and set_is_subscribed()
concerns #8
Diffstat (limited to 'ui/src/components')
-rw-r--r-- | ui/src/components/mail/listing.rs | 28 | ||||
-rw-r--r-- | ui/src/components/mail/status.rs | 44 |
2 files changed, 29 insertions, 43 deletions
diff --git a/ui/src/components/mail/listing.rs b/ui/src/components/mail/listing.rs index d2f7dd16..e792b84e 100644 --- a/ui/src/components/mail/listing.rs +++ b/ui/src/components/mail/listing.rs @@ -770,17 +770,11 @@ impl Component for Listing { } else { return Some(String::new()); }; - let envelopes = account.collection.envelopes.clone(); - let envelopes = envelopes.read().unwrap(); format!( "Mailbox: {}, Messages: {}, New: {}", m.folder.name(), m.envelopes.len(), - m.envelopes - .iter() - .map(|h| &envelopes[&h]) - .filter(|e| !e.is_seen()) - .count() + m.folder.count().ok().map(|(v, _)| v).unwrap_or(0), ) }) } @@ -903,20 +897,12 @@ impl Listing { ) { match context.accounts[index].status(entries[&folder_idx].hash()) { Ok(_) => { - let account = &context.accounts[index]; - let count = account[entries[&folder_idx].hash()] - .unwrap() - .envelopes - .iter() - .filter_map(|&h| { - if account.collection.get_env(h).is_seen() { - None - } else { - Some(()) - } - }) - .count(); - lines.push((*depth, *inc, folder_idx, Some(count))); + lines.push(( + *depth, + *inc, + folder_idx, + entries[&folder_idx].count().ok().map(|(v, _)| v), + )); } Err(_) => { lines.push((*depth, *inc, folder_idx, None)); diff --git a/ui/src/components/mail/status.rs b/ui/src/components/mail/status.rs index 653e5898..d0734614 100644 --- a/ui/src/components/mail/status.rs +++ b/ui/src/components/mail/status.rs @@ -291,18 +291,12 @@ impl StatusPanel { self.content[(2, h + y + 1)].set_ch(' '); } } + let count = a.ref_folders.values().fold((0, 0), |acc, f| { + let count = f.count().unwrap_or((0, 0)); + (acc.0 + count.0, acc.1 + count.1) + }); let (mut column_width, _) = write_string_to_grid( - &format!( - "Messages total {}, unseen {}", - a.collection.len(), - a.collection - .envelopes - .read() - .unwrap() - .values() - .filter(|e| !e.is_seen()) - .count() - ), + &format!("Messages total {}, unseen {}", count.1, count.0), &mut self.content, Color::Default, Color::Default, @@ -338,17 +332,7 @@ impl StatusPanel { ); /* next column */ write_string_to_grid( - &format!( - "Messages total {}, unseen {}", - a.collection.len(), - a.collection - .envelopes - .read() - .unwrap() - .values() - .filter(|e| !e.is_seen()) - .count() - ), + "Special Mailboxes:", &mut self.content, Color::Default, Color::Default, @@ -356,6 +340,22 @@ impl StatusPanel { ((5 + column_width, y + 2), (120 - 2, y + 2)), None, ); + for (i, f) in a + .ref_folders + .values() + .filter(|f| f.special_usage() != SpecialUsageMailbox::Normal) + .enumerate() + { + write_string_to_grid( + &format!("{}: {}", f.path(), f.special_usage()), + &mut self.content, + Color::Default, + Color::Default, + Attr::Default, + ((5 + column_width, y + 3 + i), (120 - 2, y + 2)), + None, + ); + } } } } |