refactor(message): rustiy api

This commit is contained in:
dignifiedquire
2019-09-21 10:47:13 +02:00
committed by holger krekel
parent 48d1de3678
commit 1265016a55
13 changed files with 629 additions and 665 deletions

View File

@@ -1172,7 +1172,7 @@ pub unsafe extern "C" fn dc_get_msg_info(
}
let ffi_context = &*context;
ffi_context
.with_inner(|ctx| message::dc_get_msg_info(ctx, msg_id))
.with_inner(|ctx| message::get_msg_info(ctx, msg_id))
.unwrap_or_else(|_| ptr::null_mut())
}
@@ -1187,7 +1187,7 @@ pub unsafe extern "C" fn dc_get_mime_headers(
}
let ffi_context = &*context;
ffi_context
.with_inner(|ctx| message::dc_get_mime_headers(ctx, msg_id))
.with_inner(|ctx| message::get_mime_headers(ctx, msg_id))
.unwrap_or_else(|_| ptr::null_mut())
}
@@ -1203,7 +1203,7 @@ pub unsafe extern "C" fn dc_delete_msgs(
}
let ffi_context = &*context;
ffi_context
.with_inner(|ctx| message::dc_delete_msgs(ctx, msg_ids, msg_cnt))
.with_inner(|ctx| message::delete_msgs(ctx, msg_ids, msg_cnt))
.unwrap_or(())
}
@@ -1252,7 +1252,7 @@ pub unsafe extern "C" fn dc_markseen_msgs(
}
let ffi_context = &*context;
ffi_context
.with_inner(|ctx| message::dc_markseen_msgs(ctx, msg_ids, msg_cnt as usize))
.with_inner(|ctx| message::markseen_msgs(ctx, msg_ids, msg_cnt as usize))
.ok();
}
@@ -1269,7 +1269,7 @@ pub unsafe extern "C" fn dc_star_msgs(
}
let ffi_context = &*context;
ffi_context
.with_inner(|ctx| message::dc_star_msgs(ctx, msg_ids, msg_cnt, star))
.with_inner(|ctx| message::star_msgs(ctx, msg_ids, msg_cnt, star))
.ok();
}
@@ -1282,7 +1282,7 @@ pub unsafe extern "C" fn dc_get_msg(context: *mut dc_context_t, msg_id: u32) ->
let ffi_context = &*context;
ffi_context
.with_inner(|ctx| {
let message = match message::dc_get_msg(ctx, msg_id) {
let message = match message::Message::load_from_db(ctx, msg_id) {
Ok(msg) => msg,
Err(e) => {
error!(ctx, "Error getting msg #{}: {}", msg_id, e);
@@ -2176,7 +2176,7 @@ pub unsafe extern "C" fn dc_msg_new(
let viewtype = from_prim(viewtype).expect(&format!("invalid viewtype = {}", viewtype));
let msg = MessageWrapper {
context,
message: message::dc_msg_new(viewtype),
message: message::Message::new(viewtype),
};
Box::into_raw(Box::new(msg))
}
@@ -2198,7 +2198,7 @@ pub unsafe extern "C" fn dc_msg_get_id(msg: *mut dc_msg_t) -> u32 {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_id(&ffi_msg.message)
ffi_msg.message.get_id()
}
#[no_mangle]
@@ -2208,7 +2208,7 @@ pub unsafe extern "C" fn dc_msg_get_from_id(msg: *mut dc_msg_t) -> u32 {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_from_id(&ffi_msg.message)
ffi_msg.message.get_from_id()
}
#[no_mangle]
@@ -2218,7 +2218,7 @@ pub unsafe extern "C" fn dc_msg_get_chat_id(msg: *mut dc_msg_t) -> u32 {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_chat_id(&ffi_msg.message)
ffi_msg.message.get_chat_id()
}
#[no_mangle]
@@ -2228,7 +2228,9 @@ pub unsafe extern "C" fn dc_msg_get_viewtype(msg: *mut dc_msg_t) -> libc::c_int
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_viewtype(&ffi_msg.message)
ffi_msg
.message
.get_viewtype()
.to_i64()
.expect("impossible: Viewtype -> i64 conversion failed") as libc::c_int
}
@@ -2240,7 +2242,7 @@ pub unsafe extern "C" fn dc_msg_get_state(msg: *mut dc_msg_t) -> libc::c_int {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_state(&ffi_msg.message) as libc::c_int
ffi_msg.message.get_state() as libc::c_int
}
#[no_mangle]
@@ -2250,7 +2252,7 @@ pub unsafe extern "C" fn dc_msg_get_timestamp(msg: *mut dc_msg_t) -> i64 {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_timestamp(&ffi_msg.message)
ffi_msg.message.get_timestamp()
}
#[no_mangle]
@@ -2260,7 +2262,7 @@ pub unsafe extern "C" fn dc_msg_get_received_timestamp(msg: *mut dc_msg_t) -> i6
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_received_timestamp(&ffi_msg.message)
ffi_msg.message.get_received_timestamp()
}
#[no_mangle]
@@ -2270,7 +2272,7 @@ pub unsafe extern "C" fn dc_msg_get_sort_timestamp(msg: *mut dc_msg_t) -> i64 {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_sort_timestamp(&ffi_msg.message)
ffi_msg.message.get_sort_timestamp()
}
#[no_mangle]
@@ -2280,7 +2282,7 @@ pub unsafe extern "C" fn dc_msg_get_text(msg: *mut dc_msg_t) -> *mut libc::c_cha
return dc_strdup(ptr::null());
}
let ffi_msg = &*msg;
message::dc_msg_get_text(&ffi_msg.message)
ffi_msg.message.get_text()
}
#[no_mangle]
@@ -2293,7 +2295,9 @@ pub unsafe extern "C" fn dc_msg_get_file(msg: *mut dc_msg_t) -> *mut libc::c_cha
let ffi_context = &*ffi_msg.context;
ffi_context
.with_inner(|ctx| {
message::dc_msg_get_file(ctx, &ffi_msg.message)
ffi_msg
.message
.get_file(ctx)
.and_then(|p| p.to_c_string().ok())
.map(|cs| dc_strdup(cs.as_ptr()))
.unwrap_or_else(|| "".strdup())
@@ -2308,7 +2312,7 @@ pub unsafe extern "C" fn dc_msg_get_filename(msg: *mut dc_msg_t) -> *mut libc::c
return dc_strdup(ptr::null());
}
let ffi_msg = &*msg;
message::dc_msg_get_filename(&ffi_msg.message)
ffi_msg.message.get_filename()
}
#[no_mangle]
@@ -2318,7 +2322,7 @@ pub unsafe extern "C" fn dc_msg_get_filemime(msg: *mut dc_msg_t) -> *mut libc::c
return dc_strdup(ptr::null());
}
let ffi_msg = &*msg;
message::dc_msg_get_filemime(&ffi_msg.message).strdup()
ffi_msg.message.get_filemime().strdup()
}
#[no_mangle]
@@ -2330,7 +2334,7 @@ pub unsafe extern "C" fn dc_msg_get_filebytes(msg: *mut dc_msg_t) -> u64 {
let ffi_msg = &*msg;
let ffi_context = &*ffi_msg.context;
ffi_context
.with_inner(|ctx| message::dc_msg_get_filebytes(ctx, &ffi_msg.message))
.with_inner(|ctx| ffi_msg.message.get_filebytes(ctx))
.unwrap_or(0)
}
@@ -2341,7 +2345,7 @@ pub unsafe extern "C" fn dc_msg_get_width(msg: *mut dc_msg_t) -> libc::c_int {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_width(&ffi_msg.message)
ffi_msg.message.get_width()
}
#[no_mangle]
@@ -2351,7 +2355,7 @@ pub unsafe extern "C" fn dc_msg_get_height(msg: *mut dc_msg_t) -> libc::c_int {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_height(&ffi_msg.message)
ffi_msg.message.get_height()
}
#[no_mangle]
@@ -2361,7 +2365,7 @@ pub unsafe extern "C" fn dc_msg_get_duration(msg: *mut dc_msg_t) -> libc::c_int
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_duration(&ffi_msg.message)
ffi_msg.message.get_duration()
}
#[no_mangle]
@@ -2371,7 +2375,7 @@ pub unsafe extern "C" fn dc_msg_get_showpadlock(msg: *mut dc_msg_t) -> libc::c_i
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_get_showpadlock(&ffi_msg.message) as libc::c_int
ffi_msg.message.get_showpadlock() as libc::c_int
}
#[no_mangle]
@@ -2393,7 +2397,7 @@ pub unsafe extern "C" fn dc_msg_get_summary(
let ffi_context = &*ffi_msg.context;
ffi_context
.with_inner(|ctx| {
let lot = message::dc_msg_get_summary(ctx, &mut ffi_msg.message, maybe_chat);
let lot = ffi_msg.message.get_summary(ctx, maybe_chat);
Box::into_raw(Box::new(lot))
})
.unwrap_or_else(|_| ptr::null_mut())
@@ -2412,11 +2416,9 @@ pub unsafe extern "C" fn dc_msg_get_summarytext(
let ffi_context = &*ffi_msg.context;
ffi_context
.with_inner(|ctx| {
message::dc_msg_get_summarytext(
ctx,
&mut ffi_msg.message,
approx_characters.try_into().unwrap(),
)
ffi_msg
.message
.get_summarytext(ctx, approx_characters.try_into().unwrap())
})
.unwrap_or_else(|_| "".strdup())
}
@@ -2428,7 +2430,7 @@ pub unsafe extern "C" fn dc_msg_has_deviating_timestamp(msg: *mut dc_msg_t) -> l
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_has_deviating_timestamp(&ffi_msg.message)
ffi_msg.message.has_deviating_timestamp()
}
#[no_mangle]
@@ -2438,7 +2440,7 @@ pub unsafe extern "C" fn dc_msg_has_location(msg: *mut dc_msg_t) -> libc::c_int
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_has_location(&ffi_msg.message) as libc::c_int
ffi_msg.message.has_location() as libc::c_int
}
#[no_mangle]
@@ -2448,7 +2450,7 @@ pub unsafe extern "C" fn dc_msg_is_sent(msg: *mut dc_msg_t) -> libc::c_int {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_is_sent(&ffi_msg.message).into()
ffi_msg.message.is_sent().into()
}
#[no_mangle]
@@ -2458,7 +2460,7 @@ pub unsafe extern "C" fn dc_msg_is_starred(msg: *mut dc_msg_t) -> libc::c_int {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_is_starred(&ffi_msg.message).into()
ffi_msg.message.is_starred().into()
}
#[no_mangle]
@@ -2468,7 +2470,7 @@ pub unsafe extern "C" fn dc_msg_is_forwarded(msg: *mut dc_msg_t) -> libc::c_int
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_is_forwarded(&ffi_msg.message).into()
ffi_msg.message.is_forwarded().into()
}
#[no_mangle]
@@ -2478,7 +2480,7 @@ pub unsafe extern "C" fn dc_msg_is_info(msg: *mut dc_msg_t) -> libc::c_int {
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_is_info(&ffi_msg.message).into()
ffi_msg.message.is_info().into()
}
#[no_mangle]
@@ -2488,7 +2490,7 @@ pub unsafe extern "C" fn dc_msg_is_increation(msg: *mut dc_msg_t) -> libc::c_int
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_is_increation(&ffi_msg.message).into()
ffi_msg.message.is_increation().into()
}
#[no_mangle]
@@ -2498,7 +2500,7 @@ pub unsafe extern "C" fn dc_msg_is_setupmessage(msg: *mut dc_msg_t) -> libc::c_i
return 0;
}
let ffi_msg = &*msg;
message::dc_msg_is_setupmessage(&ffi_msg.message).into()
ffi_msg.message.is_setupmessage().into()
}
#[no_mangle]
@@ -2510,7 +2512,7 @@ pub unsafe extern "C" fn dc_msg_get_setupcodebegin(msg: *mut dc_msg_t) -> *mut l
let ffi_msg = &*msg;
let ffi_context = &*ffi_msg.context;
ffi_context
.with_inner(|ctx| message::dc_msg_get_setupcodebegin(ctx, &ffi_msg.message))
.with_inner(|ctx| ffi_msg.message.get_setupcodebegin(ctx))
.unwrap_or_else(|_| "".strdup())
}
@@ -2522,7 +2524,7 @@ pub unsafe extern "C" fn dc_msg_set_text(msg: *mut dc_msg_t, text: *mut libc::c_
}
let ffi_msg = &mut *msg;
// TODO: {text} equal to NULL is treated as "", which is strange. Does anyone rely on it?
message::dc_msg_set_text(&mut ffi_msg.message, text)
ffi_msg.message.set_text(text)
}
#[no_mangle]
@@ -2536,7 +2538,7 @@ pub unsafe extern "C" fn dc_msg_set_file(
return;
}
let ffi_msg = &mut *msg;
message::dc_msg_set_file(&mut ffi_msg.message, file, filemime)
ffi_msg.message.set_file(file, filemime)
}
#[no_mangle]
@@ -2550,7 +2552,7 @@ pub unsafe extern "C" fn dc_msg_set_dimension(
return;
}
let ffi_msg = &mut *msg;
message::dc_msg_set_dimension(&mut ffi_msg.message, width, height)
ffi_msg.message.set_dimension(width, height)
}
#[no_mangle]
@@ -2560,7 +2562,7 @@ pub unsafe extern "C" fn dc_msg_set_duration(msg: *mut dc_msg_t, duration: libc:
return;
}
let ffi_msg = &mut *msg;
message::dc_msg_set_duration(&mut ffi_msg.message, duration)
ffi_msg.message.set_duration(duration)
}
#[no_mangle]
@@ -2574,7 +2576,7 @@ pub unsafe extern "C" fn dc_msg_set_location(
return;
}
let ffi_msg = &mut *msg;
message::dc_msg_set_location(&mut ffi_msg.message, latitude, longitude)
ffi_msg.message.set_location(latitude, longitude)
}
#[no_mangle]
@@ -2592,7 +2594,9 @@ pub unsafe extern "C" fn dc_msg_latefiling_mediasize(
let ffi_context = &*ffi_msg.context;
ffi_context
.with_inner(|ctx| {
message::dc_msg_latefiling_mediasize(ctx, &mut ffi_msg.message, width, height, duration)
ffi_msg
.message
.latefiling_mediasize(ctx, width, height, duration)
})
.ok();
}

