mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 17:36:29 +03:00
calculate image-size in device-messages
eg. android relies on that and fallsback to wrong aspect ratios otherwise. also, this makes job.rs a little more readable as some things are moved to message.rs :)
This commit is contained in:
@@ -1984,6 +1984,7 @@ pub fn add_device_msg(
|
|||||||
chat_id = create_or_lookup_by_contact_id(context, DC_CONTACT_ID_DEVICE, Blocked::Not)?.0;
|
chat_id = create_or_lookup_by_contact_id(context, DC_CONTACT_ID_DEVICE, Blocked::Not)?.0;
|
||||||
|
|
||||||
let rfc724_mid = dc_create_outgoing_rfc724_mid(None, "@device");
|
let rfc724_mid = dc_create_outgoing_rfc724_mid(None, "@device");
|
||||||
|
msg.try_calc_and_set_dimensions(context).ok();
|
||||||
prepare_msg_blob(context, msg)?;
|
prepare_msg_blob(context, msg)?;
|
||||||
unarchive(context, chat_id)?;
|
unarchive(context, chat_id)?;
|
||||||
|
|
||||||
|
|||||||
22
src/job.rs
22
src/job.rs
@@ -605,27 +605,7 @@ fn set_delivered(context: &Context, msg_id: MsgId) {
|
|||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn job_send_msg(context: &Context, msg_id: MsgId) -> Result<(), Error> {
|
pub fn job_send_msg(context: &Context, msg_id: MsgId) -> Result<(), Error> {
|
||||||
let mut mimefactory = MimeFactory::load_msg(context, msg_id)?;
|
let mut mimefactory = MimeFactory::load_msg(context, msg_id)?;
|
||||||
|
mimefactory.msg.try_calc_and_set_dimensions(context).ok();
|
||||||
if chat::msgtype_has_file(mimefactory.msg.type_0) {
|
|
||||||
let file_param = mimefactory.msg.param.get_path(Param::File, context)?;
|
|
||||||
if let Some(pathNfilename) = file_param {
|
|
||||||
if (mimefactory.msg.type_0 == Viewtype::Image
|
|
||||||
|| mimefactory.msg.type_0 == Viewtype::Gif)
|
|
||||||
&& !mimefactory.msg.param.exists(Param::Width)
|
|
||||||
{
|
|
||||||
mimefactory.msg.param.set_int(Param::Width, 0);
|
|
||||||
mimefactory.msg.param.set_int(Param::Height, 0);
|
|
||||||
|
|
||||||
if let Ok(buf) = dc_read_file(context, pathNfilename) {
|
|
||||||
if let Ok((width, height)) = dc_get_filemeta(&buf) {
|
|
||||||
mimefactory.msg.param.set_int(Param::Width, width as i32);
|
|
||||||
mimefactory.msg.param.set_int(Param::Height, height as i32);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mimefactory.msg.save_param_to_disk(context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* create message */
|
/* create message */
|
||||||
if let Err(msg) = unsafe { mimefactory.render() } {
|
if let Err(msg) = unsafe { mimefactory.render() } {
|
||||||
|
|||||||
@@ -309,6 +309,32 @@ impl Message {
|
|||||||
self.param.get_path(Param::File, context).unwrap_or(None)
|
self.param.get_path(Param::File, context).unwrap_or(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn try_calc_and_set_dimensions(&mut self, context: &Context) -> Result<(), Error> {
|
||||||
|
if chat::msgtype_has_file(self.type_0) {
|
||||||
|
let file_param = self.param.get_path(Param::File, context)?;
|
||||||
|
if let Some(path_and_filename) = file_param {
|
||||||
|
if (self.type_0 == Viewtype::Image || self.type_0 == Viewtype::Gif)
|
||||||
|
&& !self.param.exists(Param::Width)
|
||||||
|
{
|
||||||
|
self.param.set_int(Param::Width, 0);
|
||||||
|
self.param.set_int(Param::Height, 0);
|
||||||
|
|
||||||
|
if let Ok(buf) = dc_read_file(context, path_and_filename) {
|
||||||
|
if let Ok((width, height)) = dc_get_filemeta(&buf) {
|
||||||
|
self.param.set_int(Param::Width, width as i32);
|
||||||
|
self.param.set_int(Param::Height, height as i32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !self.id.is_unset() {
|
||||||
|
self.save_param_to_disk(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Check if a message has a location bound to it.
|
/// Check if a message has a location bound to it.
|
||||||
/// These messages are also returned by dc_get_locations()
|
/// These messages are also returned by dc_get_locations()
|
||||||
/// and the UI may decide to display a special icon beside such messages,
|
/// and the UI may decide to display a special icon beside such messages,
|
||||||
|
|||||||
Reference in New Issue
Block a user