mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 17:36:29 +03:00
Resultify Message::get_filebytes()
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
- jsonrpc: add python API for webxdc updates #3872
|
- jsonrpc: add python API for webxdc updates #3872
|
||||||
- jsonrpc: add fresh message count to ChatListItemFetchResult::ArchiveLink
|
- jsonrpc: add fresh message count to ChatListItemFetchResult::ArchiveLink
|
||||||
- Add ffi functions to retrieve `verified by` information #3786
|
- Add ffi functions to retrieve `verified by` information #3786
|
||||||
|
- resultify `Message::get_filebytes()` #3925
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
- Do not add an error if the message is encrypted but not signed #3860
|
- Do not add an error if the message is encrypted but not signed #3860
|
||||||
|
|||||||
@@ -3309,6 +3309,8 @@ pub unsafe extern "C" fn dc_msg_get_filebytes(msg: *mut dc_msg_t) -> u64 {
|
|||||||
let ctx = &*ffi_msg.context;
|
let ctx = &*ffi_msg.context;
|
||||||
|
|
||||||
block_on(ffi_msg.message.get_filebytes(ctx))
|
block_on(ffi_msg.message.get_filebytes(ctx))
|
||||||
|
.unwrap_or_log_default(ctx, "Cannot get file size")
|
||||||
|
.unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ impl MessageObject {
|
|||||||
|
|
||||||
let sender_contact = Contact::load_from_db(context, message.get_from_id()).await?;
|
let sender_contact = Contact::load_from_db(context, message.get_from_id()).await?;
|
||||||
let sender = ContactObject::try_from_dc_contact(context, sender_contact).await?;
|
let sender = ContactObject::try_from_dc_contact(context, sender_contact).await?;
|
||||||
let file_bytes = message.get_filebytes(context).await;
|
let file_bytes = message.get_filebytes(context).await?.unwrap_or_default();
|
||||||
let override_sender_name = message.get_override_sender_name();
|
let override_sender_name = message.get_override_sender_name();
|
||||||
|
|
||||||
let webxdc_info = if message.get_viewtype() == Viewtype::Webxdc {
|
let webxdc_info = if message.get_viewtype() == Viewtype::Webxdc {
|
||||||
|
|||||||
@@ -5202,7 +5202,7 @@ mod tests {
|
|||||||
assert_eq!(msg.get_filename(), Some(filename.to_string()));
|
assert_eq!(msg.get_filename(), Some(filename.to_string()));
|
||||||
assert_eq!(msg.get_width(), w);
|
assert_eq!(msg.get_width(), w);
|
||||||
assert_eq!(msg.get_height(), h);
|
assert_eq!(msg.get_height(), h);
|
||||||
assert!(msg.get_filebytes(&bob).await > 250);
|
assert!(msg.get_filebytes(&bob).await?.unwrap() > 250);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -494,11 +494,12 @@ impl Message {
|
|||||||
.map(|name| name.to_string_lossy().to_string())
|
.map(|name| name.to_string_lossy().to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_filebytes(&self, context: &Context) -> u64 {
|
/// Returns the size of the file in bytes, if applicable.
|
||||||
match self.param.get_path(Param::File, context) {
|
pub async fn get_filebytes(&self, context: &Context) -> Result<Option<u64>> {
|
||||||
Ok(Some(path)) => get_filebytes(context, &path).await,
|
if let Some(path) = self.param.get_path(Param::File, context)? {
|
||||||
Ok(None) => 0,
|
Ok(Some(get_filebytes(context, &path).await?))
|
||||||
Err(_) => 0,
|
} else {
|
||||||
|
Ok(None)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1102,7 +1103,7 @@ pub async fn get_msg_info(context: &Context, msg_id: MsgId) -> Result<String> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(path) = msg.get_file(context) {
|
if let Some(path) = msg.get_file(context) {
|
||||||
let bytes = get_filebytes(context, &path).await;
|
let bytes = get_filebytes(context, &path).await?;
|
||||||
ret += &format!("\nFile: {}, {}, bytes\n", path.display(), bytes);
|
ret += &format!("\nFile: {}, {}, bytes\n", path.display(), bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1432,7 +1432,7 @@ fn recipients_contain_addr(recipients: &[(String, String)], addr: &str) -> bool
|
|||||||
async fn is_file_size_okay(context: &Context, msg: &Message) -> Result<bool> {
|
async fn is_file_size_okay(context: &Context, msg: &Message) -> Result<bool> {
|
||||||
match msg.param.get_path(Param::File, context)? {
|
match msg.param.get_path(Param::File, context)? {
|
||||||
Some(path) => {
|
Some(path) => {
|
||||||
let bytes = get_filebytes(context, &path).await;
|
let bytes = get_filebytes(context, &path).await?;
|
||||||
Ok(bytes <= UPPER_LIMIT_FILE_SIZE)
|
Ok(bytes <= UPPER_LIMIT_FILE_SIZE)
|
||||||
}
|
}
|
||||||
None => Ok(false),
|
None => Ok(false),
|
||||||
|
|||||||
@@ -3145,7 +3145,7 @@ On 2020-10-25, Bob wrote:
|
|||||||
assert_eq!(msg.is_dc_message, MessengerMessage::No);
|
assert_eq!(msg.is_dc_message, MessengerMessage::No);
|
||||||
assert_eq!(msg.chat_blocked, Blocked::Request);
|
assert_eq!(msg.chat_blocked, Blocked::Request);
|
||||||
assert_eq!(msg.state, MessageState::InFresh);
|
assert_eq!(msg.state, MessageState::InFresh);
|
||||||
assert_eq!(msg.get_filebytes(&t).await, 2115);
|
assert_eq!(msg.get_filebytes(&t).await.unwrap().unwrap(), 2115);
|
||||||
assert!(msg.get_file(&t).is_some());
|
assert!(msg.get_file(&t).is_some());
|
||||||
assert_eq!(msg.get_filename().unwrap(), "avatar64x64.png");
|
assert_eq!(msg.get_filename().unwrap(), "avatar64x64.png");
|
||||||
assert_eq!(msg.get_width(), 64);
|
assert_eq!(msg.get_width(), 64);
|
||||||
|
|||||||
10
src/tools.rs
10
src/tools.rs
@@ -364,12 +364,10 @@ pub(crate) fn get_abs_path(context: &Context, path: impl AsRef<Path>) -> PathBuf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn get_filebytes(context: &Context, path: impl AsRef<Path>) -> u64 {
|
pub(crate) async fn get_filebytes(context: &Context, path: impl AsRef<Path>) -> Result<u64> {
|
||||||
let path_abs = get_abs_path(context, &path);
|
let path_abs = get_abs_path(context, &path);
|
||||||
match fs::metadata(&path_abs).await {
|
let meta = fs::metadata(&path_abs).await?;
|
||||||
Ok(meta) => meta.len(),
|
Ok(meta.len())
|
||||||
Err(_err) => 0,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn delete_file(context: &Context, path: impl AsRef<Path>) -> bool {
|
pub(crate) async fn delete_file(context: &Context, path: impl AsRef<Path>) -> bool {
|
||||||
@@ -1055,7 +1053,7 @@ DKIM Results: Passed=true, Works=true, Allow_Keychange=true";
|
|||||||
.is_ok());
|
.is_ok());
|
||||||
assert!(file_exist!(context, "$BLOBDIR/foobar"));
|
assert!(file_exist!(context, "$BLOBDIR/foobar"));
|
||||||
assert!(!file_exist!(context, "$BLOBDIR/foobarx"));
|
assert!(!file_exist!(context, "$BLOBDIR/foobarx"));
|
||||||
assert_eq!(get_filebytes(context, "$BLOBDIR/foobar").await, 7);
|
assert_eq!(get_filebytes(context, "$BLOBDIR/foobar").await.unwrap(), 7);
|
||||||
|
|
||||||
let abs_path = context
|
let abs_path = context
|
||||||
.get_blobdir()
|
.get_blobdir()
|
||||||
|
|||||||
Reference in New Issue
Block a user