View File

@@ -16,7 +16,7 @@ use deltachat::error::Error;
use deltachat::job::*;
use deltachat::location;
use deltachat::lot::LotState;
use deltachat::message::*;
use deltachat::message::{self, Message, MessageState};
use deltachat::peerstate::*;
use deltachat::qr::*;
use deltachat::sql;
@@ -216,44 +216,40 @@ unsafe fn poke_spec(context: &Context, spec: *const libc::c_char) -> libc::c_int
}
unsafe fn log_msg(context: &Context, prefix: impl AsRef<str>, msg: &Message) {
let contact = Contact::get_by_id(context, dc_msg_get_from_id(msg)).expect("invalid contact");
let contact = Contact::get_by_id(context, msg.get_from_id()).expect("invalid contact");
let contact_name = contact.get_name();
let contact_id = contact.get_id();
let statestr = match dc_msg_get_state(msg) {
let statestr = match msg.get_state() {
MessageState::OutPending => " o",
MessageState::OutDelivered => "",
MessageState::OutMdnRcvd => " √√",
MessageState::OutFailed => " !!",
_ => "",
};
let temp2 = dc_timestamp_to_str(dc_msg_get_timestamp(msg));
let msgtext = dc_msg_get_text(msg);
let temp2 = dc_timestamp_to_str(msg.get_timestamp());
let msgtext = msg.get_text();
info!(
context,
"{}#{}{}{}: {} (Contact#{}): {} {}{}{}{} [{}]",
prefix.as_ref(),
dc_msg_get_id(msg) as libc::c_int,
if dc_msg_get_showpadlock(msg) {
"🔒"
} else {
""
},
if dc_msg_has_location(msg) { "📍" } else { "" },
msg.get_id() as libc::c_int,
if msg.get_showpadlock() { "🔒" } else { "" },
if msg.has_location() { "📍" } else { "" },
&contact_name,
contact_id,
as_str(msgtext),
if dc_msg_is_starred(msg) { "" } else { "" },
if dc_msg_get_from_id(msg) == 1 as libc::c_uint {
if msg.is_starred() { "" } else { "" },
if msg.get_from_id() == 1 as libc::c_uint {
""
} else if dc_msg_get_state(msg) == MessageState::InSeen {
} else if msg.get_state() == MessageState::InSeen {
"[SEEN]"
} else if dc_msg_get_state(msg) == MessageState::InNoticed {
} else if msg.get_state() == MessageState::InNoticed {
"[NOTICED]"
} else {
"[FRESH]"
},
if dc_msg_is_info(msg) { "[INFO]" } else { "" },
if msg.is_info() { "[INFO]" } else { "" },
statestr,
&temp2,
);
@@ -278,7 +274,7 @@ unsafe fn log_msglist(context: &Context, msglist: &Vec<u32>) -> Result<(), Error
);
lines_out += 1
}
let msg = dc_get_msg(context, msg_id)?;
let msg = Message::load_from_db(context, msg_id)?;
log_msg(context, "Msg", &msg);
}
}
@@ -467,9 +463,9 @@ pub unsafe fn dc_cmdline(context: &Context, line: &str) -> Result<(), failure::E
"get-setupcodebegin" => {
ensure!(!arg1.is_empty(), "Argument <msg-id> missing.");
let msg_id: u32 = arg1.parse()?;
let msg = dc_get_msg(context, msg_id)?;
if dc_msg_is_setupmessage(&msg) {
let setupcodebegin = dc_msg_get_setupcodebegin(context, &msg);
let msg = Message::load_from_db(context, msg_id)?;
if msg.is_setupmessage() {
let setupcodebegin = msg.get_setupcodebegin(context);
println!(
"The setup code for setup message Msg#{} starts with: {}",
msg_id,
@@ -825,14 +821,14 @@ pub unsafe fn dc_cmdline(context: &Context, line: &str) -> Result<(), failure::E
ensure!(sel_chat.is_some(), "No chat selected.");
ensure!(!arg1.is_empty(), "No file given.");
let mut msg = dc_msg_new(if arg0 == "sendimage" {
let mut msg = Message::new(if arg0 == "sendimage" {
Viewtype::Image
} else {
Viewtype::File
});
dc_msg_set_file(&mut msg, arg1_c, ptr::null());
msg.set_file(arg1_c, ptr::null());
if !arg2.is_empty() {
dc_msg_set_text(&mut msg, arg2_c);
msg.set_text(arg2_c);
}
chat::send_msg(context, sel_chat.as_ref().unwrap().get_id(), &mut msg)?;
}
@@ -854,8 +850,8 @@ pub unsafe fn dc_cmdline(context: &Context, line: &str) -> Result<(), failure::E
ensure!(sel_chat.is_some(), "No chat selected.");
if !arg1.is_empty() {
let mut draft = dc_msg_new(Viewtype::Text);
dc_msg_set_text(&mut draft, arg1_c);
let mut draft = Message::new(Viewtype::Text);
draft.set_text(arg1_c);
chat::set_draft(
context,
sel_chat.as_ref().unwrap().get_id(),
@@ -904,7 +900,7 @@ pub unsafe fn dc_cmdline(context: &Context, line: &str) -> Result<(), failure::E
"msginfo" => {
ensure!(!arg1.is_empty(), "Argument <msg-id> missing.");
let id = arg1.parse()?;
let res = dc_get_msg_info(context, id);
let res = message::get_msg_info(context, id);
println!("{}", as_str(res));
}
"listfresh" => {
@@ -928,13 +924,13 @@ pub unsafe fn dc_cmdline(context: &Context, line: &str) -> Result<(), failure::E
ensure!(!arg1.is_empty(), "Argument <msg-id> missing.");
let mut msg_ids = [0; 1];
msg_ids[0] = arg1.parse()?;
dc_markseen_msgs(context, msg_ids.as_mut_ptr(), 1);
message::markseen_msgs(context, msg_ids.as_mut_ptr(), 1);
}
"star" | "unstar" => {
ensure!(!arg1.is_empty(), "Argument <msg-id> missing.");
let mut msg_ids = [0; 1];
msg_ids[0] = arg1.parse()?;
dc_star_msgs(
message::star_msgs(
context,
msg_ids.as_mut_ptr(),
1,
@@ -945,7 +941,7 @@ pub unsafe fn dc_cmdline(context: &Context, line: &str) -> Result<(), failure::E
ensure!(!arg1.is_empty(), "Argument <msg-id> missing.");
let mut ids = [0; 1];
ids[0] = arg1.parse()?;
dc_delete_msgs(context, ids.as_mut_ptr(), 1);
message::delete_msgs(context, ids.as_mut_ptr(), 1);
}
"listcontacts" | "contacts" | "listverified" => {
let contacts = Contact::get_all(

View File

@@ -11,7 +11,7 @@ use crate::dc_tools::*;
use crate::error::Error;
use crate::events::Event;
use crate::job::*;
use crate::message::*;
use crate::message::{self, Message, MessageState};
use crate::param::*;
use crate::sql::{self, Sql};
use crate::stock::StockMessage;
@@ -484,7 +484,7 @@ pub fn create_by_msg_id(context: &Context, msg_id: u32) -> Result<u32, Error> {
let mut chat_id = 0;
let mut send_event = false;
if let Ok(msg) = dc_msg_load_from_db(context, msg_id) {
if let Ok(msg) = Message::load_from_db(context, msg_id) {
if let Ok(chat) = Chat::load_from_db(context, msg.chat_id) {
if chat.id > DC_CHAT_ID_LAST_SPECIAL {
chat_id = chat.id;
@@ -691,13 +691,13 @@ fn prepare_msg_common(context: &Context, chat_id: u32, msg: &mut Message) -> Res
// - from FILE to AUDIO/VIDEO/IMAGE
// - from FILE/IMAGE to GIF */
if let Some((better_type, better_mime)) =
dc_msg_guess_msgtype_from_suffix(Path::new(&path_filename))
message::guess_msgtype_from_suffix(Path::new(&path_filename))
{
msg.type_0 = better_type;
msg.param.set(Param::MimeType, better_mime);
}
} else if !msg.param.exists(Param::MimeType) {
if let Some((_, mime)) = dc_msg_guess_msgtype_from_suffix(Path::new(&path_filename)) {
if let Some((_, mime)) = message::guess_msgtype_from_suffix(Path::new(&path_filename)) {
msg.param.set(Param::MimeType, mime);
}
}
@@ -783,7 +783,7 @@ pub fn send_msg(context: &Context, chat_id: u32, msg: &mut Message) -> Result<u3
chat_id == 0 || chat_id == msg.chat_id,
"Inconsistent chat ID"
);
dc_update_msg_state(context, msg.id, MessageState::OutPending);
message::update_msg_state(context, msg.id, MessageState::OutPending);
}
ensure!(
@@ -809,14 +809,14 @@ pub fn send_msg(context: &Context, chat_id: u32, msg: &mut Message) -> Result<u3
// avoid hanging if user tampers with db
break;
} else {
if let Ok(mut copy) = dc_get_msg(context, id as u32) {
if let Ok(mut copy) = Message::load_from_db(context, id as u32) {
// TODO: handle cleanup and return early instead
send_msg(context, 0, &mut copy).unwrap();
}
}
}
msg.param.remove(Param::PrepForwards);
dc_msg_save_param_to_disk(context, msg);
msg.save_param_to_disk(context);
}
}
@@ -834,7 +834,7 @@ pub unsafe fn send_text_msg(
chat_id
);
let mut msg = dc_msg_new(Viewtype::Text);
let mut msg = Message::new(Viewtype::Text);
msg.text = Some(text_to_send);
send_msg(context, chat_id, &mut msg)
}
@@ -861,7 +861,7 @@ pub unsafe fn set_draft(context: &Context, chat_id: u32, msg: Option<&mut Messag
fn maybe_delete_draft(context: &Context, chat_id: u32) -> bool {
let draft = get_draft_msg_id(context, chat_id);
if draft != 0 {
dc_delete_msg_from_db(context, draft);
Message::delete_from_db(context, draft);
return true;
}
false
@@ -881,7 +881,7 @@ fn do_set_draft(context: &Context, chat_id: u32, msg: &mut Message) -> bool {
_ => {
if let Some(path_filename) = msg.param.get(Param::File) {
let mut path_filename = path_filename.to_string();
if dc_msg_is_increation(msg) && !dc_is_blobdir_path(context, &path_filename) {
if msg.is_increation() && !dc_is_blobdir_path(context, &path_filename) {
return false;
}
if !dc_make_rel_and_copy(context, &mut path_filename) {
@@ -938,7 +938,7 @@ pub fn get_draft(context: &Context, chat_id: u32) -> Result<Option<Message>, Err
if draft_msg_id == 0 {
return Ok(None);
}
Ok(Some(dc_msg_load_from_db(context, draft_msg_id)?))
Ok(Some(Message::load_from_db(context, draft_msg_id)?))
}
pub fn get_chat_msgs(context: &Context, chat_id: u32, flags: u32, marker1before: u32) -> Vec<u32> {
@@ -1133,7 +1133,7 @@ pub unsafe fn get_next_media(
) -> u32 {
let mut ret = 0;
if let Ok(msg) = dc_msg_load_from_db(context, curr_msg_id) {
if let Ok(msg) = Message::load_from_db(context, curr_msg_id) {
let list = get_chat_media(
context,
msg.chat_id,
@@ -1301,8 +1301,8 @@ pub unsafe fn create_group_chat(
if chat_id != 0 {
if add_to_chat_contacts_table(context, chat_id, 1) {
let mut draft_msg = dc_msg_new(Viewtype::Text);
dc_msg_set_text(&mut draft_msg, draft_txt.as_ptr());
let mut draft_msg = Message::new(Viewtype::Text);
draft_msg.set_text(draft_txt.as_ptr());
set_draft_raw(context, chat_id, &mut draft_msg);
}
@@ -1347,7 +1347,7 @@ pub fn add_contact_to_chat_ex(
if contact.is_err() || chat_id <= DC_CHAT_ID_LAST_SPECIAL {
return false;
}
let mut msg = dc_msg_new_untyped();
let mut msg = Message::default();
reset_gossiped_timestamp(context, chat_id);
let contact = contact.unwrap();
@@ -1495,7 +1495,7 @@ pub unsafe fn remove_contact_from_chat(
"Cannot remove special contact"
);
let mut msg = dc_msg_new_untyped();
let mut msg = Message::default();
let mut success = false;
/* we do not check if "contact_id" exists but just delete all records with the id from chats_contacts */
@@ -1593,7 +1593,7 @@ pub unsafe fn set_chat_name(
ensure!(chat_id > DC_CHAT_ID_LAST_SPECIAL, "Invalid chat ID");
let chat = Chat::load_from_db(context, chat_id)?;
let mut msg = dc_msg_new_untyped();
let mut msg = Message::default();
if real_group_exists(context, chat_id) {
if &chat.name == new_name.as_ref() {
@@ -1682,7 +1682,7 @@ pub fn set_chat_profile_image(
chat.param.set(Param::ProfileImage, &new_image_rel);
if chat.update_param(context).is_ok() {
if chat.is_promoted() {
let mut msg = dc_msg_new_untyped();
let mut msg = Message::default();
msg.param
.set_int(Param::Cmd, SystemMessage::GroupImageChanged as i32);
msg.type_0 = Viewtype::Text;
@@ -1753,7 +1753,7 @@ pub unsafe fn forward_msgs(
for id in ids {
let src_msg_id = id;
let msg = dc_msg_load_from_db(context, src_msg_id as u32);
let msg = Message::load_from_db(context, src_msg_id as u32);
if msg.is_err() {
break;
}
@@ -1784,7 +1784,7 @@ pub unsafe fn forward_msgs(
msg.param.set(Param::PrepForwards, new_msg_id.to_string());
}
dc_msg_save_param_to_disk(context, &mut msg);
msg.save_param_to_disk(context);
msg.param = save_param;
} else {
msg.state = MessageState::OutPending;
@@ -1910,12 +1910,12 @@ mod tests {
unsafe {
let t = dummy_context();
let chat_id = create_by_contact_id(&t.ctx, DC_CONTACT_ID_SELF).unwrap();
let mut msg = dc_msg_new(Viewtype::Text);
dc_msg_set_text(&mut msg, b"hello\x00" as *const u8 as *const libc::c_char);
let mut msg = Message::new(Viewtype::Text);
msg.set_text(b"hello\x00" as *const u8 as *const libc::c_char);
set_draft(&t.ctx, chat_id, Some(&mut msg));
let draft = get_draft(&t.ctx, chat_id).unwrap().unwrap();
let msg_text = dc_msg_get_text(&msg);
let draft_text = dc_msg_get_text(&draft);
let msg_text = msg.get_text();
let draft_text = draft.get_text();
assert_eq!(as_str(msg_text), as_str(draft_text));
}
}

View File

@@ -4,7 +4,7 @@ use crate::contact::*;
use crate::context::*;
use crate::error::Result;
use crate::lot::Lot;
use crate::message::*;
use crate::message::Message;
use crate::stock::StockMessage;
/// An object representing a single chatlist in memory.
@@ -271,7 +271,7 @@ impl Chatlist {
let mut lastcontact = None;
let lastmsg = if 0 != lastmsg_id {
if let Ok(lastmsg) = dc_msg_load_from_db(context, lastmsg_id) {
if let Ok(lastmsg) = Message::load_from_db(context, lastmsg_id) {
if lastmsg.from_id != 1 as libc::c_uint
&& (chat.typ == Chattype::Group || chat.typ == Chattype::VerifiedGroup)
{

View File

@@ -16,7 +16,7 @@ use crate::job_thread::JobThread;
use crate::key::*;
use crate::login_param::LoginParam;
use crate::lot::Lot;
use crate::message::*;
use crate::message::{self, Message};
use crate::param::Params;
use crate::smtp::*;
use crate::sql::Sql;
@@ -144,8 +144,8 @@ impl Context {
let l2 = LoginParam::from_database(self, "configured_");
let displayname = self.sql.get_config(self, "displayname");
let chats = get_chat_cnt(self) as usize;
let real_msgs = dc_get_real_msg_cnt(self) as usize;
let deaddrop_msgs = dc_get_deaddrop_msg_cnt(self) as usize;
let real_msgs = message::get_real_msg_cnt(self) as usize;
let deaddrop_msgs = message::get_deaddrop_msg_cnt(self) as usize;
let contacts = Contact::get_real_cnt(self) as usize;
let is_configured = self
.sql
@@ -354,15 +354,15 @@ impl Context {
return;
}
if let Ok(msg) = dc_msg_new_load(self, msg_id) {
if dc_msg_is_setupmessage(&msg) {
if let Ok(msg) = Message::load_from_db(self, msg_id) {
if msg.is_setupmessage() {
// do not move setup messages;
// there may be a non-delta device that wants to handle it
return;
}
if self.is_mvbox(folder) {
dc_update_msg_move_state(self, &msg.rfc724_mid, MoveState::Stay);
message::update_msg_move_state(self, &msg.rfc724_mid, MoveState::Stay);
}
// 1 = dc message, 2 = reply to dc message
@@ -374,7 +374,7 @@ impl Context {
Params::new(),
0,
);
dc_update_msg_move_state(self, &msg.rfc724_mid, MoveState::Moving);
message::update_msg_move_state(self, &msg.rfc724_mid, MoveState::Moving);
}
}
}

View File

@@ -18,7 +18,7 @@ use crate::error::*;
use crate::events::Event;
use crate::job::*;
use crate::key::*;
use crate::message::*;
use crate::message::Message;
use crate::param::*;
use crate::pgp::*;
use crate::sql::{self, Sql};
@@ -127,7 +127,7 @@ pub unsafe fn dc_initiate_key_transfer(context: &Context) -> *mut libc::c_char {
dc_get_fine_path_filename(context, "$BLOBDIR", "autocrypt-setup-message.html");
if dc_write_file(context, &setup_file_name, setup_file_content.as_bytes()) {
if let Ok(chat_id) = chat::create_by_contact_id(context, 1) {
msg = dc_msg_new_untyped();
msg = Message::default();
msg.type_0 = Viewtype::File;
msg.param
.set(Param::File, setup_file_name.to_string_lossy());
@@ -157,8 +157,8 @@ pub unsafe fn dc_initiate_key_transfer(context: &Context) -> *mut libc::c_char {
break;
}
std::thread::sleep(std::time::Duration::from_secs(1));
if let Ok(msg) = dc_get_msg(context, msg_id) {
if dc_msg_is_sent(&msg) {
if let Ok(msg) = Message::load_from_db(context, msg_id) {
if msg.is_sent() {
info!(context, "... setup message sent.",);
break;
}
@@ -264,18 +264,18 @@ pub unsafe fn dc_continue_key_transfer(
return false;
}
let msg = dc_get_msg(context, msg_id);
let msg = Message::load_from_db(context, msg_id);
if msg.is_err() {
error!(context, "Message is no Autocrypt Setup Message.");
return false;
}
let msg = msg.unwrap();
if !dc_msg_is_setupmessage(&msg) {
if !msg.is_setupmessage() {
error!(context, "Message is no Autocrypt Setup Message.");
return false;
}
if let Some(filename) = dc_msg_get_file(context, &msg) {
if let Some(filename) = msg.get_file(context) {
if let Some(buf) = dc_read_file_safe(context, filename) {
norm_sc = dc_normalize_setup_code(context, setup_code);
if norm_sc.is_null() {

View File

@@ -22,7 +22,7 @@ use crate::dc_tools::*;
use crate::e2ee::*;
use crate::error::Error;
use crate::location;
use crate::message::*;
use crate::message::{self, Message};
use crate::param::*;
use crate::stock::StockMessage;
use crate::x::*;
@@ -115,7 +115,7 @@ pub unsafe fn dc_mimefactory_load_msg(
) -> Result<MimeFactory, Error> {
ensure!(msg_id > DC_CHAT_ID_LAST_SPECIAL, "Invalid chat id");
let msg = dc_msg_load_from_db(context, msg_id)?;
let msg = Message::load_from_db(context, msg_id)?;
let chat = Chat::load_from_db(context, msg.chat_id)?;
let mut factory = MimeFactory::new(context, msg);
factory.chat = Some(chat);
@@ -239,7 +239,7 @@ pub unsafe fn dc_mimefactory_load_msg(
factory.loaded = Loaded::Message;
factory.timestamp = factory.msg.timestamp_sort;
factory.rfc724_mid = factory.msg.rfc724_mid.clone();
factory.increation = dc_msg_is_increation(&factory.msg);
factory.increation = factory.msg.is_increation();
Ok(factory)
}
@@ -285,7 +285,7 @@ pub unsafe fn dc_mimefactory_load_mdn<'a>(
bail!("MDNs disabled ")
}
let msg = dc_msg_load_from_db(context, msg_id)?;
let msg = Message::load_from_db(context, msg_id)?;
let mut factory = MimeFactory::new(context, msg);
let contact = Contact::load_from_db(factory.context, factory.msg.from_id)?;
@@ -705,7 +705,7 @@ pub unsafe fn dc_mimefactory_render(context: &Context, factory: &mut MimeFactory
if let Some(grpimage) = grpimage {
info!(factory.context, "setting group image '{}'", grpimage);
let mut meta = dc_msg_new_untyped();
let mut meta = Message::default();
meta.type_0 = Viewtype::Image;
meta.param.set(Param::File, grpimage);
@@ -917,7 +917,7 @@ pub unsafe fn dc_mimefactory_render(context: &Context, factory: &mut MimeFactory
.stock_str(StockMessage::EncryptedMsg)
.into_owned()
} else {
to_string(dc_msg_get_summarytext(context, &mut factory.msg, 32))
to_string(factory.msg.get_summarytext(context, 32))
};
let p2 = factory
.context
@@ -1040,7 +1040,7 @@ unsafe fn get_subject(
let ret: *mut libc::c_char;
let raw_subject =
dc_msg_get_summarytext_by_raw(msg.type_0, msg.text.as_ref(), &mut msg.param, 32, context);
message::get_summarytext_by_raw(msg.type_0, msg.text.as_ref(), &mut msg.param, 32, context);
let fwd = if 0 != afwd_email { "Fwd: " } else { "" };
if msg.param.get_cmd() == SystemMessage::AutocryptSetupMessage {

View File

@@ -22,7 +22,7 @@ use crate::error::Result;
use crate::events::Event;
use crate::job::*;
use crate::location;
use crate::message::*;
use crate::message::{self, MessageState};
use crate::param::*;
use crate::peerstate::*;
use crate::securejoin::handle_securejoin_handshake;
@@ -354,14 +354,14 @@ unsafe fn add_parts(
let mut old_server_folder = std::ptr::null_mut();
let mut old_server_uid = 0;
if 0 != dc_rfc724_mid_exists(
if 0 != message::rfc724_mid_exists(
context,
&rfc724_mid,
&mut old_server_folder,
&mut old_server_uid,
) {
if as_str(old_server_folder) != server_folder.as_ref() || old_server_uid != server_uid {
dc_update_server_uid(context, &rfc724_mid, server_folder.as_ref(), server_uid);
message::update_server_uid(context, &rfc724_mid, server_folder.as_ref(), server_uid);
}
free(old_server_folder.cast());
@@ -840,7 +840,7 @@ unsafe fn handle_reports(
let mut chat_id_0 = 0;
let mut msg_id = 0;
if 0 != dc_mdn_from_ext(
if 0 != message::mdn_from_ext(
context,
from_id,
as_str(rfc724_mid_0),

View File

@@ -13,7 +13,7 @@ use crate::dc_tools::*;
use crate::events::Event;
use crate::job::{job_add, Action};
use crate::login_param::LoginParam;
use crate::message::{dc_rfc724_mid_exists, dc_update_msg_move_state, dc_update_server_uid};
use crate::message::{self, update_msg_move_state, update_server_uid};
use crate::oauth2::dc_get_oauth2_access_token;
use crate::param::Params;
@@ -1652,7 +1652,7 @@ unsafe fn precheck_imf(
let mut old_server_folder: *mut libc::c_char = ptr::null_mut();
let mut old_server_uid: u32 = 0i32 as u32;
let mut mark_seen: libc::c_int = 0i32;
msg_id = dc_rfc724_mid_exists(
msg_id = message::rfc724_mid_exists(
context,
&rfc724_mid,
&mut old_server_folder,
@@ -1667,10 +1667,10 @@ unsafe fn precheck_imf(
mark_seen = 1i32
} else if as_str(old_server_folder) != server_folder {
info!(context, "[move] detected moved message {}", rfc724_mid,);
dc_update_msg_move_state(context, &rfc724_mid, MoveState::Stay);
update_msg_move_state(context, &rfc724_mid, MoveState::Stay);
}
if as_str(old_server_folder) != server_folder || old_server_uid != server_uid {
dc_update_server_uid(context, &rfc724_mid, server_folder, server_uid);
update_server_uid(context, &rfc724_mid, server_folder, server_uid);
}
context.do_heuristics_moves(server_folder, msg_id);
if 0 != mark_seen {

View File

@@ -16,7 +16,7 @@ use crate::events::Event;
use crate::imap::*;
use crate::location;
use crate::login_param::LoginParam;
use crate::message::*;
use crate::message::{self, Message, MessageState};
use crate::param::*;
use crate::sql;
use crate::x::*;
@@ -156,7 +156,7 @@ impl Job {
/* if there is a msg-id and it does not exist in the db, cancel sending.
this happends if dc_delete_msgs() was called
before the generated mime was sent out */
if 0 != self.foreign_id && !dc_msg_exists(context, self.foreign_id) {
if 0 != self.foreign_id && !message::exists(context, self.foreign_id) {
warn!(
context,
"Message {} for job {} does not exist", self.foreign_id, self.job_id,
@@ -175,7 +175,7 @@ impl Job {
} else {
dc_delete_file(context, filename);
if 0 != self.foreign_id {
dc_update_msg_state(
message::update_msg_state(
context,
self.foreign_id,
MessageState::OutDelivered,
@@ -226,7 +226,7 @@ impl Job {
ok_to_continue = true;
}
if ok_to_continue {
if let Ok(msg) = dc_msg_load_from_db(context, self.foreign_id) {
if let Ok(msg) = Message::load_from_db(context, self.foreign_id) {
if context
.sql
.get_config_int(context, "folders_configured")
@@ -251,7 +251,12 @@ impl Job {
self.try_again_later(3i32, None);
}
ImapResult::Success => {
dc_update_server_uid(context, &msg.rfc724_mid, &dest_folder, dest_uid);
message::update_server_uid(
context,
&msg.rfc724_mid,
&dest_folder,
dest_uid,
);
}
ImapResult::Failed | ImapResult::AlreadyDone => {}
}
@@ -265,11 +270,11 @@ impl Job {
let mut delete_from_server = 1;
let inbox = context.inbox.read().unwrap();
if let Ok(mut msg) = dc_msg_load_from_db(context, self.foreign_id) {
if let Ok(mut msg) = Message::load_from_db(context, self.foreign_id) {
if !msg.rfc724_mid.is_empty() {
let ok_to_continue1;
/* eg. device messages have no Message-ID */
if dc_rfc724_mid_cnt(context, &msg.rfc724_mid) != 1 {
if message::rfc724_mid_cnt(context, &msg.rfc724_mid) != 1 {
info!(
context,
"The message is deleted from the server when all parts are deleted.",
@@ -307,7 +312,7 @@ impl Job {
ok_to_continue1 = true;
}
if ok_to_continue1 {
dc_delete_msg_from_db(context, msg.id);
Message::delete_from_db(context, msg.id);
}
}
}
@@ -330,7 +335,7 @@ impl Job {
ok_to_continue = true;
}
if ok_to_continue {
if let Ok(msg) = dc_msg_load_from_db(context, self.foreign_id) {
if let Ok(msg) = Message::load_from_db(context, self.foreign_id) {
let server_folder = msg.server_folder.as_ref().unwrap();
match inbox.set_seen(context, server_folder, msg.server_uid) {
ImapResult::Failed => {}
@@ -671,13 +676,13 @@ pub unsafe fn job_send_msg(context: &Context, msg_id: u32) -> libc::c_int {
mimefactory.msg.param.set_int(Param::Height, height as i32);
}
}
dc_msg_save_param_to_disk(context, &mut mimefactory.msg);
mimefactory.msg.save_param_to_disk(context);
}
}
}
/* create message */
if !dc_mimefactory_render(context, &mut mimefactory) {
dc_set_msg_failed(context, msg_id, as_opt_str(mimefactory.error));
message::set_msg_failed(context, msg_id, as_opt_str(mimefactory.error));
} else if 0
!= mimefactory
.msg
@@ -692,7 +697,7 @@ pub unsafe fn job_send_msg(context: &Context, msg_id: u32) -> libc::c_int {
msg_id,
mimefactory.msg.param.get_int(Param::GuranteeE2ee),
);
dc_set_msg_failed(
message::set_msg_failed(
context,
msg_id,
Some("End-to-end-encryption unavailable unexpectedly."),
@@ -739,7 +744,7 @@ pub unsafe fn job_send_msg(context: &Context, msg_id: u32) -> libc::c_int {
== 0
{
mimefactory.msg.param.set_int(Param::GuranteeE2ee, 1);
dc_msg_save_param_to_disk(context, &mut mimefactory.msg);
mimefactory.msg.save_param_to_disk(context);
}
success = add_smtp_job(context, Action::SendMsgToSmtp, &mut mimefactory);
}
@@ -940,7 +945,7 @@ fn job_perform(context: &Context, thread: Thread, probe_network: bool) {
}
} else {
if job.action == Action::SendMsgToSmtp {
dc_set_msg_failed(context, job.foreign_id, job.pending_error.as_ref());
message::set_msg_failed(context, job.foreign_id, job.pending_error.as_ref());
}
job.delete(context);
}

View File

@@ -9,7 +9,7 @@ use crate::dc_tools::*;
use crate::error::Error;
use crate::events::Event;
use crate::job::*;
use crate::message::*;
use crate::message::Message;
use crate::param::*;
use crate::sql;
use crate::stock::StockMessage;
@@ -214,7 +214,7 @@ pub fn send_locations_to_chat(context: &Context, chat_id: u32, seconds: i64) {
.is_ok()
{
if 0 != seconds && !is_sending_locations_before {
msg = dc_msg_new(Viewtype::Text);
msg = Message::new(Viewtype::Text);
msg.text =
Some(context.stock_system_msg(StockMessage::MsgLocationEnabled, "", "", 0));
msg.param.set_int(Param::Cmd, 8);
@@ -601,7 +601,7 @@ pub fn job_do_DC_JOB_MAYBE_SEND_LOCATIONS(context: &Context, _job: &Job) {
// the easiest way to determine this, is to check for an empty message queue.
// (might not be 100%, however, as positions are sent combined later
// and dc_set_location() is typically called periodically, this is ok)
let mut msg = dc_msg_new(Viewtype::Text);
let mut msg = Message::new(Viewtype::Text);
msg.hidden = true;
msg.param.set_int(Param::Cmd, 9);
Some((chat_id, msg))

File diff suppressed because it is too large Load Diff

View File

@@ -13,7 +13,7 @@ use crate::error::Error;
use crate::events::Event;
use crate::key::*;
use crate::lot::LotState;
use crate::message::*;
use crate::message::Message;
use crate::param::*;
use crate::peerstate::*;
use crate::qr::check_qr;
@@ -266,7 +266,7 @@ fn send_handshake_msg(
fingerprint: Option<String>,
grpid: impl AsRef<str>,
) {
let mut msg = dc_msg_new_untyped();
let mut msg = Message::default();
msg.type_0 = Viewtype::Text;
msg.text = Some(format!("Secure-Join: {}", step));
msg.hidden = true;