From 4d72644a31d2b462f8e72c4e45f3d0ceaf214a61 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Mon, 24 Nov 2025 13:18:23 +0100 Subject: [PATCH] Can edit message --- .../matrix/matrix_event_controller.rs | 45 ++++++++++++++++++- matrixgw_backend/src/main.rs | 4 ++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/matrixgw_backend/src/controllers/matrix/matrix_event_controller.rs b/matrixgw_backend/src/controllers/matrix/matrix_event_controller.rs index 3e44a37..7befb98 100644 --- a/matrixgw_backend/src/controllers/matrix/matrix_event_controller.rs +++ b/matrixgw_backend/src/controllers/matrix/matrix_event_controller.rs @@ -6,7 +6,10 @@ use futures_util::{StreamExt, stream}; use matrix_sdk::Room; use matrix_sdk::deserialized_responses::{TimelineEvent, TimelineEventKind}; use matrix_sdk::room::MessagesOptions; -use matrix_sdk::ruma::events::room::message::RoomMessageEventContent; +use matrix_sdk::room::edit::EditedContent; +use matrix_sdk::ruma::events::room::message::{ + RoomMessageEventContent, RoomMessageEventContentWithoutRelation, +}; use matrix_sdk::ruma::{MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedUserId, RoomId, UInt}; use serde::{Deserialize, Serialize}; use serde_json::value::RawValue; @@ -117,6 +120,46 @@ pub struct EventIdInPath { pub(crate) event_id: OwnedEventId, } +pub async fn set_text_content( + client: MatrixClientExtractor, + path: web::Path, + event_path: web::Path, +) -> HttpResult { + let req = client.auth.decode_json_body::()?; + + let Some(room) = client.client.client.get_room(&path.room_id) else { + return Ok(HttpResponse::NotFound().json("Room not found!")); + }; + + let edit_event = match room + .make_edit_event( + &event_path.event_id, + EditedContent::RoomMessage(RoomMessageEventContentWithoutRelation::text_plain( + req.content, + )), + ) + .await + { + Ok(msg) => msg, + Err(e) => { + log::error!( + "Failed to created edit message event {}: {e}", + event_path.event_id + ); + return Ok(HttpResponse::InternalServerError() + .json(format!("Failed to create edit message event! {e}"))); + } + }; + + Ok(match room.send(edit_event).await { + Ok(_) => HttpResponse::Accepted().finish(), + Err(e) => { + log::error!("Failed to edit event message {}: {e}", event_path.event_id); + HttpResponse::InternalServerError().json(format!("Failed to edit event! {e}")) + } + }) +} + pub async fn redact_event( client: MatrixClientExtractor, path: web::Path, diff --git a/matrixgw_backend/src/main.rs b/matrixgw_backend/src/main.rs index 09ae619..6814d0f 100644 --- a/matrixgw_backend/src/main.rs +++ b/matrixgw_backend/src/main.rs @@ -173,6 +173,10 @@ async fn main() -> std::io::Result<()> { "/api/matrix/room/{room_id}/send_text_message", web::post().to(matrix_event_controller::send_text_message), ) + .route( + "/api/matrix/room/{room_id}/event/{event_id}/set_text_content", + web::post().to(matrix_event_controller::set_text_content), + ) .route( "/api/matrix/room/{room_id}/event/{event_id}", web::delete().to(matrix_event_controller::redact_event),