unify events

This commit is contained in:
dignifiedquire
2020-08-10 10:32:48 +02:00
parent 4bdcdbb922
commit 1ae49c1fca
26 changed files with 294 additions and 287 deletions

View File

@@ -76,13 +76,17 @@ pub unsafe extern "C" fn dc_context_new(
};
let ctx = if blobdir.is_null() || *blobdir == 0 {
block_on(Context::new(os_name, as_path(dbfile).to_path_buf().into()))
} else {
block_on(Context::with_blobdir(
use rand::Rng;
// generate random ID as this functionality is not yet available on the C-api.
let id = rand::thread_rng().gen();
block_on(Context::new(
os_name,
as_path(dbfile).to_path_buf().into(),
as_path(blobdir).to_path_buf().into(),
id,
))
} else {
eprintln!("blobdir can not be defined explicitly anymore");
return ptr::null_mut();
};
match ctx {
Ok(ctx) => Box::into_raw(Box::new(ctx)),
@@ -333,38 +337,38 @@ pub unsafe extern "C" fn dc_event_get_data1_int(event: *mut dc_event_t) -> libc:
return 0;
}
let event = &*event;
let event = &(*event).typ;
match event {
Event::Info(_)
| Event::SmtpConnected(_)
| Event::ImapConnected(_)
| Event::SmtpMessageSent(_)
| Event::ImapMessageDeleted(_)
| Event::ImapMessageMoved(_)
| Event::ImapFolderEmptied(_)
| Event::NewBlobFile(_)
| Event::DeletedBlobFile(_)
| Event::Warning(_)
| Event::Error(_)
| Event::ErrorNetwork(_)
| Event::ErrorSelfNotInGroup(_) => 0,
Event::MsgsChanged { chat_id, .. }
| Event::IncomingMsg { chat_id, .. }
| Event::MsgDelivered { chat_id, .. }
| Event::MsgFailed { chat_id, .. }
| Event::MsgRead { chat_id, .. }
| Event::ChatModified(chat_id)
| Event::ChatEphemeralTimerModified { chat_id, .. } => chat_id.to_u32() as libc::c_int,
Event::ContactsChanged(id) | Event::LocationChanged(id) => {
EventType::Info(_)
| EventType::SmtpConnected(_)
| EventType::ImapConnected(_)
| EventType::SmtpMessageSent(_)
| EventType::ImapMessageDeleted(_)
| EventType::ImapMessageMoved(_)
| EventType::ImapFolderEmptied(_)
| EventType::NewBlobFile(_)
| EventType::DeletedBlobFile(_)
| EventType::Warning(_)
| EventType::Error(_)
| EventType::ErrorNetwork(_)
| EventType::ErrorSelfNotInGroup(_) => 0,
EventType::MsgsChanged { chat_id, .. }
| EventType::IncomingMsg { chat_id, .. }
| EventType::MsgDelivered { chat_id, .. }
| EventType::MsgFailed { chat_id, .. }
| EventType::MsgRead { chat_id, .. }
| EventType::ChatModified(chat_id)
| EventType::ChatEphemeralTimerModified { chat_id, .. } => chat_id.to_u32() as libc::c_int,
EventType::ContactsChanged(id) | EventType::LocationChanged(id) => {
let id = id.unwrap_or_default();
id as libc::c_int
}
Event::ConfigureProgress(progress) | Event::ImexProgress(progress) => {
EventType::ConfigureProgress(progress) | EventType::ImexProgress(progress) => {
*progress as libc::c_int
}
Event::ImexFileWritten(_) => 0,
Event::SecurejoinInviterProgress { contact_id, .. }
| Event::SecurejoinJoinerProgress { contact_id, .. } => *contact_id as libc::c_int,
EventType::ImexFileWritten(_) => 0,
EventType::SecurejoinInviterProgress { contact_id, .. }
| EventType::SecurejoinJoinerProgress { contact_id, .. } => *contact_id as libc::c_int,
}
}
@@ -375,36 +379,36 @@ pub unsafe extern "C" fn dc_event_get_data2_int(event: *mut dc_event_t) -> libc:
return 0;
}
let event = &*event;
let event = &(*event).typ;
match event {
Event::Info(_)
| Event::SmtpConnected(_)
| Event::ImapConnected(_)
| Event::SmtpMessageSent(_)
| Event::ImapMessageDeleted(_)
| Event::ImapMessageMoved(_)
| Event::ImapFolderEmptied(_)
| Event::NewBlobFile(_)
| Event::DeletedBlobFile(_)
| Event::Warning(_)
| Event::Error(_)
| Event::ErrorNetwork(_)
| Event::ErrorSelfNotInGroup(_)
| Event::ContactsChanged(_)
| Event::LocationChanged(_)
| Event::ConfigureProgress(_)
| Event::ImexProgress(_)
| Event::ImexFileWritten(_)
| Event::ChatModified(_) => 0,
Event::MsgsChanged { msg_id, .. }
| Event::IncomingMsg { msg_id, .. }
| Event::MsgDelivered { msg_id, .. }
| Event::MsgFailed { msg_id, .. }
| Event::MsgRead { msg_id, .. } => msg_id.to_u32() as libc::c_int,
Event::SecurejoinInviterProgress { progress, .. }
| Event::SecurejoinJoinerProgress { progress, .. } => *progress as libc::c_int,
Event::ChatEphemeralTimerModified { timer, .. } => timer.to_u32() as libc::c_int,
EventType::Info(_)
| EventType::SmtpConnected(_)
| EventType::ImapConnected(_)
| EventType::SmtpMessageSent(_)
| EventType::ImapMessageDeleted(_)
| EventType::ImapMessageMoved(_)
| EventType::ImapFolderEmptied(_)
| EventType::NewBlobFile(_)
| EventType::DeletedBlobFile(_)
| EventType::Warning(_)
| EventType::Error(_)
| EventType::ErrorNetwork(_)
| EventType::ErrorSelfNotInGroup(_)
| EventType::ContactsChanged(_)
| EventType::LocationChanged(_)
| EventType::ConfigureProgress(_)
| EventType::ImexProgress(_)
| EventType::ImexFileWritten(_)
| EventType::ChatModified(_) => 0,
EventType::MsgsChanged { msg_id, .. }
| EventType::IncomingMsg { msg_id, .. }
| EventType::MsgDelivered { msg_id, .. }
| EventType::MsgFailed { msg_id, .. }
| EventType::MsgRead { msg_id, .. } => msg_id.to_u32() as libc::c_int,
EventType::SecurejoinInviterProgress { progress, .. }
| EventType::SecurejoinJoinerProgress { progress, .. } => *progress as libc::c_int,
EventType::ChatEphemeralTimerModified { timer, .. } => timer.to_u32() as libc::c_int,
}
}
@@ -415,45 +419,55 @@ pub unsafe extern "C" fn dc_event_get_data2_str(event: *mut dc_event_t) -> *mut
return ptr::null_mut();
}
let event = &*event;
let event = &(*event).typ;
match event {
Event::Info(msg)
| Event::SmtpConnected(msg)
| Event::ImapConnected(msg)
| Event::SmtpMessageSent(msg)
| Event::ImapMessageDeleted(msg)
| Event::ImapMessageMoved(msg)
| Event::ImapFolderEmptied(msg)
| Event::NewBlobFile(msg)
| Event::DeletedBlobFile(msg)
| Event::Warning(msg)
| Event::Error(msg)
| Event::ErrorNetwork(msg)
| Event::ErrorSelfNotInGroup(msg) => {
EventType::Info(msg)
| EventType::SmtpConnected(msg)
| EventType::ImapConnected(msg)
| EventType::SmtpMessageSent(msg)
| EventType::ImapMessageDeleted(msg)
| EventType::ImapMessageMoved(msg)
| EventType::ImapFolderEmptied(msg)
| EventType::NewBlobFile(msg)
| EventType::DeletedBlobFile(msg)
| EventType::Warning(msg)
| EventType::Error(msg)
| EventType::ErrorNetwork(msg)
| EventType::ErrorSelfNotInGroup(msg) => {
let data2 = msg.to_c_string().unwrap_or_default();
data2.into_raw()
}
Event::MsgsChanged { .. }
| Event::IncomingMsg { .. }
| Event::MsgDelivered { .. }
| Event::MsgFailed { .. }
| Event::MsgRead { .. }
| Event::ChatModified(_)
| Event::ContactsChanged(_)
| Event::LocationChanged(_)
| Event::ConfigureProgress(_)
| Event::ImexProgress(_)
| Event::SecurejoinInviterProgress { .. }
| Event::SecurejoinJoinerProgress { .. }
| Event::ChatEphemeralTimerModified { .. } => ptr::null_mut(),
Event::ImexFileWritten(file) => {
EventType::MsgsChanged { .. }
| EventType::IncomingMsg { .. }
| EventType::MsgDelivered { .. }
| EventType::MsgFailed { .. }
| EventType::MsgRead { .. }
| EventType::ChatModified(_)
| EventType::ContactsChanged(_)
| EventType::LocationChanged(_)
| EventType::ConfigureProgress(_)
| EventType::ImexProgress(_)
| EventType::SecurejoinInviterProgress { .. }
| EventType::SecurejoinJoinerProgress { .. }
| EventType::ChatEphemeralTimerModified { .. } => ptr::null_mut(),
EventType::ImexFileWritten(file) => {
let data2 = file.to_c_string().unwrap_or_default();
data2.into_raw()
}
}
}
#[no_mangle]
pub unsafe extern "C" fn dc_event_get_account_id(event: *mut dc_event_t) -> u32 {
if event.is_null() {
eprintln!("ignoring careless call to dc_event_get_account_id()");
return 0;
}
(*event).id
}
#[no_mangle]
pub type dc_event_emitter_t = EventEmitter;
@@ -3570,71 +3584,16 @@ pub unsafe extern "C" fn dc_accounts_event_emitter_unref(
}
#[no_mangle]
pub type dc_accounts_event_t = deltachat::accounts::Event;
#[no_mangle]
pub unsafe extern "C" fn dc_accounts_event_unref(a: *mut dc_accounts_event_t) {
if a.is_null() {
eprintln!("ignoring careless call to dc_accounts_event_unref()");
return;
}
let _ = Box::from_raw(a);
}
#[no_mangle]
pub unsafe extern "C" fn dc_accounts_event_get_id(event: *mut dc_accounts_event_t) -> libc::c_int {
if event.is_null() {
eprintln!("ignoring careless call to dc_accounts_event_get_id()");
return 0;
}
let event = &*event;
event.event.as_id()
}
#[no_mangle]
pub unsafe extern "C" fn dc_accounts_event_get_data1_int(
event: *mut dc_accounts_event_t,
) -> libc::c_int {
if event.is_null() {
eprintln!("ignoring careless call to dc_accounts_event_get_data1_int()");
return 0;
}
dc_event_get_data1_int(&mut (*event).event)
}
#[no_mangle]
pub unsafe extern "C" fn dc_accounts_event_get_data2_int(
event: *mut dc_accounts_event_t,
) -> libc::c_int {
if event.is_null() {
eprintln!("ignoring careless call to dc_accounts_event_get_data2_int()");
return 0;
}
dc_event_get_data2_int(&mut (*event).event)
}
#[no_mangle]
pub unsafe extern "C" fn dc_accounts_event_get_data2_str(
event: *mut dc_accounts_event_t,
) -> *mut libc::c_char {
if event.is_null() {
eprintln!("ignoring careless call to dc_accounts_event_get_data2_str()");
pub unsafe extern "C" fn dc_accounts_get_next_event(
emitter: *mut dc_accounts_event_emitter_t,
) -> *mut dc_event_t {
if emitter.is_null() {
return ptr::null_mut();
}
let emitter = &*emitter;
dc_event_get_data2_str(&mut (*event).event)
}
#[no_mangle]
pub unsafe extern "C" fn dc_accounts_event_get_account_id(event: *mut dc_accounts_event_t) -> u32 {
if event.is_null() {
eprintln!("ignoring careless call to dc_accounts_event_get_account_id()");
return 0;
}
(*event).id
emitter
.recv_sync()
.map(|ev| Box::into_raw(Box::new(ev)))
.unwrap_or_else(ptr::null_mut)
}