summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-07-24 18:58:50 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-07-24 18:58:50 +0200
commit827101712e15193a4ba86fee85a06e6ab5da8f3a (patch)
tree0455c4da50dfd2f171937348c47fb45ca4b9e219
parent0a536702c830ba78dd3098c677db8da0ed93fd9f (diff)
Cleanup MailListingData construction
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--src/maillist_view.rs45
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<_>>>()?;