feat: add chat-deleted event

This commit is contained in:
B. Petersen
2025-03-05 23:05:07 +01:00
committed by bjoern
parent d6209e08e6
commit 9a915b2a95
5 changed files with 33 additions and 1 deletions

View File

@@ -6314,6 +6314,18 @@ void dc_event_unref(dc_event_t* event);
#define DC_EVENT_CHAT_EPHEMERAL_TIMER_MODIFIED 2021 #define DC_EVENT_CHAT_EPHEMERAL_TIMER_MODIFIED 2021
/**
* Chat was deleted.
* This event is emitted in response to dc_delete_chat()
* called on this or another device.
* The event is a good place to remove notifications or homescreen shortcuts.
*
* @param data1 (int) chat_id
* @param data2 (int) 0
*/
#define DC_EVENT_CHAT_DELETED 2023
/** /**
* Contact(s) created, renamed, verified, blocked or deleted. * Contact(s) created, renamed, verified, blocked or deleted.
* *

View File

@@ -544,6 +544,7 @@ pub unsafe extern "C" fn dc_event_get_id(event: *mut dc_event_t) -> libc::c_int
EventType::MsgDeleted { .. } => 2016, EventType::MsgDeleted { .. } => 2016,
EventType::ChatModified(_) => 2020, EventType::ChatModified(_) => 2020,
EventType::ChatEphemeralTimerModified { .. } => 2021, EventType::ChatEphemeralTimerModified { .. } => 2021,
EventType::ChatDeleted { .. } => 2023,
EventType::ContactsChanged(_) => 2030, EventType::ContactsChanged(_) => 2030,
EventType::LocationChanged(_) => 2035, EventType::LocationChanged(_) => 2035,
EventType::ConfigureProgress { .. } => 2041, EventType::ConfigureProgress { .. } => 2041,
@@ -610,7 +611,8 @@ pub unsafe extern "C" fn dc_event_get_data1_int(event: *mut dc_event_t) -> libc:
| EventType::MsgRead { chat_id, .. } | EventType::MsgRead { chat_id, .. }
| EventType::MsgDeleted { chat_id, .. } | EventType::MsgDeleted { chat_id, .. }
| EventType::ChatModified(chat_id) | EventType::ChatModified(chat_id)
| EventType::ChatEphemeralTimerModified { chat_id, .. } => chat_id.to_u32() as libc::c_int, | EventType::ChatEphemeralTimerModified { chat_id, .. }
| EventType::ChatDeleted { chat_id } => chat_id.to_u32() as libc::c_int,
EventType::ContactsChanged(id) | EventType::LocationChanged(id) => { EventType::ContactsChanged(id) | EventType::LocationChanged(id) => {
let id = id.unwrap_or_default(); let id = id.unwrap_or_default();
id.to_u32() as libc::c_int id.to_u32() as libc::c_int
@@ -676,6 +678,7 @@ pub unsafe extern "C" fn dc_event_get_data2_int(event: *mut dc_event_t) -> libc:
| EventType::AccountsItemChanged | EventType::AccountsItemChanged
| EventType::ConfigSynced { .. } | EventType::ConfigSynced { .. }
| EventType::ChatModified(_) | EventType::ChatModified(_)
| EventType::ChatDeleted { .. }
| EventType::WebxdcRealtimeAdvertisementReceived { .. } | EventType::WebxdcRealtimeAdvertisementReceived { .. }
| EventType::EventChannelOverflow { .. } => 0, | EventType::EventChannelOverflow { .. } => 0,
EventType::MsgsChanged { msg_id, .. } EventType::MsgsChanged { msg_id, .. }
@@ -767,6 +770,7 @@ pub unsafe extern "C" fn dc_event_get_data2_str(event: *mut dc_event_t) -> *mut
| EventType::WebxdcInstanceDeleted { .. } | EventType::WebxdcInstanceDeleted { .. }
| EventType::AccountsBackgroundFetchDone | EventType::AccountsBackgroundFetchDone
| EventType::ChatEphemeralTimerModified { .. } | EventType::ChatEphemeralTimerModified { .. }
| EventType::ChatDeleted { .. }
| EventType::IncomingMsgBunch { .. } | EventType::IncomingMsgBunch { .. }
| EventType::ChatlistItemChanged { .. } | EventType::ChatlistItemChanged { .. }
| EventType::ChatlistChanged | EventType::ChatlistChanged

View File

@@ -243,6 +243,12 @@ pub enum EventType {
timer: u32, timer: u32,
}, },
/// Chat deleted.
ChatDeleted {
/// Chat ID.
chat_id: u32,
},
/// Contact(s) created, renamed, blocked or deleted. /// Contact(s) created, renamed, blocked or deleted.
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
ContactsChanged { ContactsChanged {
@@ -499,6 +505,9 @@ impl From<CoreEventType> for EventType {
timer: timer.to_u32(), timer: timer.to_u32(),
} }
} }
CoreEventType::ChatDeleted { chat_id } => ChatDeleted {
chat_id: chat_id.to_u32(),
},
CoreEventType::ContactsChanged(contact) => ContactsChanged { CoreEventType::ContactsChanged(contact) => ContactsChanged {
contact_id: contact.map(|c| c.to_u32()), contact_id: contact.map(|c| c.to_u32()),
}, },

View File

@@ -803,6 +803,7 @@ impl ChatId {
}) })
.await?; .await?;
context.emit_event(EventType::ChatDeleted { chat_id: self });
context.emit_msgs_changed_without_ids(); context.emit_msgs_changed_without_ids();
if let Some(id) = sync_id { if let Some(id) = sync_id {

View File

@@ -219,6 +219,12 @@ pub enum EventType {
timer: EphemeralTimer, timer: EphemeralTimer,
}, },
/// Chat was deleted.
ChatDeleted {
/// Chat ID.
chat_id: ChatId,
},
/// Contact(s) created, renamed, blocked, deleted or changed their "recently seen" status. /// Contact(s) created, renamed, blocked, deleted or changed their "recently seen" status.
/// ///
/// @param data1 (int) If set, this is the contact_id of an added contact that should be selected. /// @param data1 (int) If set, this is the contact_id of an added contact that should be selected.