mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 09:26:29 +03:00
chore(cargo): upgrade async_zip to 0.0.17 (#6035)
This commit is contained in:
14
Cargo.lock
generated
14
Cargo.lock
generated
@@ -273,15 +273,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-compression"
|
name = "async-compression"
|
||||||
version = "0.3.15"
|
version = "0.4.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
|
checksum = "998282f8f49ccd6116b0ed8a4de0fbd3151697920e7c7533416d6e25e76434a7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"flate2",
|
"flate2",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
"futures-io",
|
||||||
"memchr",
|
"memchr",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"tokio",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -368,16 +368,17 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async_zip"
|
name = "async_zip"
|
||||||
version = "0.0.12"
|
version = "0.0.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b2105142db9c6203b9dadc83b0553394589a6cb31b1449a3b46b42f47c3434d0"
|
checksum = "00b9f7252833d5ed4b00aa9604b563529dd5e11de9c23615de2dcdf91eb87b52"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-compression",
|
"async-compression",
|
||||||
"crc32fast",
|
"crc32fast",
|
||||||
"log",
|
"futures-lite 2.3.0",
|
||||||
"pin-project",
|
"pin-project",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"tokio-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -6074,6 +6075,7 @@ checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
"futures-io",
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"hashbrown",
|
"hashbrown",
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ async-channel = { workspace = true }
|
|||||||
async-imap = { version = "0.10.1", default-features = false, features = ["runtime-tokio"] }
|
async-imap = { version = "0.10.1", default-features = false, features = ["runtime-tokio"] }
|
||||||
async-native-tls = { version = "0.5", default-features = false, features = ["runtime-tokio"] }
|
async-native-tls = { version = "0.5", default-features = false, features = ["runtime-tokio"] }
|
||||||
async-smtp = { version = "0.9", default-features = false, features = ["runtime-tokio"] }
|
async-smtp = { version = "0.9", default-features = false, features = ["runtime-tokio"] }
|
||||||
async_zip = { version = "0.0.12", default-features = false, features = ["deflate", "fs"] }
|
async_zip = { version = "0.0.17", default-features = false, features = ["deflate", "tokio-fs"] }
|
||||||
base64 = { workspace = true }
|
base64 = { workspace = true }
|
||||||
brotli = { version = "6", default-features=false, features = ["std"] }
|
brotli = { version = "6", default-features=false, features = ["std"] }
|
||||||
bytes = "1"
|
bytes = "1"
|
||||||
|
|||||||
@@ -23,13 +23,13 @@ use std::path::Path;
|
|||||||
|
|
||||||
use anyhow::{anyhow, bail, ensure, format_err, Context as _, Result};
|
use anyhow::{anyhow, bail, ensure, format_err, Context as _, Result};
|
||||||
|
|
||||||
|
use async_zip::tokio::read::fs::ZipFileReader as FsZipFileReader;
|
||||||
use deltachat_contact_tools::sanitize_bidi_characters;
|
use deltachat_contact_tools::sanitize_bidi_characters;
|
||||||
use deltachat_derive::FromSql;
|
use deltachat_derive::FromSql;
|
||||||
use lettre_email::PartBuilder;
|
use lettre_email::PartBuilder;
|
||||||
use rusqlite::OptionalExtension;
|
use rusqlite::OptionalExtension;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use tokio::io::AsyncReadExt;
|
|
||||||
|
|
||||||
use crate::chat::{self, Chat};
|
use crate::chat::{self, Chat};
|
||||||
use crate::constants::Chattype;
|
use crate::constants::Chattype;
|
||||||
@@ -195,7 +195,7 @@ fn find_zip_entry<'a>(
|
|||||||
name: &str,
|
name: &str,
|
||||||
) -> Option<(usize, &'a async_zip::StoredZipEntry)> {
|
) -> Option<(usize, &'a async_zip::StoredZipEntry)> {
|
||||||
for (i, ent) in file.entries().iter().enumerate() {
|
for (i, ent) in file.entries().iter().enumerate() {
|
||||||
if ent.entry().filename() == name {
|
if ent.filename().as_bytes() == name.as_bytes() {
|
||||||
return Some((i, ent));
|
return Some((i, ent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -212,7 +212,7 @@ impl Context {
|
|||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
let archive = match async_zip::read::mem::ZipFileReader::new(file.to_vec()).await {
|
let archive = match async_zip::base::read::mem::ZipFileReader::new(file.to_vec()).await {
|
||||||
Ok(archive) => archive,
|
Ok(archive) => archive,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
info!(self, "{} cannot be opened as zip-file", &filename);
|
info!(self, "{} cannot be opened as zip-file", &filename);
|
||||||
@@ -235,7 +235,7 @@ impl Context {
|
|||||||
bail!("{} is not a valid webxdc file", filename);
|
bail!("{} is not a valid webxdc file", filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
let valid = match async_zip::read::fs::ZipFileReader::new(path).await {
|
let valid = match FsZipFileReader::new(path).await {
|
||||||
Ok(archive) => {
|
Ok(archive) => {
|
||||||
if find_zip_entry(archive.file(), "index.html").is_none() {
|
if find_zip_entry(archive.file(), "index.html").is_none() {
|
||||||
warn!(self, "{} misses index.html", filename);
|
warn!(self, "{} misses index.html", filename);
|
||||||
@@ -791,27 +791,24 @@ fn parse_webxdc_manifest(bytes: &[u8]) -> Result<WebxdcManifest> {
|
|||||||
Ok(manifest)
|
Ok(manifest)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn get_blob(archive: &async_zip::read::fs::ZipFileReader, name: &str) -> Result<Vec<u8>> {
|
async fn get_blob(archive: &FsZipFileReader, name: &str) -> Result<Vec<u8>> {
|
||||||
let (i, _) = find_zip_entry(archive.file(), name)
|
let (i, _) = find_zip_entry(archive.file(), name)
|
||||||
.ok_or_else(|| anyhow!("no entry found for {}", name))?;
|
.ok_or_else(|| anyhow!("no entry found for {}", name))?;
|
||||||
let mut reader = archive.entry(i).await?;
|
let mut reader = archive.reader_with_entry(i).await?;
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
reader.read_to_end(&mut buf).await?;
|
reader.read_to_end_checked(&mut buf).await?;
|
||||||
Ok(buf)
|
Ok(buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Message {
|
impl Message {
|
||||||
/// Get handle to a webxdc ZIP-archive.
|
/// Get handle to a webxdc ZIP-archive.
|
||||||
/// To check for file existence use archive.by_name(), to read a file, use get_blob(archive).
|
/// To check for file existence use archive.by_name(), to read a file, use get_blob(archive).
|
||||||
async fn get_webxdc_archive(
|
async fn get_webxdc_archive(&self, context: &Context) -> Result<FsZipFileReader> {
|
||||||
&self,
|
|
||||||
context: &Context,
|
|
||||||
) -> Result<async_zip::read::fs::ZipFileReader> {
|
|
||||||
let path = self
|
let path = self
|
||||||
.get_file(context)
|
.get_file(context)
|
||||||
.ok_or_else(|| format_err!("No webxdc instance file."))?;
|
.ok_or_else(|| format_err!("No webxdc instance file."))?;
|
||||||
let path_abs = get_abs_path(context, &path);
|
let path_abs = get_abs_path(context, &path);
|
||||||
let archive = async_zip::read::fs::ZipFileReader::new(path_abs).await?;
|
let archive = FsZipFileReader::new(path_abs).await?;
|
||||||
Ok(archive)
|
Ok(archive)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user