Commit ed3363baaf01
tarball2 files changed+66-7
@@ -1,8 +1,8 @@
11
use macltok::ruma::{events::GlobalAccountDataEventType, serde::Raw};22
use macltok::{33
AttachmentUpload, ClientHandle, CreateRoomOptions, ImagePackSource, MediaId, MediaSize,4
- MemberFilter, MessageContent, MessageEditContent, MirrorHandle, PackImageInfo, PackUsage,5
- Patch, RichText, TimelineId, VerificationAction, VerificationTarget,4
+ MemberFilter, MentionKey, MentionsBoundary, MessageContent, MessageEditContent, MirrorHandle,5
+ PackImageInfo, PackUsage, Patch, RichText, TimelineId, VerificationAction, VerificationTarget,66
};77
use serde::Deserialize;88
use serde_json::json;@@ -103,6 +103,28 @@ pub enum Request {
103103
#[serde(default)]104104
limit: u32,105105
},106
+ MentionsPage {107
+ #[serde(default)]108
+ cursor: Option<String>,109
+ #[serde(default)]110
+ limit: u32,111
+ },112
+ MentionContext {113
+ room_id: String,114
+ event_id: String,115
+ },116
+ RetryMentionContext {117
+ room_id: String,118
+ event_id: String,119
+ },120
+ SetMentionsRead {121
+ keys: Vec<MentionKey>,122
+ read: bool,123
+ },124
+ MarkMentionsReadThrough {125
+ boundary: MentionsBoundary,126
+ },127
+ RecoverMentions,106128
Join {107129
#[serde(default)]108130
room: String,@@ -526,9 +548,7 @@ pub async fn dispatch(
526548
limit,527549
} => {528550
let room_id = parse_room_id(&room_id)?;529
- let page = handle530
- .event_context_before(&room_id, &token, limit)531
- .await?;551
+ let page = handle.event_context_before(&room_id, &token, limit).await?;532552
Ok(Reply::Json(json!(page)))533553
}534554
Request::EventContextAfter {@@ -537,11 +557,44 @@ pub async fn dispatch(
537557
limit,538558
} => {539559
let room_id = parse_room_id(&room_id)?;560
+ let page = handle.event_context_after(&room_id, &token, limit).await?;561
+ Ok(Reply::Json(json!(page)))562
+ }563
+ Request::MentionsPage { cursor, limit } => {540564
let page = handle541
- .event_context_after(&room_id, &token, limit)565
+ .mentions_page(cursor, if limit == 0 { 50 } else { limit.clamp(1, 50) })542566
.await?;543567
Ok(Reply::Json(json!(page)))544568
}569
+ Request::MentionContext { room_id, event_id } => {570
+ let context = handle571
+ .mention_context(&parse_room_id(&room_id)?, &parse_event_id(&event_id)?)572
+ .await?;573
+ Ok(Reply::Json(json!(context)))574
+ }575
+ Request::RetryMentionContext { room_id, event_id } => {576
+ let context = handle577
+ .retry_mention_context(&parse_room_id(&room_id)?, &parse_event_id(&event_id)?)578
+ .await?;579
+ Ok(Reply::Json(json!(context)))580
+ }581
+ Request::SetMentionsRead { keys, read } => {582
+ if keys.len() > 5000 {583
+ return Err(CoreError::bad_request(584
+ "at most 5000 mention keys are allowed",585
+ ));586
+ }587
+ handle.set_mentions_read(keys, read).await?;588
+ Ok(Reply::Done)589
+ }590
+ Request::MarkMentionsReadThrough { boundary } => {591
+ handle.mark_mentions_read_through(boundary).await?;592
+ Ok(Reply::Done)593
+ }594
+ Request::RecoverMentions => {595
+ handle.recover_mentions().await?;596
+ Ok(Reply::Done)597
+ }545598
Request::Join { room } => {546599
let room = parse_room_or_alias(&room)?;547600
let room_id = handle.join_room(room, Vec::new()).await?;@@ -554,7 +554,13 @@ async fn post_command(
554554
let request = body.0;555555
if !matches!(556556
request,557
- Request::Kick { .. }557
+ Request::MentionsPage { .. }558
+ | Request::MentionContext { .. }559
+ | Request::RetryMentionContext { .. }560
+ | Request::SetMentionsRead { .. }561
+ | Request::MarkMentionsReadThrough { .. }562
+ | Request::RecoverMentions563
+ | Request::Kick { .. }558564
| Request::Ban { .. }559565
| Request::Unban { .. }560566
| Request::SetPowerLevel { .. }