✨ feat(cli): implement batch actions for trashing and deleting
- refactor `execute_action` to use `batch_trash` and `batch_delete` - remove individual message trashing/deletion in favor of batch processing - streamline action execution based on `self.execute` flag
This commit is contained in:
committed by
Jeremiah Russell
parent
011da42664
commit
ec5b7493c5
@@ -27,46 +27,34 @@ impl RunCli {
|
|||||||
log::info!("Executing rule `#{}` for label `{label}`", rule.describe());
|
log::info!("Executing rule `#{}` for label `{label}`", rule.describe());
|
||||||
client.set_rule(rule.clone());
|
client.set_rule(rule.clone());
|
||||||
client.set_execute(self.execute);
|
client.set_execute(self.execute);
|
||||||
|
client.find_rule_and_messages_for_label(&label).await?;
|
||||||
let Some(action) = client.action() else {
|
let Some(action) = client.action() else {
|
||||||
log::warn!("no valid action specified for rule #{}", rule.id());
|
log::warn!("no valid action specified for rule #{}", rule.id());
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
self.execute_action(client, action, &label).await;
|
if self.execute {
|
||||||
|
match action {
|
||||||
|
EolAction::Trash => {
|
||||||
|
log::info!("***executing trash messages***");
|
||||||
|
if client.batch_trash().await.is_err() {
|
||||||
|
log::warn!("Move to trash failed for label `{label}`");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EolAction::Delete => {
|
||||||
|
log::info!("***executing final delete messages***");
|
||||||
|
if client.batch_delete().await.is_err() {
|
||||||
|
log::warn!("Delete failed for label `{label}`");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log::warn!("Execution stopped for dry run");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn execute_action(&self, client: &mut GmailClient, action: EolAction, label: &str) {
|
|
||||||
match action {
|
|
||||||
EolAction::Trash => {
|
|
||||||
if !self.skip_trash {
|
|
||||||
log::info!("trashing older messages");
|
|
||||||
match client.trash_messages(label).await {
|
|
||||||
Ok(_) => {}
|
|
||||||
Err(e) => {
|
|
||||||
log::warn!("action failed for label {label} with error {e}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log::warn!("Rule with `trash` action for label `{label}` skipped.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EolAction::Delete => {
|
|
||||||
if !self.skip_delete {
|
|
||||||
log::info!("deleting older messages");
|
|
||||||
match client.delete_messages(label).await {
|
|
||||||
Ok(_) => {}
|
|
||||||
Err(e) => {
|
|
||||||
log::warn!("action failed for label {label} with error {e}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log::warn!("Rule with `delete` action for label `{label}` skipped.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user