feat(list): add label filtering to list command

- allow filtering messages by labels
- add labels argument to list subcommand
- update list command to use labels argument
This commit is contained in:
Jeremiah Russell
2025-10-03 14:34:29 +01:00
committed by Jeremiah Russell
parent f1ae06bf74
commit f425c16422

View File

@@ -1,5 +1,5 @@
use clap::Parser; use clap::Parser;
use cull_gmail::{Error, List}; use cull_gmail::{Error, Labels, List};
/// Command line options for the list subcommand /// Command line options for the list subcommand
#[derive(Debug, Parser)] #[derive(Debug, Parser)]
@@ -10,13 +10,28 @@ pub struct ListCli {
/// Maximum number of pages (0=all) /// Maximum number of pages (0=all)
#[arg(short, long, default_value = "1")] #[arg(short, long, default_value = "1")]
pages: u32, pages: u32,
/// Labels to filter the message list
#[arg(short, long)]
labels: Vec<String>,
} }
impl ListCli { impl ListCli {
pub(crate) async fn run(&self, credential_file: &str) -> Result<(), Error> { pub(crate) async fn run(&self, credential_file: &str) -> Result<(), Error> {
log::debug!("Max results: `{}`", self.max_results); let mut labels = Labels::new(credential_file).await?;
labels.get_labels().await?;
log::trace!("labels found and setup {labels:#?}");
let mut list = List::new(credential_file).await?; let mut list = List::new(credential_file).await?;
log::debug!("labels from command line: {:?}", self.labels);
for label in &self.labels {
if let Some(l) = labels.get_label_id(label) {
log::trace!("adding `{l}` id to labels");
list.add_label(&l);
}
}
log::trace!("Max results: `{}`", self.max_results);
list.set_max_results(self.max_results); list.set_max_results(self.max_results);
log::debug!("List max results set to {}", list.max_results()); log::debug!("List max results set to {}", list.max_results());