X-Git-Url: https://git.r.bdr.sh/rbdr/olden-mail/blobdiff_plain/8ab8739c55711caa07b8d7540309cb48cc892369..661adbfbd282568dca144bf7ec39c3fbbda80d90:/src/middleware/find_mailboxes_compatibility.rs diff --git a/src/middleware/find_mailboxes_compatibility.rs b/src/middleware/find_mailboxes_compatibility.rs index a1ddda2..ddc12f1 100644 --- a/src/middleware/find_mailboxes_compatibility.rs +++ b/src/middleware/find_mailboxes_compatibility.rs @@ -2,8 +2,8 @@ use log::debug; use super::Middleware; -/// `MailDrop` can't find folders to sync because it implements IMAPv3 and -/// sends FIND MAILBOXES /*, which does not exist in IMAPv4. +/// `MailDrop` can't find folders to sync because it implements `IMAPv3` and +/// sends FIND MAILBOXES /*, which does not exist in `IMAPv4`. /// which is not understood by modern servers. It instead replaces it with /// a LIST command. pub struct FindMailboxesCompatibility { @@ -22,9 +22,13 @@ impl Middleware for FindMailboxesCompatibility { if command.contains("FIND MAILBOXES /*") { if let Some(tag) = command.split("FIND MAILBOXES /*").next() { // We'll need to convert the LIST to a FIND - self.tags.push(tag.to_string()); + self.tags.push(tag.trim().to_string()); let replacement = format!("{} LIST \"\" \"*\"\r\n", tag.trim()); - debug!("### {replacement}"); + let debug_str = replacement + .replace('\n', "\\n") + .replace('\r', "\\r") + .replace('\t', "\\t"); + debug!("### {debug_str}"); return replacement.into_bytes(); } } @@ -36,7 +40,7 @@ impl Middleware for FindMailboxesCompatibility { let contains_ok_completed = self .tags .iter() - .any(|tag| command.contains(&format!("{} OK Completed", tag))); + .any(|tag| command.contains(&format!("{tag} OK Completed"))); // We want to only modify responses that were a result of a MAILBOX call. if !contains_ok_completed { @@ -55,14 +59,21 @@ impl Middleware for FindMailboxesCompatibility { if line.starts_with("* LIST") { if let Some(last_slash_pos) = line.rfind('/') { let mailbox_name = line[(last_slash_pos + 1)..].trim(); - return Some(format!("* MAILBOX {}\r", mailbox_name)); + return Some(format!("* MAILBOX {mailbox_name}\r")); } } - return Some(line.to_string()); + Some(line.to_string()) }) .collect(); - return lines.join("\n").into_bytes(); + let replacement = lines.join("\n"); + let debug_str = replacement + .replace('\n', "\\n") + .replace('\r', "\\r") + .replace('\t', "\\t"); + debug!("### {debug_str}"); + + replacement.into_bytes() } }