From 350fafb51597e0e07fab731e111ae92b409b7834 Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Sat, 18 Jan 2020 03:00:02 +0200 Subject: [PATCH] melib/thread: add attachments field to Thread --- melib/src/thread.rs | 17 ++++++++++++++++- ui/src/components/mail/listing/compact.rs | 15 ++++----------- ui/src/components/mail/listing/conversations.rs | 4 ++-- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/melib/src/thread.rs b/melib/src/thread.rs index 102ef9144..405b68d0c 100644 --- a/melib/src/thread.rs +++ b/melib/src/thread.rs @@ -139,17 +139,20 @@ macro_rules! make { ref mut len, ref mut unseen, ref mut snoozed, + ref mut attachments, .. }, ThreadGroup::Root(Thread { date: old_date, len: old_len, unseen: old_unseen, snoozed: old_snoozed, + attachments: old_attachments, .. })) => { *date = std::cmp::max(old_date, *date); *len += old_len; - *unseen |= old_unseen; + *unseen += old_unseen; + *attachments += old_attachments; *snoozed |= old_snoozed; } _ => unreachable!(), @@ -273,6 +276,7 @@ pub struct Thread { date: UnixTimestamp, len: usize, unseen: usize, + attachments: usize, snoozed: bool, } @@ -321,6 +325,10 @@ impl Thread { property!(snoozed: bool); property!(date: UnixTimestamp); + pub fn has_attachments(&self) -> bool { + self.attachments > 0 + } + pub fn set_snoozed(&mut self, val: bool) { self.snoozed = val; } @@ -765,6 +773,11 @@ impl Threads { } else { 0 }, + attachments: if envelopes_lck[&env_hash].has_attachments() { + 1 + } else { + 0 + }, snoozed: false, }), ); @@ -803,6 +816,7 @@ impl Threads { date: envelopes_lck[&env_hash].date(), len: 0, unseen: 0, + attachments: 0, snoozed: false, }), ); @@ -846,6 +860,7 @@ impl Threads { date: envelopes_lck[&env_hash].date(), len: 0, unseen: 0, + attachments: 0, snoozed: false, }), ); diff --git a/ui/src/components/mail/listing/compact.rs b/ui/src/components/mail/listing/compact.rs index b153ac4c3..96a398274 100644 --- a/ui/src/components/mail/listing/compact.rs +++ b/ui/src/components/mail/listing/compact.rs @@ -598,7 +598,7 @@ impl CompactListing { subject: SubjectString(format!("{} ({})", subject, thread.len(),)), flag: FlagString(format!( "{}{}", - if e.has_attachments() { "📎" } else { "" }, + if thread.has_attachments() { "📎" } else { "" }, if thread.snoozed() { "💤" } else { "" } )), from: FromString(address_list!((e.from()) as comma_sep_list)), @@ -610,7 +610,7 @@ impl CompactListing { subject: SubjectString(subject), flag: FlagString(format!( "{}{}", - if e.has_attachments() { "📎" } else { "" }, + if thread.has_attachments() { "📎" } else { "" }, if thread.snoozed() { "💤" } else { "" } )), from: FromString(address_list!((e.from()) as comma_sep_list)), @@ -922,13 +922,7 @@ impl CompactListing { self.data_columns.columns[4][(x, idx)].set_ch(' '); self.data_columns.columns[4][(x, idx)].set_bg(bg_color); } - match ( - thread.snoozed(), - context.accounts[self.cursor_pos.0] - .collection - .get_env(root_env_hash) - .has_attachments(), - ) { + match (thread.snoozed(), thread.has_attachments()) { (true, true) => { self.data_columns.columns[3][(0, idx)].set_fg(Color::Byte(103)); self.data_columns.columns[3][(2, idx)].set_fg(Color::Red); @@ -994,7 +988,6 @@ impl CompactListing { return; } let envelope: EnvelopeRef = account.collection.get_env(env_hash); - let has_attachments = envelope.has_attachments(); let fg_color = if thread.unseen() > 0 { Color::Byte(0) } else { @@ -1119,7 +1112,7 @@ impl CompactListing { columns[4][c].set_ch(' '); columns[4][c].set_bg(bg_color); } - match (thread.snoozed(), has_attachments) { + match (thread.snoozed(), thread.has_attachments()) { (true, true) => { columns[3][(0, idx)].set_fg(Color::Byte(103)); columns[3][(2, idx)].set_fg(Color::Red); diff --git a/ui/src/components/mail/listing/conversations.rs b/ui/src/components/mail/listing/conversations.rs index 67fcf46d3..314856487 100644 --- a/ui/src/components/mail/listing/conversations.rs +++ b/ui/src/components/mail/listing/conversations.rs @@ -571,7 +571,7 @@ impl ConversationsListing { subject: SubjectString(format!("{} ({})", subject, thread.len(),)), flag: FlagString(format!( "{}{}", - if e.has_attachments() { "📎" } else { "" }, + if thread.has_attachments() { "📎" } else { "" }, if thread.snoozed() { "💤" } else { "" } )), from: FromString(address_list!((from) as comma_sep_list)), @@ -583,7 +583,7 @@ impl ConversationsListing { subject: SubjectString(subject), flag: FlagString(format!( "{}{}", - if e.has_attachments() { "📎" } else { "" }, + if thread.has_attachments() { "📎" } else { "" }, if thread.snoozed() { "💤" } else { "" } )), from: FromString(address_list!((from) as comma_sep_list)),