mirror of
https://github.com/chatmail/core.git
synced 2026-05-07 17:06:35 +03:00
unify events
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user