From 7d55e6bbd4c2cfb087540f107da2e6421548b4d3 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 9 Oct 2025 14:40:35 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(cli):=20add=20remove=20label?= =?UTF-8?q?=20subcommand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add `remove-label` subcommand to remove labels from rules --- src/cli/config_cli/label_cli/remove_cli.rs | 23 ++++++++++ src/config_cli/rules_cli/add_cli.rs | 50 ---------------------- 2 files changed, 23 insertions(+), 50 deletions(-) create mode 100644 src/cli/config_cli/label_cli/remove_cli.rs delete mode 100644 src/config_cli/rules_cli/add_cli.rs diff --git a/src/cli/config_cli/label_cli/remove_cli.rs b/src/cli/config_cli/label_cli/remove_cli.rs new file mode 100644 index 0000000..c80843e --- /dev/null +++ b/src/cli/config_cli/label_cli/remove_cli.rs @@ -0,0 +1,23 @@ +use clap::Parser; + +use cull_gmail::{Config, Error, Result}; + +#[derive(Debug, Parser)] +pub struct RemoveCli { + /// Id of the rule on which action applies + #[clap(short, long)] + id: usize, + /// Label to remove from the rule + #[clap(short, long)] + label: String, +} + +impl RemoveCli { + pub fn run(&self, mut config: Config) -> Result<()> { + if config.get_rule(self.id).is_none() { + return Err(Error::RuleNotFound(self.id)); + } + + config.remove_label_from_rule(self.id, &self.label) + } +} diff --git a/src/config_cli/rules_cli/add_cli.rs b/src/config_cli/rules_cli/add_cli.rs deleted file mode 100644 index 8f56969..0000000 --- a/src/config_cli/rules_cli/add_cli.rs +++ /dev/null @@ -1,50 +0,0 @@ -use std::fmt; - -use clap::{Parser, ValueEnum}; -use cull_gmail::{Config, Error, MessageAge, Retention}; - -#[derive(Debug, Clone, Parser, ValueEnum)] -pub enum Period { - Days, - Weeks, - Months, - Years, -} - -impl fmt::Display for Period { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Period::Days => write!(f, "days"), - Period::Weeks => write!(f, "weeks"), - Period::Months => write!(f, "months"), - Period::Years => write!(f, "years"), - } - } -} - -#[derive(Debug, Parser)] -pub struct AddCli { - /// Period for the rule - #[arg(short, long)] - period: Period, - /// Count of the period - #[arg(short, long, default_value = "1")] - count: usize, - /// Optional specific label; if not specified one will be generated - #[arg(short, long)] - label: Option, - /// Immediate delete instead of move to trash - #[arg(long)] - delete: bool, -} - -impl AddCli { - pub fn run(&self, mut config: Config) -> Result<(), Error> { - let generate = self.label.is_none(); - let message_age = MessageAge::new(self.period.to_string().as_str(), self.count); - let retention = Retention::new(message_age, generate); - - config.add_rule(retention, self.label.as_ref(), self.delete); - config.save() - } -}