pub mod dedup;
mod manifest;
pub mod wizard;
mod worker;
use std::path::PathBuf;
use crate::commands::keyring::bucket::store::BucketConfig;
use crate::core::job::Job;
pub(crate) use manifest::{DeduplicatePlan, gather_pending};
pub(crate) use worker::DeduplicateSummary;
pub(crate) struct DeduplicateJob {
pub source_bucket: BucketConfig,
pub source_secret: String,
pub local_output: PathBuf,
pub remote: Option<(BucketConfig, String)>,
}
impl Job for DeduplicateJob {
type Plan = DeduplicatePlan;
type Summary = DeduplicateSummary;
async fn gather(&self) -> Result<DeduplicatePlan, String> {
gather_pending(
&self.source_bucket,
&self.source_secret,
&self.local_output.join(".staging"),
)
.await
}
async fn run(
self,
plan: DeduplicatePlan,
concurrency: usize,
upload_concurrency: usize,
) -> Result<DeduplicateSummary, String> {
let remote_ref = self
.remote
.as_ref()
.map(|(bucket_config, secret)| (bucket_config, secret.as_str()));
worker::run_deduplicate_job(
&self.source_bucket,
&self.source_secret,
&self.local_output,
plan.tasks,
concurrency,
upload_concurrency,
remote_ref,
)
.await
}
}