bump melib dependency to a modern version

This updates the melib dependency from an old version it was pinned to and
updates the associated code and tests.
pull/11/head
Kevin Schoon 2024-01-09 10:58:03 +00:00 committed by Manos Pitsidianakis
parent a9a50f4659
commit 0216cc1276
Signed by: Manos Pitsidianakis
GPG Key ID: 7729C7707F7E09D0
10 changed files with 113 additions and 54 deletions

59
Cargo.lock generated
View File

@ -2,6 +2,12 @@
# It is not intended for manual editing.
version = 3
[[package]]
name = "adler"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "ahash"
version = "0.7.6"
@ -509,6 +515,9 @@ name = "bitflags"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
dependencies = [
"serde",
]
[[package]]
name = "blake3"
@ -927,6 +936,15 @@ dependencies = [
"libc",
]
[[package]]
name = "crc32fast"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
dependencies = [
"cfg-if 1.0.0",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.15"
@ -1367,6 +1385,16 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "flate2"
version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
dependencies = [
"crc32fast",
"miniz_oxide",
]
[[package]]
name = "float-cmp"
version = "0.9.0"
@ -2304,31 +2332,37 @@ checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
[[package]]
name = "melib"
version = "0.7.2"
source = "git+https://github.com/meli/meli?rev=2447a2c#2447a2cbfeaa8d6f7ec11a2a8a6f3be1ff2fea58"
version = "0.8.5-rc.3"
source = "git+https://git.meli-email.org/meli/meli.git?rev=64e60cb#64e60cb0ee79841ab40e3dba94ac27150a264c5c"
dependencies = [
"async-stream",
"base64 0.13.1",
"bincode",
"bitflags 1.3.2",
"bitflags 2.4.1",
"data-encoding",
"encoding",
"encoding_rs",
"flate2",
"futures",
"indexmap",
"libc",
"libloading",
"log",
"native-tls",
"nix",
"nom",
"notify",
"polling",
"regex",
"serde",
"serde_derive",
"serde_json",
"serde_path_to_error",
"smallvec",
"smol",
"socket2",
"unicode-segmentation",
"uuid",
"xdg",
"xdg-utils",
]
[[package]]
@ -2375,6 +2409,15 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
dependencies = [
"adler",
]
[[package]]
name = "mio"
version = "0.6.23"
@ -4404,12 +4447,6 @@ dependencies = [
"home",
]
[[package]]
name = "xdg-utils"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db9fefe62d5969721e2cfc529e6a760901cc0da422b6d67e7bfd18e69490dba6"
[[package]]
name = "xz2"
version = "0.1.7"

View File

@ -27,7 +27,7 @@ use std::{
use mailpot::{
melib,
melib::{backends::maildir::MaildirPathTrait, smol, Envelope, EnvelopeHash},
melib::{maildir::MaildirPathTrait, smol, Envelope, EnvelopeHash},
models::{changesets::*, *},
queue::{Queue, QueueEntry},
transaction::TransactionBehavior,
@ -802,7 +802,7 @@ pub fn import_maildir(
EnvelopeHash(hasher.finish())
}
let mut buf = Vec::with_capacity(4096);
let files = melib::backends::maildir::MaildirType::list_mail_in_maildir_fs(maildir_path, true)
let files = melib::maildir::MaildirType::list_mail_in_maildir_fs(maildir_path, true)
.context("Could not parse files in maildir path")?;
let mut ctr = 0;
for file in files {

View File

@ -31,7 +31,7 @@ pub fn datetime_header_value_lint(db: &mut Connection, dry_run: bool) -> Result<
let iter = stmt.query_map([], |row| {
let pk: i64 = row.get("pk")?;
let date_s: String = row.get("datetime")?;
match melib::datetime::rfc822_to_timestamp(date_s.trim()) {
match melib::utils::datetime::rfc822_to_timestamp(date_s.trim()) {
Err(_) | Ok(0) => {
let mut timestamp: i64 = row.get("timestamp")?;
let created: i64 = row.get("created")?;
@ -75,7 +75,11 @@ pub fn datetime_header_value_lint(db: &mut Connection, dry_run: bool) -> Result<
{
v.to_rfc2822()
} else if let Some(v) = timestamp.map(|t| {
melib::datetime::timestamp_to_string(t, Some(melib::datetime::RFC822_DATE), true)
melib::utils::datetime::timestamp_to_string(
t,
Some(melib::utils::datetime::formats::RFC822_DATE),
true,
)
}) {
v
} else if let Ok(v) =

View File

@ -109,11 +109,23 @@ fn test_out_queue_flush() {
assert!(env.subject().starts_with(&format!("[{}] ", foo_chat.id)));
let headers = env.other_headers();
assert_eq!(headers.get("List-Id"), Some(&foo_chat.id_header()));
assert_eq!(headers.get("List-Help"), foo_chat.help_header().as_ref());
assert_eq!(
headers.get("List-Post"),
foo_chat.post_header(Some(&post_policy)).as_ref()
headers
.get(melib::HeaderName::LIST_ID)
.map(|header| header.to_string()),
Some(foo_chat.id_header())
);
assert_eq!(
headers
.get(melib::HeaderName::LIST_HELP)
.map(|header| header.to_string()),
foo_chat.help_header()
);
assert_eq!(
headers
.get(melib::HeaderName::LIST_POST)
.map(|header| header.to_string()),
foo_chat.post_header(Some(&post_policy))
);
};
@ -306,11 +318,21 @@ fn test_list_requests_submission() {
let headers_fn = |env: &melib::Envelope| {
let headers = env.other_headers();
assert_eq!(headers.get("List-Id"), Some(&foo_chat.id_header()));
assert_eq!(headers.get("List-Help"), foo_chat.help_header().as_ref());
assert_eq!(
headers.get("List-Post"),
foo_chat.post_header(Some(&post_policy)).as_ref()
headers.get(melib::HeaderName::LIST_ID),
Some(foo_chat.id_header().as_str())
);
assert_eq!(
headers
.get(melib::HeaderName::LIST_HELP)
.map(|header| header.to_string()),
foo_chat.help_header()
);
assert_eq!(
headers
.get(melib::HeaderName::LIST_POST)
.map(|header| header.to_string()),
foo_chat.post_header(Some(&post_policy))
);
};

View File

@ -18,7 +18,7 @@ anyhow = "1.0.58"
chrono = { version = "^0.4", features = ["serde", ] }
jsonschema = { version = "0.17", default-features = false }
log = "0.4"
melib = { version = "*", default-features = false, features = ["smtp", "unicode_algorithms", "maildir_backend"], git = "https://github.com/meli/meli", rev = "2447a2c" }
melib = { default-features = false, features = ["smtp", "unicode-algorithms", "maildir"], git = "https://git.meli-email.org/meli/meli.git", rev = "64e60cb" }
minijinja = { version = "0.31.0", features = ["source", ] }
percent-encoding = { version = "^2.1" }
rusqlite = { version = "^0.30", features = ["bundled", "functions", "trace", "hooks", "serde_json", "array", "chrono", "unlock_notify"] }

View File

@ -40,7 +40,7 @@
mod settings;
use log::trace;
use melib::Address;
use melib::{Address, HeaderName};
use percent_encoding::utf8_percent_encode;
pub use settings::*;
@ -168,7 +168,7 @@ impl PostFilter for AddListHeaders {
trace!("Running AddListHeaders filter");
let (mut headers, body) = melib::email::parser::mail(&post.bytes).unwrap();
let sender = format!("<{}>", ctx.list.address);
headers.push((&b"Sender"[..], sender.as_bytes()));
headers.push((HeaderName::SENDER, sender.as_bytes()));
let list_id = Some(ctx.list.id_header());
let list_help = ctx.list.help_header();
@ -182,12 +182,12 @@ impl PostFilter for AddListHeaders {
let list_archive = ctx.list.archive_header();
for (hdr, val) in [
(b"List-Id".as_slice(), &list_id),
(b"List-Help".as_slice(), &list_help),
(b"List-Post".as_slice(), &list_post),
(b"List-Unsubscribe".as_slice(), &list_unsubscribe),
(b"List-Subscribe".as_slice(), &list_subscribe),
(b"List-Archive".as_slice(), &list_archive),
(HeaderName::LIST_ID, &list_id),
(HeaderName::LIST_HELP, &list_help),
(HeaderName::LIST_POST, &list_post),
(HeaderName::LIST_UNSUBSCRIBE, &list_unsubscribe),
(HeaderName::LIST_SUBSCRIBE, &list_subscribe),
(HeaderName::LIST_ARCHIVE, &list_archive),
] {
if let Some(val) = val {
headers.push((hdr, val.as_bytes()));
@ -197,13 +197,13 @@ impl PostFilter for AddListHeaders {
let mut new_vec = Vec::with_capacity(
headers
.iter()
.map(|(h, v)| h.len() + v.len() + ": \r\n".len())
.map(|(h, v)| h.as_str().as_bytes().len() + v.len() + ": \r\n".len())
.sum::<usize>()
+ "\r\n\r\n".len()
+ body.len(),
);
for (h, v) in headers {
new_vec.extend_from_slice(h);
new_vec.extend_from_slice(h.as_str().as_bytes());
new_vec.extend_from_slice(b": ");
new_vec.extend_from_slice(v);
new_vec.extend_from_slice(b"\r\n");
@ -239,28 +239,25 @@ impl PostFilter for AddSubjectTagPrefix {
trace!("Running AddSubjectTagPrefix filter");
let (mut headers, body) = melib::email::parser::mail(&post.bytes).unwrap();
let mut subject;
if let Some((_, subj_val)) = headers
.iter_mut()
.find(|(k, _)| k.eq_ignore_ascii_case(b"Subject"))
{
if let Some((_, subj_val)) = headers.iter_mut().find(|(k, _)| k == HeaderName::SUBJECT) {
subject = format!("[{}] ", ctx.list.id).into_bytes();
subject.extend(subj_val.iter().cloned());
*subj_val = subject.as_slice();
} else {
subject = format!("[{}] (no subject)", ctx.list.id).into_bytes();
headers.push((&b"Subject"[..], subject.as_slice()));
headers.push((HeaderName::SUBJECT, subject.as_slice()));
}
let mut new_vec = Vec::with_capacity(
headers
.iter()
.map(|(h, v)| h.len() + v.len() + ": \r\n".len())
.map(|(h, v)| h.as_str().as_bytes().len() + v.len() + ": \r\n".len())
.sum::<usize>()
+ "\r\n\r\n".len()
+ body.len(),
);
for (h, v) in headers {
new_vec.extend_from_slice(h);
new_vec.extend_from_slice(h.as_str().as_bytes());
new_vec.extend_from_slice(b": ");
new_vec.extend_from_slice(v);
new_vec.extend_from_slice(b"\r\n");
@ -315,18 +312,18 @@ impl PostFilter for ArchivedAtLink {
log::error!("ArchivedAtLink: {}", err);
})?;
let (mut headers, body) = melib::email::parser::mail(&post.bytes).unwrap();
headers.push((&b"Archived-At"[..], header_val.as_bytes()));
headers.push((HeaderName::ARCHIVED_AT, header_val.as_bytes()));
let mut new_vec = Vec::with_capacity(
headers
.iter()
.map(|(h, v)| h.len() + v.len() + ": \r\n".len())
.map(|(h, v)| h.as_str().as_bytes().len() + v.len() + ": \r\n".len())
.sum::<usize>()
+ "\r\n\r\n".len()
+ body.len(),
);
for (h, v) in headers {
new_vec.extend_from_slice(h);
new_vec.extend_from_slice(h.as_str().as_bytes());
new_vec.extend_from_slice(b": ");
new_vec.extend_from_slice(v);
new_vec.extend_from_slice(b"\r\n");

View File

@ -371,7 +371,7 @@ impl MailingList {
if let Some(val) = val {
draft
.headers
.insert(melib::HeaderName::new_unchecked(hdr), val);
.insert(melib::HeaderName::try_from(hdr).unwrap(), val);
}
}
}

View File

@ -46,9 +46,9 @@ impl Connection {
let datetime: std::borrow::Cow<'_, str> = if !env.date.is_empty() {
env.date.as_str().into()
} else {
melib::datetime::timestamp_to_string(
melib::utils::datetime::timestamp_to_string(
env.timestamp,
Some(melib::datetime::RFC822_DATE),
Some(melib::utils::datetime::formats::RFC822_DATE),
true,
)
.into()
@ -710,15 +710,14 @@ impl Connection {
})?;
let mut draft = templ.render(context)?;
draft.headers.insert(
melib::HeaderName::new_unchecked("From"),
list.request_subaddr(),
);
draft
.headers
.insert(melib::HeaderName::FROM, list.request_subaddr());
for addr in recipients {
let mut draft = draft.clone();
draft
.headers
.insert(melib::HeaderName::new_unchecked("To"), addr.to_string());
.insert(melib::HeaderName::TO, addr.to_string());
list.insert_headers(
&mut draft,
post_policy.as_deref(),

View File

@ -83,7 +83,7 @@ impl Template {
};
if let Some(ref subject) = self.subject {
draft.headers.insert(
HeaderName::new_unchecked("Subject"),
HeaderName::SUBJECT,
env.render_named_str("subject", subject, &context)?,
);
}

View File

@ -309,7 +309,7 @@ pub fn thread(
let env_lock = envelopes.read().unwrap();
let thread = threads.envelope_to_thread[&root_env_hash];
let mut ret = vec![];
for (depth, t) in threads.thread_group_iter(thread) {
for (depth, t) in threads.thread_iter(thread) {
let hash = threads.thread_nodes[&t].message.unwrap();
ret.push(ThreadEntry {
hash,