✨ feat(cli): add delete subcommand
- introduce `delete` subcommand for deleting messages in Gmail - implement command-line arguments for filtering and executing deletion - add options for max results, pages, labels, and query
This commit is contained in:
committed by
Jeremiah Russell
parent
13a0b1496f
commit
7c5b3c807f
56
src/cli/delete_cli.rs
Normal file
56
src/cli/delete_cli.rs
Normal file
@@ -0,0 +1,56 @@
|
||||
use clap::Parser;
|
||||
use cull_gmail::{Delete, Result};
|
||||
|
||||
/// Command line options for the list subcommand
|
||||
#[derive(Debug, Parser)]
|
||||
pub struct DeleteCli {
|
||||
/// Maximum results per page
|
||||
#[arg(short, long, default_value = cull_gmail::DEFAULT_MAX_RESULTS)]
|
||||
max_results: u32,
|
||||
/// Maximum number of pages (0=all)
|
||||
#[arg(short, long, default_value = "1")]
|
||||
pages: u32,
|
||||
/// Labels to filter the message list
|
||||
#[arg(short, long)]
|
||||
labels: Vec<String>,
|
||||
/// Query string to select messages to list
|
||||
#[arg(short = 'Q', long)]
|
||||
query: Option<String>,
|
||||
/// Execute the delete command
|
||||
#[arg(short, long)]
|
||||
execute: bool,
|
||||
}
|
||||
|
||||
impl DeleteCli {
|
||||
pub(crate) async fn run(&self, credential_file: &str) -> Result<()> {
|
||||
let mut messages_to_delete = Delete::new(credential_file).await?;
|
||||
|
||||
if !self.labels.is_empty() {
|
||||
// add labels if any specified
|
||||
messages_to_delete
|
||||
.add_labels(credential_file, &self.labels)
|
||||
.await?;
|
||||
}
|
||||
|
||||
if let Some(query) = self.query.as_ref() {
|
||||
messages_to_delete.set_query(query)
|
||||
}
|
||||
|
||||
log::trace!("Max results: `{}`", self.max_results);
|
||||
messages_to_delete.set_max_results(self.max_results);
|
||||
log::debug!(
|
||||
"List max results set to {}",
|
||||
messages_to_delete.max_results()
|
||||
);
|
||||
|
||||
messages_to_delete.prepare(self.pages).await?;
|
||||
|
||||
if self.execute {
|
||||
messages_to_delete.batch_delete().await?;
|
||||
log::info!("Messages deleted.");
|
||||
} else {
|
||||
log::info!("Messages not deleted.");
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user