♻️ refactor(cli): consolidate message handling and remove delete command
- 【Refactor】: Move `set_parameters` function from `Message` trait implementation for `DeleteCli` to `MessageCli` to avoid duplication. - 【Feature】: Add `Delete` action to `MessageAction` enum to allow direct deletion of messages. - 【Cleanup】: Remove `delete_cli.rs` and `message_trait.rs` as their functionalities are now integrated into `message_cli.rs`.
This commit is contained in:
committed by
Jeremiah Russell
parent
1feeccdebe
commit
f7db97dd07
@@ -1,52 +0,0 @@
|
|||||||
use clap::Parser;
|
|
||||||
use cull_gmail::{GmailClient, Result, RuleProcessor};
|
|
||||||
|
|
||||||
use crate::message_trait::Message;
|
|
||||||
|
|
||||||
/// 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, client: &mut GmailClient) -> Result<()> {
|
|
||||||
self.set_parameters(client)?;
|
|
||||||
|
|
||||||
client.prepare(self.pages).await?;
|
|
||||||
|
|
||||||
if self.execute {
|
|
||||||
client.batch_delete().await?;
|
|
||||||
log::info!("Messages deleted.");
|
|
||||||
} else {
|
|
||||||
log::info!("Messages not deleted.");
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn labels(&self) -> &Vec<String> {
|
|
||||||
&self.labels
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn query(&self) -> &Option<String> {
|
|
||||||
&self.query
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) fn max_results(&self) -> u32 {
|
|
||||||
self.max_results
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,17 +1,14 @@
|
|||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
|
|
||||||
mod config_cli;
|
mod config_cli;
|
||||||
mod delete_cli;
|
|
||||||
mod label_cli;
|
mod label_cli;
|
||||||
mod message_cli;
|
mod message_cli;
|
||||||
mod message_trait;
|
|
||||||
mod run_cli;
|
mod run_cli;
|
||||||
|
|
||||||
use cull_gmail::{Config, GmailClient, Result};
|
use cull_gmail::{Config, GmailClient, Result};
|
||||||
use std::error::Error as stdError;
|
use std::error::Error as stdError;
|
||||||
|
|
||||||
use config_cli::ConfigCli;
|
use config_cli::ConfigCli;
|
||||||
use delete_cli::DeleteCli;
|
|
||||||
use label_cli::LabelCli;
|
use label_cli::LabelCli;
|
||||||
use message_cli::MessageCli;
|
use message_cli::MessageCli;
|
||||||
use run_cli::RunCli;
|
use run_cli::RunCli;
|
||||||
@@ -40,8 +37,6 @@ enum SubCmds {
|
|||||||
/// List labels
|
/// List labels
|
||||||
#[clap(name = "label", display_order = 2, next_help_heading = "Labels")]
|
#[clap(name = "label", display_order = 2, next_help_heading = "Labels")]
|
||||||
Labels(LabelCli),
|
Labels(LabelCli),
|
||||||
#[clap(name = "delete", display_order = 5, next_help_heading = "Messages")]
|
|
||||||
Delete(DeleteCli),
|
|
||||||
/// Run the rules from the rules configuration
|
/// Run the rules from the rules configuration
|
||||||
#[clap(name = "run", display_order = 6, next_help_heading = "Rule Processing")]
|
#[clap(name = "run", display_order = 6, next_help_heading = "Rule Processing")]
|
||||||
Run(RunCli),
|
Run(RunCli),
|
||||||
@@ -80,7 +75,6 @@ async fn run(args: Cli) -> Result<()> {
|
|||||||
SubCmds::Config(config_cli) => config_cli.run(config),
|
SubCmds::Config(config_cli) => config_cli.run(config),
|
||||||
SubCmds::Message(list_cli) => list_cli.run(&mut client).await,
|
SubCmds::Message(list_cli) => list_cli.run(&mut client).await,
|
||||||
SubCmds::Labels(label_cli) => label_cli.run(client).await,
|
SubCmds::Labels(label_cli) => label_cli.run(client).await,
|
||||||
SubCmds::Delete(delete_cli) => delete_cli.run(&mut client).await,
|
|
||||||
SubCmds::Run(run_cli) => run_cli.run(&mut client, config).await,
|
SubCmds::Run(run_cli) => run_cli.run(&mut client, config).await,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
use cull_gmail::{GmailClient, MessageList, Result, RuleProcessor};
|
use cull_gmail::{GmailClient, MessageList, Result, RuleProcessor};
|
||||||
|
|
||||||
use crate::message_trait::Message;
|
|
||||||
|
|
||||||
#[derive(Debug, Subcommand)]
|
#[derive(Debug, Subcommand)]
|
||||||
enum MessageAction {
|
enum MessageAction {
|
||||||
List,
|
List,
|
||||||
Trash,
|
Trash,
|
||||||
|
Delete,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Command line options for the list subcommand
|
/// Command line options for the list subcommand
|
||||||
@@ -50,11 +49,28 @@ impl MessageCli {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
MessageAction::Trash => client.batch_trash().await,
|
MessageAction::Trash => client.batch_trash().await,
|
||||||
|
MessageAction::Delete => client.batch_delete().await,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ok(())
|
// Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_parameters(&self, client: &mut GmailClient) -> Result<()> {
|
||||||
|
if !self.labels().is_empty() {
|
||||||
|
client.add_labels(self.labels())?;
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(query) = self.query().as_ref() {
|
||||||
|
client.set_query(query)
|
||||||
|
}
|
||||||
|
|
||||||
|
log::trace!("Max results: `{}`", self.max_results());
|
||||||
|
client.set_max_results(self.max_results());
|
||||||
|
log::debug!("List max results set to {}", client.max_results());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn labels(&self) -> &Vec<String> {
|
pub(crate) fn labels(&self) -> &Vec<String> {
|
||||||
&self.labels
|
&self.labels
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
use cull_gmail::{GmailClient, MessageList, Result};
|
|
||||||
|
|
||||||
use crate::{delete_cli::DeleteCli, message_cli::MessageCli};
|
|
||||||
|
|
||||||
pub trait Message {
|
|
||||||
fn set_parameters(&self, client: &mut GmailClient) -> Result<()>;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Message for MessageCli {
|
|
||||||
fn set_parameters(&self, client: &mut GmailClient) -> Result<()> {
|
|
||||||
if !self.labels().is_empty() {
|
|
||||||
client.add_labels(self.labels())?;
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(query) = self.query().as_ref() {
|
|
||||||
client.set_query(query)
|
|
||||||
}
|
|
||||||
|
|
||||||
log::trace!("Max results: `{}`", self.max_results());
|
|
||||||
client.set_max_results(self.max_results());
|
|
||||||
log::debug!("List max results set to {}", client.max_results());
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Message for DeleteCli {
|
|
||||||
fn set_parameters(&self, client: &mut GmailClient) -> Result<()> {
|
|
||||||
if !self.labels().is_empty() {
|
|
||||||
client.add_labels(self.labels())?;
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(query) = self.query().as_ref() {
|
|
||||||
client.set_query(query)
|
|
||||||
}
|
|
||||||
|
|
||||||
log::trace!("Max results: `{}`", self.max_results());
|
|
||||||
client.set_max_results(self.max_results());
|
|
||||||
log::debug!("List max results set to {}", client.max_results());
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user