diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2020-07-24 18:58:50 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2020-07-24 18:58:50 +0200 |
commit | 827101712e15193a4ba86fee85a06e6ab5da8f3a (patch) | |
tree | 0455c4da50dfd2f171937348c47fb45ca4b9e219 | |
parent | 0a536702c830ba78dd3098c677db8da0ed93fd9f (diff) |
Cleanup MailListingData construction
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | src/maillist_view.rs | 45 |
1 files changed, 36 insertions, 9 deletions
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<MailListingData, MailListingColumn>); @@ -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::<Result<Vec<_>>>()?; |