|
|
@ -34,29 +34,33 @@ pub async fn set_read_marker_route(
|
|
|
|
)?;
|
|
|
|
)?;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if body.private_read_receipt.is_some() || body.read_receipt.is_some() {
|
|
|
|
if let Some(event) = &body.private_read_receipt {
|
|
|
|
services()
|
|
|
|
let _pdu = services()
|
|
|
|
.rooms
|
|
|
|
.rooms
|
|
|
|
.user
|
|
|
|
.timeline
|
|
|
|
.reset_notification_counts(sender_user, &body.room_id)?;
|
|
|
|
.get_pdu(event)?
|
|
|
|
}
|
|
|
|
.ok_or(Error::BadRequest(
|
|
|
|
|
|
|
|
ErrorKind::InvalidParam,
|
|
|
|
|
|
|
|
"Event does not exist.",
|
|
|
|
|
|
|
|
))?;
|
|
|
|
|
|
|
|
|
|
|
|
if let Some(event) = &body.private_read_receipt {
|
|
|
|
|
|
|
|
services().rooms.edus.read_receipt.private_read_set(
|
|
|
|
services().rooms.edus.read_receipt.private_read_set(
|
|
|
|
&body.room_id,
|
|
|
|
&body.room_id,
|
|
|
|
sender_user,
|
|
|
|
sender_user,
|
|
|
|
services()
|
|
|
|
services().rooms.short.get_or_create_shorteventid(event)?,
|
|
|
|
|
|
|
|
)?;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if let Some(event) = &body.read_receipt {
|
|
|
|
|
|
|
|
let _pdu = services()
|
|
|
|
.rooms
|
|
|
|
.rooms
|
|
|
|
.timeline
|
|
|
|
.timeline
|
|
|
|
.get_pdu_count(event)?
|
|
|
|
.get_pdu(event)?
|
|
|
|
.ok_or(Error::BadRequest(
|
|
|
|
.ok_or(Error::BadRequest(
|
|
|
|
ErrorKind::InvalidParam,
|
|
|
|
ErrorKind::InvalidParam,
|
|
|
|
"Event does not exist.",
|
|
|
|
"Event does not exist.",
|
|
|
|
))?,
|
|
|
|
))?;
|
|
|
|
)?;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if let Some(event) = &body.read_receipt {
|
|
|
|
|
|
|
|
let mut user_receipts = BTreeMap::new();
|
|
|
|
let mut user_receipts = BTreeMap::new();
|
|
|
|
user_receipts.insert(
|
|
|
|
user_receipts.insert(
|
|
|
|
sender_user.clone(),
|
|
|
|
sender_user.clone(),
|
|
|
@ -80,6 +84,12 @@ pub async fn set_read_marker_route(
|
|
|
|
room_id: body.room_id.clone(),
|
|
|
|
room_id: body.room_id.clone(),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
)?;
|
|
|
|
)?;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
services().rooms.edus.read_receipt.private_read_set(
|
|
|
|
|
|
|
|
&body.room_id,
|
|
|
|
|
|
|
|
sender_user,
|
|
|
|
|
|
|
|
services().rooms.short.get_or_create_shorteventid(event)?,
|
|
|
|
|
|
|
|
)?;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Ok(set_read_marker::v3::Response {})
|
|
|
|
Ok(set_read_marker::v3::Response {})
|
|
|
@ -93,16 +103,6 @@ pub async fn create_receipt_route(
|
|
|
|
) -> Result<create_receipt::v3::Response> {
|
|
|
|
) -> Result<create_receipt::v3::Response> {
|
|
|
|
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
|
|
|
|
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
|
|
|
|
|
|
|
|
|
|
|
|
if matches!(
|
|
|
|
|
|
|
|
&body.receipt_type,
|
|
|
|
|
|
|
|
create_receipt::v3::ReceiptType::Read | create_receipt::v3::ReceiptType::ReadPrivate
|
|
|
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
services()
|
|
|
|
|
|
|
|
.rooms
|
|
|
|
|
|
|
|
.user
|
|
|
|
|
|
|
|
.reset_notification_counts(sender_user, &body.room_id)?;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
match body.receipt_type {
|
|
|
|
match body.receipt_type {
|
|
|
|
create_receipt::v3::ReceiptType::FullyRead => {
|
|
|
|
create_receipt::v3::ReceiptType::FullyRead => {
|
|
|
|
let fully_read_event = ruma::events::fully_read::FullyReadEvent {
|
|
|
|
let fully_read_event = ruma::events::fully_read::FullyReadEvent {
|
|
|
@ -118,6 +118,16 @@ pub async fn create_receipt_route(
|
|
|
|
)?;
|
|
|
|
)?;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
create_receipt::v3::ReceiptType::Read => {
|
|
|
|
create_receipt::v3::ReceiptType::Read => {
|
|
|
|
|
|
|
|
let _pdu =
|
|
|
|
|
|
|
|
services()
|
|
|
|
|
|
|
|
.rooms
|
|
|
|
|
|
|
|
.timeline
|
|
|
|
|
|
|
|
.get_pdu(&body.event_id)?
|
|
|
|
|
|
|
|
.ok_or(Error::BadRequest(
|
|
|
|
|
|
|
|
ErrorKind::InvalidParam,
|
|
|
|
|
|
|
|
"Event does not exist.",
|
|
|
|
|
|
|
|
))?;
|
|
|
|
|
|
|
|
|
|
|
|
let mut user_receipts = BTreeMap::new();
|
|
|
|
let mut user_receipts = BTreeMap::new();
|
|
|
|
user_receipts.insert(
|
|
|
|
user_receipts.insert(
|
|
|
|
sender_user.clone(),
|
|
|
|
sender_user.clone(),
|
|
|
@ -140,19 +150,34 @@ pub async fn create_receipt_route(
|
|
|
|
room_id: body.room_id.clone(),
|
|
|
|
room_id: body.room_id.clone(),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
)?;
|
|
|
|
)?;
|
|
|
|
}
|
|
|
|
|
|
|
|
create_receipt::v3::ReceiptType::ReadPrivate => {
|
|
|
|
|
|
|
|
services().rooms.edus.read_receipt.private_read_set(
|
|
|
|
services().rooms.edus.read_receipt.private_read_set(
|
|
|
|
&body.room_id,
|
|
|
|
&body.room_id,
|
|
|
|
sender_user,
|
|
|
|
sender_user,
|
|
|
|
|
|
|
|
services()
|
|
|
|
|
|
|
|
.rooms
|
|
|
|
|
|
|
|
.short
|
|
|
|
|
|
|
|
.get_or_create_shorteventid(&body.event_id)?,
|
|
|
|
|
|
|
|
)?;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
create_receipt::v3::ReceiptType::ReadPrivate => {
|
|
|
|
|
|
|
|
let _pdu =
|
|
|
|
services()
|
|
|
|
services()
|
|
|
|
.rooms
|
|
|
|
.rooms
|
|
|
|
.timeline
|
|
|
|
.timeline
|
|
|
|
.get_pdu_count(&body.event_id)?
|
|
|
|
.get_pdu(&body.event_id)?
|
|
|
|
.ok_or(Error::BadRequest(
|
|
|
|
.ok_or(Error::BadRequest(
|
|
|
|
ErrorKind::InvalidParam,
|
|
|
|
ErrorKind::InvalidParam,
|
|
|
|
"Event does not exist.",
|
|
|
|
"Event does not exist.",
|
|
|
|
))?,
|
|
|
|
))?;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
services().rooms.edus.read_receipt.private_read_set(
|
|
|
|
|
|
|
|
&body.room_id,
|
|
|
|
|
|
|
|
sender_user,
|
|
|
|
|
|
|
|
services()
|
|
|
|
|
|
|
|
.rooms
|
|
|
|
|
|
|
|
.short
|
|
|
|
|
|
|
|
.get_or_create_shorteventid(&body.event_id)?,
|
|
|
|
)?;
|
|
|
|
)?;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
_ => return Err(Error::bad_database("Unsupported receipt type")),
|
|
|
|
_ => return Err(Error::bad_database("Unsupported receipt type")),
|
|
|
|