use crate::contracts::{QueueFile, TaskStatus};
use crate::queue;
use crate::queue::TaskEditKey;
use anyhow::Result;
use super::{
BatchOperationResult, BatchResultCollector, preprocess_batch_ids, validate_task_ids_exist,
};
pub fn batch_set_status(
queue: &mut QueueFile,
task_ids: &[String],
status: TaskStatus,
now_rfc3339: &str,
note: Option<&str>,
continue_on_error: bool,
) -> Result<BatchOperationResult> {
let unique_ids = preprocess_batch_ids(task_ids, "status update")?;
if !continue_on_error {
validate_task_ids_exist(queue, &unique_ids)?;
}
let mut collector =
BatchResultCollector::new(unique_ids.len(), continue_on_error, "status update");
for task_id in &unique_ids {
match queue::set_status(queue, task_id, status, now_rfc3339, note) {
Ok(()) => {
collector.record_success(task_id.clone(), Vec::new());
}
Err(e) => {
let error_msg = e.to_string();
collector.record_failure(task_id.clone(), error_msg)?;
}
}
}
Ok(collector.finish())
}
pub fn batch_set_field(
queue: &mut QueueFile,
task_ids: &[String],
key: &str,
value: &str,
now_rfc3339: &str,
continue_on_error: bool,
) -> Result<BatchOperationResult> {
let unique_ids = preprocess_batch_ids(task_ids, "field update")?;
if !continue_on_error {
validate_task_ids_exist(queue, &unique_ids)?;
}
let mut collector =
BatchResultCollector::new(unique_ids.len(), continue_on_error, "field update");
for task_id in &unique_ids {
match queue::set_field(queue, task_id, key, value, now_rfc3339) {
Ok(()) => {
collector.record_success(task_id.clone(), Vec::new());
}
Err(e) => {
let error_msg = e.to_string();
collector.record_failure(task_id.clone(), error_msg)?;
}
}
}
Ok(collector.finish())
}
#[allow(clippy::too_many_arguments)]
pub fn batch_apply_edit(
queue: &mut QueueFile,
done: Option<&QueueFile>,
task_ids: &[String],
key: TaskEditKey,
value: &str,
now_rfc3339: &str,
id_prefix: &str,
id_width: usize,
max_dependency_depth: u8,
continue_on_error: bool,
) -> Result<BatchOperationResult> {
let unique_ids = preprocess_batch_ids(task_ids, "edit")?;
if !continue_on_error {
validate_task_ids_exist(queue, &unique_ids)?;
}
let mut collector = BatchResultCollector::new(unique_ids.len(), continue_on_error, "edit");
for task_id in &unique_ids {
match queue::apply_task_edit(
queue,
done,
task_id,
key,
value,
now_rfc3339,
id_prefix,
id_width,
max_dependency_depth,
) {
Ok(()) => {
collector.record_success(task_id.clone(), Vec::new());
}
Err(e) => {
let error_msg = e.to_string();
collector.record_failure(task_id.clone(), error_msg)?;
}
}
}
Ok(collector.finish())
}