mirror of
https://github.com/chatmail/core.git
synced 2026-04-18 05:56:31 +03:00
rustify parts of MimeFactory struct
This commit is contained in:
@@ -36,9 +36,9 @@ pub enum Loaded {
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct MimeFactory<'a> {
|
||||
pub from_addr: *mut libc::c_char,
|
||||
pub from_displayname: *mut libc::c_char,
|
||||
pub selfstatus: Option<String>,
|
||||
pub from_addr: String,
|
||||
pub from_displayname: String,
|
||||
pub selfstatus: String,
|
||||
pub recipients_names: *mut clist,
|
||||
pub recipients_addr: *mut clist,
|
||||
pub timestamp: i64,
|
||||
@@ -59,10 +59,12 @@ pub struct MimeFactory<'a> {
|
||||
|
||||
impl<'a> MimeFactory<'a> {
|
||||
fn new(context: &'a Context, msg: Message) -> Self {
|
||||
let cget = |context: &Context, name: &str| context.sql.get_config(context, name);
|
||||
MimeFactory {
|
||||
from_addr: ptr::null_mut(),
|
||||
from_displayname: ptr::null_mut(),
|
||||
selfstatus: None,
|
||||
from_addr: cget(&context, "configured_addr").unwrap_or_default(),
|
||||
from_displayname: cget(&context, "displayname").unwrap_or_default(),
|
||||
selfstatus: cget(&context, "selfstatus")
|
||||
.unwrap_or_else(|| context.stock_str(StockMessage::StatusLine).to_string()),
|
||||
recipients_names: clist_new(),
|
||||
recipients_addr: clist_new(),
|
||||
timestamp: 0,
|
||||
@@ -86,8 +88,6 @@ impl<'a> MimeFactory<'a> {
|
||||
impl<'a> Drop for MimeFactory<'a> {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
free(self.from_addr as *mut libc::c_void);
|
||||
free(self.from_displayname as *mut libc::c_void);
|
||||
if !self.recipients_names.is_null() {
|
||||
clist_free_content(self.recipients_names);
|
||||
clist_free(self.recipients_names);
|
||||
@@ -117,8 +117,6 @@ pub unsafe fn dc_mimefactory_load_msg(
|
||||
let mut factory = MimeFactory::new(context, msg);
|
||||
factory.chat = Some(chat);
|
||||
|
||||
load_from(&mut factory);
|
||||
|
||||
// just set the chat above
|
||||
let chat = factory.chat.as_ref().unwrap();
|
||||
|
||||
@@ -126,12 +124,12 @@ pub unsafe fn dc_mimefactory_load_msg(
|
||||
clist_insert_after(
|
||||
factory.recipients_names,
|
||||
(*factory.recipients_names).last,
|
||||
dc_strdup_keep_null(factory.from_displayname) as *mut libc::c_void,
|
||||
factory.from_displayname.strdup().cast(),
|
||||
);
|
||||
clist_insert_after(
|
||||
factory.recipients_addr,
|
||||
(*factory.recipients_addr).last,
|
||||
dc_strdup(factory.from_addr) as *mut libc::c_void,
|
||||
factory.from_addr.strdup().cast(),
|
||||
);
|
||||
} else {
|
||||
context
|
||||
@@ -241,32 +239,6 @@ pub unsafe fn dc_mimefactory_load_msg(
|
||||
Ok(factory)
|
||||
}
|
||||
|
||||
unsafe fn load_from(factory: &mut MimeFactory) {
|
||||
let context = factory.context;
|
||||
factory.from_addr = context
|
||||
.sql
|
||||
.get_config(context, "configured_addr")
|
||||
.unwrap_or_default()
|
||||
.strdup();
|
||||
|
||||
factory.from_displayname = context
|
||||
.sql
|
||||
.get_config(context, "displayname")
|
||||
.unwrap_or_default()
|
||||
.strdup();
|
||||
|
||||
factory.selfstatus = context.sql.get_config(context, "selfstatus");
|
||||
|
||||
if factory.selfstatus.is_none() {
|
||||
factory.selfstatus = Some(
|
||||
factory
|
||||
.context
|
||||
.stock_str(StockMessage::StatusLine)
|
||||
.to_string(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
pub unsafe fn dc_mimefactory_load_mdn<'a>(
|
||||
context: &'a Context,
|
||||
msg_id: u32,
|
||||
@@ -308,9 +280,8 @@ pub unsafe fn dc_mimefactory_load_mdn<'a>(
|
||||
(*factory.recipients_addr).last,
|
||||
contact.get_addr().strdup() as *mut libc::c_void,
|
||||
);
|
||||
load_from(&mut factory);
|
||||
factory.timestamp = dc_create_smeared_timestamp(factory.context);
|
||||
factory.rfc724_mid = dc_create_outgoing_rfc724_mid(None, as_str(factory.from_addr));
|
||||
factory.rfc724_mid = dc_create_outgoing_rfc724_mid(None, &factory.from_addr);
|
||||
factory.loaded = Loaded::MDN;
|
||||
|
||||
Ok(factory)
|
||||
@@ -327,12 +298,12 @@ pub unsafe fn dc_mimefactory_render(
|
||||
mailimf_mailbox_list_add(
|
||||
from,
|
||||
mailimf_mailbox_new(
|
||||
if !factory.from_displayname.is_null() {
|
||||
dc_encode_header_words(as_str(factory.from_displayname))
|
||||
if !factory.from_displayname.is_empty() {
|
||||
dc_encode_header_words(&factory.from_displayname)
|
||||
} else {
|
||||
ptr::null_mut()
|
||||
},
|
||||
dc_strdup(factory.from_addr),
|
||||
factory.from_addr.strdup(),
|
||||
),
|
||||
);
|
||||
let mut to: *mut mailimf_address_list = ptr::null_mut();
|
||||
@@ -401,8 +372,11 @@ pub unsafe fn dc_mimefactory_render(
|
||||
add_mailimf_field(imf_fields, "X-Mailer", &headerval);
|
||||
add_mailimf_field(imf_fields, "Chat-Version", "1.0");
|
||||
if factory.req_mdn {
|
||||
let headerval = to_string(factory.from_addr);
|
||||
add_mailimf_field(imf_fields, "Chat-Disposition-Notification-To", &headerval);
|
||||
add_mailimf_field(
|
||||
imf_fields,
|
||||
"Chat-Disposition-Notification-To",
|
||||
&factory.from_addr,
|
||||
);
|
||||
}
|
||||
|
||||
let cleanup = |message: *mut mailmime| {
|
||||
@@ -617,21 +591,18 @@ pub unsafe fn dc_mimefactory_render(
|
||||
}
|
||||
};
|
||||
|
||||
let footer = factory.selfstatus.as_ref();
|
||||
let footer = &factory.selfstatus;
|
||||
let message_text = format!(
|
||||
"{}{}{}{}{}",
|
||||
fwdhint.unwrap_or_default(),
|
||||
&final_text,
|
||||
if !final_text.is_empty() && footer.is_some() {
|
||||
if !final_text.is_empty() && !footer.is_empty() {
|
||||
"\r\n\r\n"
|
||||
} else {
|
||||
""
|
||||
},
|
||||
if footer.is_some() { "-- \r\n" } else { "" },
|
||||
match footer {
|
||||
Some(x) => x,
|
||||
None => "",
|
||||
}
|
||||
if !footer.is_empty() { "-- \r\n" } else { "" },
|
||||
footer
|
||||
);
|
||||
let text_part = build_body_text(&message_text);
|
||||
mailmime_smart_add_part(message, text_part);
|
||||
@@ -740,8 +711,8 @@ pub unsafe fn dc_mimefactory_render(
|
||||
let message_text2 = format!(
|
||||
"Reporting-UA: Delta Chat {}\r\nOriginal-Recipient: rfc822;{}\r\nFinal-Recipient: rfc822;{}\r\nOriginal-Message-ID: <{}>\r\nDisposition: manual-action/MDN-sent-automatically; displayed\r\n",
|
||||
version,
|
||||
as_str(factory.from_addr),
|
||||
as_str(factory.from_addr),
|
||||
factory.from_addr,
|
||||
factory.from_addr,
|
||||
factory.msg.rfc724_mid
|
||||
);
|
||||
|
||||
|
||||
@@ -49,15 +49,6 @@ pub unsafe fn dc_strdup(s: *const libc::c_char) -> *mut libc::c_char {
|
||||
ret
|
||||
}
|
||||
|
||||
/// Duplicates a string, returns null if given string is null
|
||||
pub(crate) unsafe fn dc_strdup_keep_null(s: *const libc::c_char) -> *mut libc::c_char {
|
||||
if !s.is_null() {
|
||||
dc_strdup(s)
|
||||
} else {
|
||||
ptr::null_mut()
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn dc_atoi_null_is_0(s: *const libc::c_char) -> libc::c_int {
|
||||
if !s.is_null() {
|
||||
as_str(s).parse().unwrap_or_default()
|
||||
|
||||
10
src/job.rs
10
src/job.rs
@@ -647,7 +647,7 @@ pub unsafe fn job_send_msg(context: &Context, msg_id: u32) -> libc::c_int {
|
||||
|
||||
/* load message data */
|
||||
let mimefactory = dc_mimefactory_load_msg(context, msg_id);
|
||||
if mimefactory.is_err() || mimefactory.as_ref().unwrap().from_addr.is_null() {
|
||||
if mimefactory.is_err() {
|
||||
warn!(
|
||||
context,
|
||||
"Cannot load data to send, maybe the message is deleted in between.",
|
||||
@@ -691,6 +691,7 @@ pub unsafe fn job_send_msg(context: &Context, msg_id: u32) -> libc::c_int {
|
||||
.unwrap_or_default()
|
||||
&& !mimefactory.out_encrypted
|
||||
{
|
||||
/* unrecoverable */
|
||||
warn!(
|
||||
context,
|
||||
"e2e encryption unavailable {} - {:?}",
|
||||
@@ -703,8 +704,8 @@ pub unsafe fn job_send_msg(context: &Context, msg_id: u32) -> libc::c_int {
|
||||
Some("End-to-end-encryption unavailable unexpectedly."),
|
||||
);
|
||||
} else {
|
||||
/* unrecoverable */
|
||||
if !clist_search_string_nocase(mimefactory.recipients_addr, mimefactory.from_addr) {
|
||||
let from_addr_c = mimefactory.from_addr.strdup();
|
||||
if !clist_search_string_nocase(mimefactory.recipients_addr, from_addr_c) {
|
||||
clist_insert_after(
|
||||
mimefactory.recipients_names,
|
||||
(*mimefactory.recipients_names).last,
|
||||
@@ -713,9 +714,10 @@ pub unsafe fn job_send_msg(context: &Context, msg_id: u32) -> libc::c_int {
|
||||
clist_insert_after(
|
||||
mimefactory.recipients_addr,
|
||||
(*mimefactory.recipients_addr).last,
|
||||
dc_strdup(mimefactory.from_addr) as *mut libc::c_void,
|
||||
mimefactory.from_addr.strdup().cast(),
|
||||
);
|
||||
}
|
||||
libc::free(from_addr_c.cast());
|
||||
if mimefactory.out_gossiped {
|
||||
chat::set_gossiped_timestamp(context, mimefactory.msg.chat_id, time());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user