From 24d9345ea0bf5de34522cb4545b4f29283548fe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kl=C3=A4hn?= Date: Sat, 10 Sep 2022 19:27:20 +0200 Subject: [PATCH] add delete event for webxdc --- deltachat-ffi/src/lib.rs | 4 ++++ src/events.rs | 5 +++++ src/message.rs | 3 +++ src/webxdc.rs | 15 +++++++++++++++ 4 files changed, 27 insertions(+) diff --git a/deltachat-ffi/src/lib.rs b/deltachat-ffi/src/lib.rs index e85d93957..b0c79511e 100644 --- a/deltachat-ffi/src/lib.rs +++ b/deltachat-ffi/src/lib.rs @@ -504,6 +504,7 @@ pub unsafe extern "C" fn dc_event_get_id(event: *mut dc_event_t) -> libc::c_int EventType::ConnectivityChanged => 2100, EventType::SelfavatarChanged => 2110, EventType::WebxdcStatusUpdate { .. } => 2120, + EventType::WebXdInstanceDeleted { .. } => 2121, } } @@ -550,6 +551,7 @@ pub unsafe extern "C" fn dc_event_get_data1_int(event: *mut dc_event_t) -> libc: contact_id.to_u32() as libc::c_int } EventType::WebxdcStatusUpdate { msg_id, .. } => msg_id.to_u32() as libc::c_int, + EventType::WebXdInstanceDeleted { msg_id, .. } => msg_id.to_u32() as libc::c_int, } } @@ -581,6 +583,7 @@ pub unsafe extern "C" fn dc_event_get_data2_int(event: *mut dc_event_t) -> libc: | EventType::ImexFileWritten(_) | EventType::MsgsNoticed(_) | EventType::ConnectivityChanged + | EventType::WebXdInstanceDeleted { .. } | EventType::SelfavatarChanged => 0, EventType::ChatModified(_) => 0, EventType::MsgsChanged { msg_id, .. } @@ -637,6 +640,7 @@ pub unsafe extern "C" fn dc_event_get_data2_str(event: *mut dc_event_t) -> *mut | EventType::ConnectivityChanged | EventType::SelfavatarChanged | EventType::WebxdcStatusUpdate { .. } + | EventType::WebXdInstanceDeleted { .. } | EventType::ChatEphemeralTimerModified { .. } => ptr::null_mut(), EventType::ConfigureProgress { comment, .. } => { if let Some(comment) = comment { diff --git a/src/events.rs b/src/events.rs index 17d70e294..02a35fdca 100644 --- a/src/events.rs +++ b/src/events.rs @@ -302,4 +302,9 @@ pub enum EventType { msg_id: MsgId, status_update_serial: StatusUpdateSerial, }, + + /// Inform that an instance cointaining a webxdc has been deleted + WebXdInstanceDeleted { + msg_id: MsgId, + }, } diff --git a/src/message.rs b/src/message.rs index 346ece3f5..fe77ee998 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1236,6 +1236,9 @@ pub async fn delete_msgs(context: &Context, msg_ids: &[MsgId]) -> Result<()> { .trash(context) .await .with_context(|| format!("Unable to trash message {}", msg_id))?; + + context.emit_event(EventType::WebXdInstanceDeleted { msg_id: *msg_id }); + context .sql .execute( diff --git a/src/webxdc.rs b/src/webxdc.rs index d812bf501..76b8b9e5e 100644 --- a/src/webxdc.rs +++ b/src/webxdc.rs @@ -753,6 +753,7 @@ mod tests { use crate::chatlist::Chatlist; use crate::config::Config; use crate::contact::Contact; + use crate::message; use crate::receive_imf::{receive_imf, receive_imf_inner}; use crate::test_utils::TestContext; @@ -2377,4 +2378,18 @@ sth_for_the = "future""# ); Ok(()) } + + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn test_webxdc_delete_event() -> Result<()> { + let alice = TestContext::new_alice().await; + let chat_id = create_group_chat(&alice, ProtectionStatus::Unprotected, "foo").await?; + let instance = send_webxdc_instance(&alice, chat_id).await?; + //let msg_id = alice.pop_sent_msg().await; + message::delete_msgs(&alice, &[instance.id]).await?; + alice + .evtracker + .get_matching(|evt| matches!(evt, EventType::WebXdInstanceDeleted { .. })) + .await; + Ok(()) + } }