Adjust the order of operations during read_marker handling.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -26,6 +26,12 @@ pub(crate) async fn set_read_marker_route(
|
|||||||
) -> Result<set_read_marker::v3::Response> {
|
) -> Result<set_read_marker::v3::Response> {
|
||||||
let sender_user = body.sender_user();
|
let sender_user = body.sender_user();
|
||||||
|
|
||||||
|
if body.private_read_receipt.is_some() || body.read_receipt.is_some() {
|
||||||
|
services
|
||||||
|
.user
|
||||||
|
.reset_notification_counts(sender_user, &body.room_id);
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(event) = &body.fully_read {
|
if let Some(event) = &body.fully_read {
|
||||||
let fully_read_event = ruma::events::fully_read::FullyReadEvent {
|
let fully_read_event = ruma::events::fully_read::FullyReadEvent {
|
||||||
content: ruma::events::fully_read::FullyReadEventContent { event_id: event.clone() },
|
content: ruma::events::fully_read::FullyReadEventContent { event_id: event.clone() },
|
||||||
@@ -39,21 +45,29 @@ pub(crate) async fn set_read_marker_route(
|
|||||||
RoomAccountDataEventType::FullyRead,
|
RoomAccountDataEventType::FullyRead,
|
||||||
&serde_json::to_value(fully_read_event)?,
|
&serde_json::to_value(fully_read_event)?,
|
||||||
)
|
)
|
||||||
.await?;
|
.await
|
||||||
|
.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
if body.private_read_receipt.is_some() || body.read_receipt.is_some() {
|
if let Some(event) = &body.private_read_receipt {
|
||||||
|
let count = services
|
||||||
|
.timeline
|
||||||
|
.get_pdu_count(event)
|
||||||
|
.await
|
||||||
|
.map_err(|_| err!(Request(NotFound("Event not found."))))?;
|
||||||
|
|
||||||
|
let PduCount::Normal(count) = count else {
|
||||||
|
return Err!(Request(InvalidParam(
|
||||||
|
"Event is a backfilled PDU and cannot be marked as read."
|
||||||
|
)));
|
||||||
|
};
|
||||||
|
|
||||||
services
|
services
|
||||||
.user
|
.read_receipt
|
||||||
.reset_notification_counts(sender_user, &body.room_id);
|
.private_read_set(&body.room_id, sender_user, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(event) = &body.read_receipt {
|
if let Some(event) = &body.read_receipt {
|
||||||
services
|
|
||||||
.presence
|
|
||||||
.maybe_ping_presence(sender_user, &ruma::presence::PresenceState::Online)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let receipt_content = BTreeMap::from_iter([(
|
let receipt_content = BTreeMap::from_iter([(
|
||||||
event.to_owned(),
|
event.to_owned(),
|
||||||
BTreeMap::from_iter([(
|
BTreeMap::from_iter([(
|
||||||
@@ -76,24 +90,12 @@ pub(crate) async fn set_read_marker_route(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(event) = &body.private_read_receipt {
|
|
||||||
let count = services
|
|
||||||
.timeline
|
|
||||||
.get_pdu_count(event)
|
|
||||||
.await
|
|
||||||
.map_err(|_| err!(Request(NotFound("Event not found."))))?;
|
|
||||||
|
|
||||||
let PduCount::Normal(count) = count else {
|
|
||||||
return Err!(Request(InvalidParam(
|
|
||||||
"Event is a backfilled PDU and cannot be marked as read."
|
|
||||||
)));
|
|
||||||
};
|
|
||||||
|
|
||||||
services
|
services
|
||||||
.read_receipt
|
.presence
|
||||||
.private_read_set(&body.room_id, sender_user, count);
|
.maybe_ping_presence(sender_user, &ruma::presence::PresenceState::Online)
|
||||||
|
.await
|
||||||
|
.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(set_read_marker::v3::Response {})
|
Ok(set_read_marker::v3::Response {})
|
||||||
@@ -135,11 +137,6 @@ pub(crate) async fn create_receipt_route(
|
|||||||
.await?;
|
.await?;
|
||||||
},
|
},
|
||||||
| create_receipt::v3::ReceiptType::Read => {
|
| create_receipt::v3::ReceiptType::Read => {
|
||||||
services
|
|
||||||
.presence
|
|
||||||
.maybe_ping_presence(sender_user, &ruma::presence::PresenceState::Online)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let receipt_content = BTreeMap::from_iter([(
|
let receipt_content = BTreeMap::from_iter([(
|
||||||
body.event_id.clone(),
|
body.event_id.clone(),
|
||||||
BTreeMap::from_iter([(
|
BTreeMap::from_iter([(
|
||||||
@@ -165,6 +162,12 @@ pub(crate) async fn create_receipt_route(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
services
|
||||||
|
.presence
|
||||||
|
.maybe_ping_presence(sender_user, &ruma::presence::PresenceState::Online)
|
||||||
|
.await
|
||||||
|
.ok();
|
||||||
},
|
},
|
||||||
| create_receipt::v3::ReceiptType::ReadPrivate => {
|
| create_receipt::v3::ReceiptType::ReadPrivate => {
|
||||||
let count = services
|
let count = services
|
||||||
|
|||||||
Reference in New Issue
Block a user