mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 17:36:29 +03:00
Remove itertools dependency
Collecting into Vec of &str and joining may even be faster according to benchmarks: https://gist.github.com/green-s/fbd0d374b290781ac9b3f8ff03e3245d
This commit is contained in:
committed by
Floris Bruynooghe
parent
8732b7a55c
commit
c4d1a639b0
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -1101,7 +1101,6 @@ dependencies = [
|
|||||||
"humansize",
|
"humansize",
|
||||||
"image",
|
"image",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"itertools",
|
|
||||||
"kamadak-exif",
|
"kamadak-exif",
|
||||||
"lettre_email",
|
"lettre_email",
|
||||||
"libc",
|
"libc",
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ futures = "0.3"
|
|||||||
hex = "0.4.0"
|
hex = "0.4.0"
|
||||||
image = { version = "0.23.5", default-features=false, features = ["gif", "jpeg", "ico", "png", "pnm", "webp", "bmp"] }
|
image = { version = "0.23.5", default-features=false, features = ["gif", "jpeg", "ico", "png", "pnm", "webp", "bmp"] }
|
||||||
indexmap = "1.7"
|
indexmap = "1.7"
|
||||||
itertools = "0.10"
|
|
||||||
kamadak-exif = "0.5"
|
kamadak-exif = "0.5"
|
||||||
lettre_email = { git = "https://github.com/deltachat/lettre", branch = "master" }
|
lettre_email = { git = "https://github.com/deltachat/lettre", branch = "master" }
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ use std::time::{Duration, SystemTime};
|
|||||||
use anyhow::{bail, ensure, format_err, Context as _, Result};
|
use anyhow::{bail, ensure, format_err, Context as _, Result};
|
||||||
use async_std::path::{Path, PathBuf};
|
use async_std::path::{Path, PathBuf};
|
||||||
use deltachat_derive::{FromSql, ToSql};
|
use deltachat_derive::{FromSql, ToSql};
|
||||||
use itertools::Itertools;
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::aheader::EncryptPreference;
|
use crate::aheader::EncryptPreference;
|
||||||
@@ -2817,7 +2816,7 @@ pub async fn forward_msgs(context: &Context, msg_ids: &[MsgId], chat_id: ChatId)
|
|||||||
.query_map(
|
.query_map(
|
||||||
format!(
|
format!(
|
||||||
"SELECT id FROM msgs WHERE id IN({}) ORDER BY timestamp,id",
|
"SELECT id FROM msgs WHERE id IN({}) ORDER BY timestamp,id",
|
||||||
msg_ids.iter().map(|_| "?").join(",")
|
msg_ids.iter().map(|_| "?").collect::<Vec<&str>>().join(",")
|
||||||
),
|
),
|
||||||
rusqlite::params_from_iter(msg_ids),
|
rusqlite::params_from_iter(msg_ids),
|
||||||
|row| row.get::<_, MsgId>(0),
|
|row| row.get::<_, MsgId>(0),
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ mod server_params;
|
|||||||
use anyhow::{bail, ensure, Context as _, Result};
|
use anyhow::{bail, ensure, Context as _, Result};
|
||||||
use async_std::prelude::*;
|
use async_std::prelude::*;
|
||||||
use async_std::task;
|
use async_std::task;
|
||||||
use itertools::Itertools;
|
|
||||||
use job::Action;
|
use job::Action;
|
||||||
use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
|
use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
|
||||||
|
|
||||||
@@ -682,7 +681,11 @@ async fn nicer_configuration_error(context: &Context, errors: Vec<ConfigurationE
|
|||||||
return first_err.msg.to_string();
|
return first_err.msg.to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
errors.iter().map(|e| e.to_string()).join("\n\n")
|
errors
|
||||||
|
.iter()
|
||||||
|
.map(|e| e.to_string())
|
||||||
|
.collect::<Vec<String>>()
|
||||||
|
.join("\n\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, thiserror::Error)]
|
#[derive(Debug, thiserror::Error)]
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ use std::convert::{TryFrom, TryInto};
|
|||||||
use anyhow::{bail, ensure, Context as _, Result};
|
use anyhow::{bail, ensure, Context as _, Result};
|
||||||
use async_std::path::PathBuf;
|
use async_std::path::PathBuf;
|
||||||
use deltachat_derive::{FromSql, ToSql};
|
use deltachat_derive::{FromSql, ToSql};
|
||||||
use itertools::Itertools;
|
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
@@ -1356,15 +1355,13 @@ pub fn addr_cmp(addr1: impl AsRef<str>, addr2: impl AsRef<str>) -> bool {
|
|||||||
|
|
||||||
fn split_address_book(book: &str) -> Vec<(&str, &str)> {
|
fn split_address_book(book: &str) -> Vec<(&str, &str)> {
|
||||||
book.lines()
|
book.lines()
|
||||||
|
.collect::<Vec<&str>>()
|
||||||
.chunks(2)
|
.chunks(2)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|mut chunk| {
|
.filter_map(|chunk| {
|
||||||
let name = chunk.next().unwrap();
|
let name = chunk.get(0)?;
|
||||||
let addr = match chunk.next() {
|
let addr = chunk.get(1)?;
|
||||||
Some(a) => a,
|
Some((*name, *addr))
|
||||||
None => return None,
|
|
||||||
};
|
|
||||||
Some((name, addr))
|
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ use std::cmp::min;
|
|||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
|
|
||||||
use anyhow::{bail, ensure, Context as _, Result};
|
use anyhow::{bail, ensure, Context as _, Result};
|
||||||
use itertools::join;
|
|
||||||
use mailparse::SingleInfo;
|
use mailparse::SingleInfo;
|
||||||
use num_traits::FromPrimitive;
|
use num_traits::FromPrimitive;
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
@@ -1931,7 +1930,11 @@ async fn create_adhoc_group(
|
|||||||
/// are hidden in BCC. This group ID is sent by DC in the messages sent to this chat,
|
/// are hidden in BCC. This group ID is sent by DC in the messages sent to this chat,
|
||||||
/// so having the same ID prevents group split.
|
/// so having the same ID prevents group split.
|
||||||
async fn create_adhoc_grp_id(context: &Context, member_ids: &[u32]) -> Result<String> {
|
async fn create_adhoc_grp_id(context: &Context, member_ids: &[u32]) -> Result<String> {
|
||||||
let member_ids_str = join(member_ids.iter().map(|x| x.to_string()), ",");
|
let member_ids_str = member_ids
|
||||||
|
.iter()
|
||||||
|
.map(|x| x.to_string())
|
||||||
|
.collect::<Vec<String>>()
|
||||||
|
.join(",");
|
||||||
let member_cs = context
|
let member_cs = context
|
||||||
.get_config(Config::ConfiguredAddr)
|
.get_config(Config::ConfiguredAddr)
|
||||||
.await?
|
.await?
|
||||||
@@ -2023,7 +2026,11 @@ async fn check_verified_properties(
|
|||||||
if to_ids.is_empty() {
|
if to_ids.is_empty() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
let to_ids_str = join(to_ids.iter().map(|x| x.to_string()), ",");
|
let to_ids_str = to_ids
|
||||||
|
.iter()
|
||||||
|
.map(|x| x.to_string())
|
||||||
|
.collect::<Vec<String>>()
|
||||||
|
.join(",");
|
||||||
|
|
||||||
let rows = context
|
let rows = context
|
||||||
.sql
|
.sql
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ use std::future::Future;
|
|||||||
use anyhow::{bail, ensure, format_err, Context as _, Error, Result};
|
use anyhow::{bail, ensure, format_err, Context as _, Error, Result};
|
||||||
use async_smtp::smtp::response::{Category, Code, Detail};
|
use async_smtp::smtp::response::{Category, Code, Detail};
|
||||||
use deltachat_derive::{FromSql, ToSql};
|
use deltachat_derive::{FromSql, ToSql};
|
||||||
use itertools::Itertools;
|
|
||||||
use rand::{thread_rng, Rng};
|
use rand::{thread_rng, Rng};
|
||||||
|
|
||||||
use crate::blob::BlobObject;
|
use crate::blob::BlobObject;
|
||||||
@@ -840,7 +839,7 @@ pub async fn kill_action(context: &Context, action: Action) -> Result<()> {
|
|||||||
async fn kill_ids(context: &Context, job_ids: &[u32]) -> Result<()> {
|
async fn kill_ids(context: &Context, job_ids: &[u32]) -> Result<()> {
|
||||||
let q = format!(
|
let q = format!(
|
||||||
"DELETE FROM jobs WHERE id IN({})",
|
"DELETE FROM jobs WHERE id IN({})",
|
||||||
job_ids.iter().map(|_| "?").join(",")
|
job_ids.iter().map(|_| "?").collect::<Vec<&str>>().join(",")
|
||||||
);
|
);
|
||||||
context
|
context
|
||||||
.sql
|
.sql
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ use std::str;
|
|||||||
|
|
||||||
use anyhow::{bail, Error};
|
use anyhow::{bail, Error};
|
||||||
use async_std::path::PathBuf;
|
use async_std::path::PathBuf;
|
||||||
use itertools::Itertools;
|
|
||||||
use num_traits::FromPrimitive;
|
use num_traits::FromPrimitive;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@@ -182,7 +181,7 @@ impl fmt::Display for Params {
|
|||||||
f,
|
f,
|
||||||
"{}={}",
|
"{}={}",
|
||||||
*key as u8 as char,
|
*key as u8 as char,
|
||||||
value.split('\n').join("\n\n")
|
value.split('\n').collect::<Vec<&str>>().join("\n\n")
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
//! # Simplify incoming plaintext.
|
//! # Simplify incoming plaintext.
|
||||||
|
|
||||||
use itertools::Itertools;
|
|
||||||
|
|
||||||
// protect lines starting with `--` against being treated as a footer.
|
// protect lines starting with `--` against being treated as a footer.
|
||||||
// for that, we insert a ZERO WIDTH SPACE (ZWSP, 0x200B);
|
// for that, we insert a ZERO WIDTH SPACE (ZWSP, 0x200B);
|
||||||
// this should be invisible on most systems and there is no need to unescape it again
|
// this should be invisible on most systems and there is no need to unescape it again
|
||||||
@@ -158,6 +156,7 @@ fn remove_bottom_quote<'a>(lines: &'a [&str]) -> (&'a [&'a str], Option<String>)
|
|||||||
s.strip_prefix('>')
|
s.strip_prefix('>')
|
||||||
.map_or(*s, |u| u.strip_prefix(' ').unwrap_or(u))
|
.map_or(*s, |u| u.strip_prefix(' ').unwrap_or(u))
|
||||||
})
|
})
|
||||||
|
.collect::<Vec<&str>>()
|
||||||
.join("\n");
|
.join("\n");
|
||||||
if l_last > 1 && is_empty_line(lines[l_last - 1]) {
|
if l_last > 1 && is_empty_line(lines[l_last - 1]) {
|
||||||
l_last -= 1
|
l_last -= 1
|
||||||
@@ -204,6 +203,7 @@ fn remove_top_quote<'a>(lines: &'a [&str]) -> (&'a [&'a str], Option<String>) {
|
|||||||
s.strip_prefix('>')
|
s.strip_prefix('>')
|
||||||
.map_or(*s, |u| u.strip_prefix(' ').unwrap_or(u))
|
.map_or(*s, |u| u.strip_prefix(' ').unwrap_or(u))
|
||||||
})
|
})
|
||||||
|
.collect::<Vec<&str>>()
|
||||||
.join("\n"),
|
.join("\n"),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ use async_smtp::{EmailAddress, Envelope, SendableEmail, Transport};
|
|||||||
use crate::constants::DEFAULT_MAX_SMTP_RCPT_TO;
|
use crate::constants::DEFAULT_MAX_SMTP_RCPT_TO;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use itertools::Itertools;
|
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
pub type Result<T> = std::result::Result<T, Error>;
|
pub type Result<T> = std::result::Result<T, Error>;
|
||||||
@@ -43,10 +42,14 @@ impl Smtp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for recipients_chunk in recipients.chunks(chunk_size).into_iter() {
|
for recipients_chunk in recipients.chunks(chunk_size).into_iter() {
|
||||||
let recipients = recipients_chunk.to_vec();
|
let recipients_display = recipients_chunk
|
||||||
let recipients_display = recipients.iter().map(|x| x.to_string()).join(",");
|
.iter()
|
||||||
|
.map(|x| x.as_ref())
|
||||||
|
.collect::<Vec<&str>>()
|
||||||
|
.join(",");
|
||||||
|
|
||||||
let envelope = Envelope::new(self.from.clone(), recipients).map_err(Error::Envelope)?;
|
let envelope = Envelope::new(self.from.clone(), recipients_chunk.to_vec())
|
||||||
|
.map_err(Error::Envelope)?;
|
||||||
let mail = SendableEmail::new(
|
let mail = SendableEmail::new(
|
||||||
envelope,
|
envelope,
|
||||||
format!("{}", job_id), // only used for internal logging
|
format!("{}", job_id), // only used for internal logging
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ use crate::message::{Message, MessageState};
|
|||||||
use crate::mimeparser::SystemMessage;
|
use crate::mimeparser::SystemMessage;
|
||||||
use crate::param::Param;
|
use crate::param::Param;
|
||||||
use crate::stock_str;
|
use crate::stock_str;
|
||||||
use itertools::Itertools;
|
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
@@ -174,7 +173,7 @@ impl Message {
|
|||||||
summary_content
|
summary_content
|
||||||
};
|
};
|
||||||
|
|
||||||
summary.split_whitespace().join(" ")
|
summary.split_whitespace().collect::<Vec<&str>>().join(" ")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ use crate::sync::SyncData::{AddQrToken, DeleteQrToken};
|
|||||||
use crate::token::Namespace;
|
use crate::token::Namespace;
|
||||||
use crate::{chat, stock_str, token};
|
use crate::{chat, stock_str, token};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use itertools::Itertools;
|
|
||||||
use lettre_email::mime::{self};
|
use lettre_email::mime::{self};
|
||||||
use lettre_email::PartBuilder;
|
use lettre_email::PartBuilder;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
@@ -177,7 +176,10 @@ impl Context {
|
|||||||
} else {
|
} else {
|
||||||
Ok(Some((
|
Ok(Some((
|
||||||
format!("{{\"items\":[\n{}\n]}}", serialized),
|
format!("{{\"items\":[\n{}\n]}}", serialized),
|
||||||
ids.iter().map(|x| x.to_string()).join(","),
|
ids.iter()
|
||||||
|
.map(|x| x.to_string())
|
||||||
|
.collect::<Vec<String>>()
|
||||||
|
.join(","),
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user