From c3cdc4526ebb9505788b4e5a0eab92d669b4358c Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier Date: Wed, 26 Jun 2024 20:07:17 +0200 Subject: [PATCH] ffi: rename `Timeline::edit` to `Timeline::edit_by_event_id`, and introduce a more general `Timeline::edit` --- bindings/matrix-sdk-ffi/src/timeline/mod.rs | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/bindings/matrix-sdk-ffi/src/timeline/mod.rs b/bindings/matrix-sdk-ffi/src/timeline/mod.rs index f41dc7571..12e445f69 100644 --- a/bindings/matrix-sdk-ffi/src/timeline/mod.rs +++ b/bindings/matrix-sdk-ffi/src/timeline/mod.rs @@ -470,10 +470,36 @@ impl Timeline { Ok(()) } + /// Edits an event from the timeline. + /// + /// Only works for events that exist as timeline items. + /// + /// If it was a local event, this will *try* to edit it, if it was not + /// being sent already. If the event was a remote event, then it will be + /// redacted by sending an edit request to the server. + /// + /// Returns whether the edit did happen. It can only return false for + /// local events that are being processed. pub async fn edit( &self, + item: Arc, new_content: Arc, + ) -> Result { + let edit_info = item.0.edit_info().map_err(|err| anyhow::anyhow!(err))?; + + Ok(self + .inner + .edit((*new_content).clone(), edit_info) + .await + .map_err(|err| anyhow::anyhow!(err))?) + } + + /// Edit an event given its event id. Useful when we're not sure a remote + /// timeline event has been fetched by the timeline. + pub async fn edit_by_event_id( + &self, event_id: String, + new_content: Arc, ) -> Result<(), ClientError> { let event_id = EventId::parse(event_id)?; let edit_info = self @@ -486,6 +512,7 @@ impl Timeline { .edit((*new_content).clone(), edit_info) .await .map_err(|err| anyhow::anyhow!(err))?; + Ok(()) }