mirror of
https://github.com/pimalaya/himalaya.git
synced 2026-06-17 13:17:55 +08:00
60 lines
1.7 KiB
Rust
60 lines
1.7 KiB
Rust
use clap::Parser;
|
|
use color_eyre::Result;
|
|
use email::backend::feature::BackendFeatureSource;
|
|
use tracing::info;
|
|
|
|
use crate::{
|
|
account::arg::name::AccountNameFlag,
|
|
backend::Backend,
|
|
config::Config,
|
|
envelope::arg::ids::EnvelopeIdsArgs,
|
|
folder::arg::name::{SourceFolderNameOptionalFlag, TargetFolderNameArg},
|
|
printer::Printer,
|
|
};
|
|
|
|
/// Copy a message from a source folder to a target folder.
|
|
#[derive(Debug, Parser)]
|
|
pub struct MessageCopyCommand {
|
|
#[command(flatten)]
|
|
pub source_folder: SourceFolderNameOptionalFlag,
|
|
|
|
#[command(flatten)]
|
|
pub target_folder: TargetFolderNameArg,
|
|
|
|
#[command(flatten)]
|
|
pub envelopes: EnvelopeIdsArgs,
|
|
|
|
#[command(flatten)]
|
|
pub account: AccountNameFlag,
|
|
}
|
|
|
|
impl MessageCopyCommand {
|
|
pub async fn execute(self, printer: &mut impl Printer, config: &Config) -> Result<()> {
|
|
info!("executing copy message(s) command");
|
|
|
|
let source = &self.source_folder.name;
|
|
let target = &self.target_folder.name;
|
|
let ids = &self.envelopes.ids;
|
|
|
|
let (toml_account_config, account_config) = config
|
|
.clone()
|
|
.into_account_configs(self.account.name.as_deref())?;
|
|
|
|
let copy_messages_kind = toml_account_config.copy_messages_kind();
|
|
|
|
let backend = Backend::new(
|
|
toml_account_config.clone(),
|
|
account_config,
|
|
copy_messages_kind,
|
|
|builder| builder.set_copy_messages(BackendFeatureSource::Context),
|
|
)
|
|
.await?;
|
|
|
|
backend.copy_messages(source, target, ids).await?;
|
|
|
|
printer.out(format!(
|
|
"Message(s) successfully copied from {source} to {target}!"
|
|
))
|
|
}
|
|
}
|