diff --git a/src/api/server/send_join.rs b/src/api/server/send_join.rs index 609f93df..62d37e7e 100644 --- a/src/api/server/send_join.rs +++ b/src/api/server/send_join.rs @@ -208,6 +208,7 @@ async fn create_join_event( .handle_incoming_pdu(&origin, room_id, &event_id, value.clone(), true) .boxed() .await? + .map(at!(0)) .ok_or_else(|| err!(Request(InvalidParam("Could not accept as timeline event."))))?; drop(mutex_lock); diff --git a/src/api/server/send_knock.rs b/src/api/server/send_knock.rs index 1938e8e3..bc9b7158 100644 --- a/src/api/server/send_knock.rs +++ b/src/api/server/send_knock.rs @@ -11,7 +11,7 @@ use ruma::{ serde::JsonObject, }; use tuwunel_core::{ - Err, Result, err, + Err, Result, at, err, matrix::{event::gen_event_id_canonical_json, pdu::PduEvent}, warn, }; @@ -170,6 +170,7 @@ pub(crate) async fn create_knock_event_v1_route( .handle_incoming_pdu(&origin, &body.room_id, &event_id, value.clone(), true) .boxed() .await? + .map(at!(0)) .ok_or_else(|| err!(Request(InvalidParam("Could not accept as timeline event."))))?; drop(mutex_lock); diff --git a/src/api/server/send_leave.rs b/src/api/server/send_leave.rs index e0a0de1b..ca0dbc67 100644 --- a/src/api/server/send_leave.rs +++ b/src/api/server/send_leave.rs @@ -11,7 +11,7 @@ use ruma::{ }, }; use serde_json::value::RawValue as RawJsonValue; -use tuwunel_core::{Err, Result, err, matrix::event::gen_event_id_canonical_json}; +use tuwunel_core::{Err, Result, at, err, matrix::event::gen_event_id_canonical_json}; use tuwunel_service::Services; use crate::Ruma; @@ -151,6 +151,7 @@ async fn create_leave_event( .handle_incoming_pdu(origin, room_id, &event_id, value, true) .boxed() .await? + .map(at!(0)) .ok_or_else(|| err!(Request(InvalidParam("Could not accept as timeline event."))))?; drop(mutex_lock); diff --git a/src/service/membership/invite.rs b/src/service/membership/invite.rs index cade9b16..a33c2d23 100644 --- a/src/service/membership/invite.rs +++ b/src/service/membership/invite.rs @@ -5,7 +5,7 @@ use ruma::{ events::room::member::{MembershipState, RoomMemberEventContent}, }; use tuwunel_core::{ - Err, Result, err, implement, matrix::event::gen_event_id_canonical_json, pdu::PduBuilder, + Err, Result, at, err, implement, matrix::event::gen_event_id_canonical_json, pdu::PduBuilder, }; use super::Service; @@ -135,6 +135,7 @@ async fn remote_invite( .event_handler .handle_incoming_pdu(&origin, room_id, &event_id, value, true) .await? + .map(at!(0)) .ok_or_else(|| { err!(Request(InvalidParam("Could not accept incoming PDU as timeline event."))) })?; diff --git a/src/service/rooms/event_handler/handle_incoming_pdu.rs b/src/service/rooms/event_handler/handle_incoming_pdu.rs index ab47f5b7..e249918a 100644 --- a/src/service/rooms/event_handler/handle_incoming_pdu.rs +++ b/src/service/rooms/event_handler/handle_incoming_pdu.rs @@ -57,11 +57,11 @@ pub async fn handle_incoming_pdu<'a>( event_id: &'a EventId, pdu: CanonicalJsonObject, is_timeline_event: bool, -) -> Result> { +) -> Result> { // 1. Skip the PDU if we already have it as a timeline event if let Ok(pdu_id) = self.services.timeline.get_pdu_id(event_id).await { trace!(?event_id, "exists"); - return Ok(Some(pdu_id)); + return Ok(Some((pdu_id, false))); } // 1.1 Check the server is in the room diff --git a/src/service/rooms/event_handler/upgrade_outlier_pdu.rs b/src/service/rooms/event_handler/upgrade_outlier_pdu.rs index 2c85b7b5..eedd1eb6 100644 --- a/src/service/rooms/event_handler/upgrade_outlier_pdu.rs +++ b/src/service/rooms/event_handler/upgrade_outlier_pdu.rs @@ -28,7 +28,7 @@ pub(super) async fn upgrade_outlier_to_timeline_pdu( val: CanonicalJsonObject, room_version: &RoomVersionId, create_event_id: &EventId, -) -> Result> { +) -> Result> { // Skip the PDU if we already have it as a timeline event if let Ok(pduid) = self .services @@ -36,7 +36,7 @@ pub(super) async fn upgrade_outlier_to_timeline_pdu( .get_pdu_id(incoming_pdu.event_id()) .await { - return Ok(Some(pduid)); + return Ok(Some((pduid, false))); } if self @@ -270,5 +270,5 @@ pub(super) async fn upgrade_outlier_to_timeline_pdu( "Accepted", ); - Ok(pdu_id) + Ok(pdu_id.zip(Some(true))) } diff --git a/src/service/rooms/timeline/append.rs b/src/service/rooms/timeline/append.rs index da310600..2328533e 100644 --- a/src/service/rooms/timeline/append.rs +++ b/src/service/rooms/timeline/append.rs @@ -33,7 +33,7 @@ use crate::rooms::{short::ShortRoomId, state_compressor::CompressedState}; skip_all, ret(Debug) )] -pub async fn append_incoming_pdu<'a, Leafs>( +pub(crate) async fn append_incoming_pdu<'a, Leafs>( &'a self, pdu: &'a PduEvent, pdu_json: CanonicalJsonObject,