refactor: use imap and smtp streams from toolbox

This commit is contained in:
Clément DOUIN
2026-03-14 14:05:11 +01:00
parent aa23a7a2c8
commit b77a54e5dc
49 changed files with 449 additions and 792 deletions
+7 -9
View File
@@ -10,7 +10,6 @@ use pimalaya_toolbox::terminal::printer::{Message, Printer};
use crate::imap::{
account::ImapAccount,
mailbox::arg::{MailboxNameOptionalFlag, MailboxSelectFlag, TargetMailboxNameArg},
stream,
};
/// Move message(s) to the given mailbox.
@@ -37,18 +36,17 @@ pub struct MoveMessageCommand {
}
impl MoveMessageCommand {
pub fn exec(self, printer: &mut impl Printer, account: ImapAccount) -> Result<()> {
let (mut context, mut stream) = stream::connect(account.backend)?;
pub fn execute(self, printer: &mut impl Printer, account: ImapAccount) -> Result<()> {
let mut imap = account.new_imap_session()?;
let mailbox = self.mailbox.name.try_into()?;
if self.select.r#true {
let mut arg = None;
let mut coroutine = ImapSelect::new(context, mailbox);
let mut coroutine = ImapSelect::new(imap.context, mailbox);
context = loop {
imap.context = loop {
match coroutine.resume(arg.take()) {
ImapSelectResult::Io { io } => arg = Some(handle(&mut stream, io)?),
ImapSelectResult::Io { io } => arg = Some(handle(&mut imap.stream, io)?),
ImapSelectResult::Ok { context, .. } => break context,
ImapSelectResult::Err { err, .. } => bail!(err),
}
@@ -59,11 +57,11 @@ impl MoveMessageCommand {
let destination: Mailbox<'static> = self.destination.name.try_into()?;
let mut arg = None;
let mut coroutine = ImapMove::new(context, sequence_set, destination, !self.seq);
let mut coroutine = ImapMove::new(imap.context, sequence_set, destination, !self.seq);
loop {
match coroutine.resume(arg.take()) {
ImapMoveResult::Io { io } => arg = Some(handle(&mut stream, io)?),
ImapMoveResult::Io { io } => arg = Some(handle(&mut imap.stream, io)?),
ImapMoveResult::Ok { .. } => break,
ImapMoveResult::Err { err, .. } => bail!(err),
}