From f3a1edaf1f3a84b0cd4e5f422b102283efe7135e Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 14 Oct 2025 14:04:07 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(cli):=20refactor?= =?UTF-8?q?=20message=20handling=20and=20remove=20trash=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 【Refactor】: Moved trash functionality into the message subcommand for better organization. - 【Refactor】: Removed the separate `trash_cli` module. - 【Feature】: Added a `Trash` action to the `MessageAction` enum. - 【Refactor】: Modified `MessageCli::run` to handle the new `Trash` action. --- src/cli/main.rs | 7 ------- src/cli/message_cli.rs | 10 +++++++--- src/cli/trash_cli.rs | 39 --------------------------------------- 3 files changed, 7 insertions(+), 49 deletions(-) delete mode 100644 src/cli/trash_cli.rs diff --git a/src/cli/main.rs b/src/cli/main.rs index 3b28aea..f07a9ca 100644 --- a/src/cli/main.rs +++ b/src/cli/main.rs @@ -6,7 +6,6 @@ mod label_cli; mod message_cli; mod message_trait; mod run_cli; -mod trash_cli; use cull_gmail::{Config, GmailClient, Result}; use std::error::Error as stdError; @@ -16,7 +15,6 @@ use delete_cli::DeleteCli; use label_cli::LabelCli; use message_cli::MessageCli; use run_cli::RunCli; -use trash_cli::TrashCli; #[derive(Parser, Debug)] #[clap(author, version, about, long_about = None)] @@ -42,10 +40,6 @@ enum SubCmds { /// List labels #[clap(name = "label", display_order = 2, next_help_heading = "Labels")] Labels(LabelCli), - /// Move messages to trash - #[clap(name = "trash", display_order = 4, next_help_heading = "Messages")] - Trash(TrashCli), - /// Delete messages #[clap(name = "delete", display_order = 5, next_help_heading = "Messages")] Delete(DeleteCli), /// Run the rules from the rules configuration @@ -86,7 +80,6 @@ async fn run(args: Cli) -> Result<()> { SubCmds::Config(config_cli) => config_cli.run(config), SubCmds::Message(list_cli) => list_cli.run(&mut client).await, SubCmds::Labels(label_cli) => label_cli.run(client).await, - SubCmds::Trash(trash_cli) => trash_cli.run(&mut client).await, SubCmds::Delete(delete_cli) => delete_cli.run(&mut client).await, SubCmds::Run(run_cli) => run_cli.run(&mut client, config).await, } diff --git a/src/cli/message_cli.rs b/src/cli/message_cli.rs index 23a2363..560fb47 100644 --- a/src/cli/message_cli.rs +++ b/src/cli/message_cli.rs @@ -1,11 +1,12 @@ use clap::{Parser, Subcommand}; -use cull_gmail::{GmailClient, MessageList, Result}; +use cull_gmail::{GmailClient, MessageList, Result, RuleProcessor}; use crate::message_trait::Message; #[derive(Debug, Subcommand)] enum MessageAction { List, + Trash, } /// Command line options for the list subcommand @@ -43,12 +44,15 @@ impl MessageCli { match self.action { MessageAction::List => { if log::max_level() >= log::Level::Info { - client.log_message_subjects().await?; + client.log_message_subjects().await + } else { + Ok(()) } } + MessageAction::Trash => client.batch_trash().await, } - Ok(()) + // Ok(()) } pub(crate) fn labels(&self) -> &Vec { diff --git a/src/cli/trash_cli.rs b/src/cli/trash_cli.rs deleted file mode 100644 index a90eff9..0000000 --- a/src/cli/trash_cli.rs +++ /dev/null @@ -1,39 +0,0 @@ -use clap::Parser; -use cull_gmail::{Error, GmailClient, MessageList, RuleProcessor}; - -/// Command line options for the list subcommand -#[derive(Debug, Parser)] -pub struct TrashCli { - /// 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, - /// Query string to select messages to list - #[arg(short = 'Q', long)] - query: Option, -} - -impl TrashCli { - pub(crate) async fn run(&self, client: &mut GmailClient) -> Result<(), Error> { - if !self.labels.is_empty() { - // add labels if any specified - 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()); - - client.prepare(self.pages).await?; - client.batch_trash().await - } -}