From 827101712e15193a4ba86fee85a06e6ab5da8f3a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Fri, 24 Jul 2020 18:58:50 +0200 Subject: Cleanup MailListingData construction Signed-off-by: Matthias Beyer --- src/maillist_view.rs | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/maillist_view.rs b/src/maillist_view.rs index 97afff7..7f9fee5 100644 --- a/src/maillist_view.rs +++ b/src/maillist_view.rs @@ -13,6 +13,7 @@ use cursive::event::EventResult; use cursive::views::ResizedView; use cursive_table_view::TableView; use cursive_table_view::TableViewItem; +use chrono::naive::NaiveDateTime; pub struct MaillistView(TableView); @@ -24,16 +25,42 @@ impl MaillistView { .create_query(query)? .search_messages()? .map(|msg| { + let mail_id = msg.id().to_string(); + let tags = msg.tags().collect(); + let date = NaiveDateTime::from_timestamp_opt(msg.date(), 0) + .map(|ndt| ndt.to_string()) + .ok_or_else(|| { + error!("Failed to parse timestamp: {}", msg.date()); + anyhow!("Failed to parse timestamp: {}", msg.date()) + })?; + + let from = msg.header("From")? + .map(|f| f.to_string()) + .ok_or_else(|| { + error!("Failed to get From for {}", msg.id()); + anyhow!("Failed to get From for {}", msg.id()) + })?; + + let to = msg.header("To")? + .map(|c| c.to_string()) + .unwrap_or_else(|| { + error!("Failed to get 'To:' field for {}, using default ''", msg.id()); + String::from("") + }); + let subject = msg.header("Subject")? + .map(|s| s.to_string()) + .ok_or_else(|| { + error!("Failed to get Subject for {}", msg.id()); + anyhow!("Failed to get Subject for {}", msg.id()) + })?; + Ok(MailListingData { - mail_id: msg.id().to_string(), - tags: msg.tags().collect(), - date: chrono::naive::NaiveDateTime::from_timestamp_opt(msg.date(), 0) - .ok_or_else(|| anyhow!("Failed to parse timestamp: {}", msg.date()))? - .to_string(), - - from: msg.header("From")?.ok_or_else(|| anyhow!("Failed to get From for {}", msg.id()))?.to_string(), - to: msg.header("To")?.map(|c| c.to_string()).unwrap_or_else(|| String::from("")), - subject: msg.header("Subject")?.ok_or_else(|| anyhow!("Failed to get Subject for {}", msg.id()))?.to_string(), + mail_id, + tags, + date, + from, + to, + subject, }) }) .collect::>>()?; -- cgit v1.2.3