✨ feat(message_list): improve message handling and logging
- create MessageSummary struct to hold message id and subject - update MessageList to use MessageSummary instead of just message ids - implement log_message_subjects to fetch and log message subjects - add elide function to truncate long subjects for better logging
This commit is contained in:
committed by
Jeremiah Russell
parent
bfa719959c
commit
adaf2b1e30
@@ -11,7 +11,11 @@ use google_gmail1::{
|
|||||||
yup_oauth2::{ApplicationSecret, InstalledFlowAuthenticator, InstalledFlowReturnMethod},
|
yup_oauth2::{ApplicationSecret, InstalledFlowAuthenticator, InstalledFlowReturnMethod},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{Credential, Error};
|
mod message_summary;
|
||||||
|
|
||||||
|
use message_summary::MessageSummary;
|
||||||
|
|
||||||
|
use crate::{Credential, Error, utils::Elide};
|
||||||
|
|
||||||
/// Default for the maximum number of results to return on a page
|
/// Default for the maximum number of results to return on a page
|
||||||
pub const DEFAULT_MAX_RESULTS: &str = "10";
|
pub const DEFAULT_MAX_RESULTS: &str = "10";
|
||||||
@@ -21,7 +25,7 @@ pub struct MessageList {
|
|||||||
hub: Gmail<HttpsConnector<HttpConnector>>,
|
hub: Gmail<HttpsConnector<HttpConnector>>,
|
||||||
max_results: u32,
|
max_results: u32,
|
||||||
label_ids: Vec<String>,
|
label_ids: Vec<String>,
|
||||||
message_ids: Vec<String>,
|
messages: Vec<MessageSummary>,
|
||||||
query: String,
|
query: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +34,7 @@ impl Debug for MessageList {
|
|||||||
f.debug_struct("MessageList")
|
f.debug_struct("MessageList")
|
||||||
.field("max_results", &self.max_results)
|
.field("max_results", &self.max_results)
|
||||||
.field("label_ids", &self.label_ids)
|
.field("label_ids", &self.label_ids)
|
||||||
.field("message_ids", &self.message_ids)
|
.field("messages", &self.messages)
|
||||||
.field("query", &self.query)
|
.field("query", &self.query)
|
||||||
.finish()
|
.finish()
|
||||||
}
|
}
|
||||||
@@ -70,7 +74,7 @@ impl MessageList {
|
|||||||
hub: Gmail::new(client, auth),
|
hub: Gmail::new(client, auth),
|
||||||
max_results: DEFAULT_MAX_RESULTS.parse::<u32>().unwrap(),
|
max_results: DEFAULT_MAX_RESULTS.parse::<u32>().unwrap(),
|
||||||
label_ids: Vec::new(),
|
label_ids: Vec::new(),
|
||||||
message_ids: Vec::new(),
|
messages: Vec::new(),
|
||||||
query: String::new(),
|
query: String::new(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -99,9 +103,18 @@ impl MessageList {
|
|||||||
self.query = query.to_string()
|
self.query = query.to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get the summary of the messages
|
||||||
|
pub(crate) fn messages(&self) -> &Vec<MessageSummary> {
|
||||||
|
&self.messages
|
||||||
|
}
|
||||||
|
|
||||||
/// Get a reference to the message_ids
|
/// Get a reference to the message_ids
|
||||||
pub fn message_ids(&self) -> Vec<String> {
|
pub fn message_ids(&self) -> Vec<String> {
|
||||||
self.message_ids.clone()
|
self.messages
|
||||||
|
.iter()
|
||||||
|
.map(|m| m.id().to_string())
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get a reference to the message_ids
|
/// Get a reference to the message_ids
|
||||||
@@ -180,26 +193,35 @@ impl MessageList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let (_response, list) = call.doit().await.map_err(Box::new)?;
|
let (_response, list) = call.doit().await.map_err(Box::new)?;
|
||||||
|
log::trace!(
|
||||||
|
"Estimated {} messages.",
|
||||||
|
list.result_size_estimate.unwrap_or(0)
|
||||||
|
);
|
||||||
|
|
||||||
let mut list_ids: Vec<String> = list
|
if list.result_size_estimate.unwrap_or(0) == 0 {
|
||||||
|
log::warn!("Search returned no messages.");
|
||||||
|
return Ok(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut list_ids = list
|
||||||
.clone()
|
.clone()
|
||||||
.messages
|
.messages
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.iter()
|
.iter()
|
||||||
.map(|item| item.id.clone().unwrap())
|
.flat_map(|item| item.id.as_ref().map(|id| MessageSummary::new(id)))
|
||||||
.collect();
|
.collect();
|
||||||
self.message_ids.append(&mut list_ids);
|
self.messages.append(&mut list_ids);
|
||||||
|
|
||||||
Ok(list)
|
Ok(list)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn log_message_subjects(&self) -> Result<(), Error> {
|
async fn log_message_subjects(&mut self) -> Result<(), Error> {
|
||||||
for id in &self.message_ids {
|
for message in &mut self.messages {
|
||||||
log::trace!("{id}");
|
log::trace!("{}", message.id());
|
||||||
let (_res, m) = self
|
let (_res, m) = self
|
||||||
.hub
|
.hub
|
||||||
.users()
|
.users()
|
||||||
.messages_get("me", id)
|
.messages_get("me", message.id())
|
||||||
.add_scope("https://www.googleapis.com/auth/gmail.metadata")
|
.add_scope("https://www.googleapis.com/auth/gmail.metadata")
|
||||||
.format("metadata")
|
.format("metadata")
|
||||||
.add_metadata_headers("subject")
|
.add_metadata_headers("subject")
|
||||||
@@ -228,6 +250,8 @@ impl MessageList {
|
|||||||
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);
|
||||||
|
message.set_subject(&subject);
|
||||||
log::info!("{subject:?}");
|
log::info!("{subject:?}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user