feat(gmail): enhance message metadata retrieval

- add date header to message metadata retrieval
- retrieve date and subject from email headers
- set date and subject for each message in the list
This commit is contained in:
Jeremiah Russell
2025-10-14 16:02:08 +01:00
committed by Jeremiah Russell
parent f3a1edaf1f
commit 9f4b2fa6ae

View File

@@ -202,38 +202,47 @@ impl MessageList for GmailClient {
let (_res, m) = hub let (_res, m) = hub
.users() .users()
.messages_get("me", message.id()) .messages_get("me", message.id())
.add_scope("https://www.googleapis.com/auth/gmail.metadata") .add_scope("https://mail.google.com/")
.format("metadata") .format("metadata")
.add_metadata_headers("subject") .add_metadata_headers("subject")
.add_metadata_headers("date")
.doit() .doit()
.await .await
.map_err(Box::new)?; .map_err(Box::new)?;
let mut subject = String::new(); let mut subject = String::new();
let mut date = String::new();
let Some(payload) = m.payload else { continue }; let Some(payload) = m.payload else { continue };
let Some(headers) = payload.headers else { let Some(headers) = payload.headers else {
continue; continue;
}; };
for header in headers { for header in headers {
if header.name.is_some() if let Some(name) = header.name {
&& header.name.unwrap() == "Subject" match name.to_lowercase().as_str() {
&& header.value.is_some() "subject" => subject = header.value.unwrap_or_default(),
{ "date" => date = header.value.unwrap_or_default(),
subject = header.value.unwrap(); _ => {}
break; }
} else { } else {
continue; continue;
} }
} }
if date.is_empty() {
log::info!("***No orig-date field***");
} else {
message.set_date(&date);
}
if subject.is_empty() { if subject.is_empty() {
log::info!("***Email with no subject***"); log::info!("***Email with no subject***");
} else { } else {
subject.elide(24); subject.elide(24);
message.set_subject(&subject); message.set_subject(&subject);
log::info!("{subject:?}");
} }
log::info!("{}", message.list_date_and_subject());
} }
Ok(()) Ok(())