Skip to content

Commit 8df5d65

Browse files
committed
feat(multiverse): add support to toggle a reaction on the last message of a room
1 parent 1552426 commit 8df5d65

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

labs/multiverse/src/main.rs

+37
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,41 @@ impl App {
357357
}
358358
}
359359

360+
async fn toggle_reaction_to_latest_msg(&mut self) {
361+
let selected = self.get_selected_room_id(None);
362+
363+
if let Some((sdk_timeline, items)) = selected.and_then(|room_id| {
364+
self.timelines
365+
.lock()
366+
.unwrap()
367+
.get(&room_id)
368+
.map(|timeline| (timeline.timeline.clone(), timeline.items.clone()))
369+
}) {
370+
// Look for the latest (most recent) room message.
371+
let item_id = {
372+
let items = items.lock().unwrap();
373+
items.iter().rev().find_map(|it| {
374+
it.as_event()
375+
.and_then(|ev| ev.content().as_message().is_some().then(|| ev.identifier()))
376+
})
377+
};
378+
379+
// If found, send a reaction.
380+
if let Some(item_id) = item_id {
381+
match sdk_timeline.toggle_reaction(&item_id, "🥰").await {
382+
Ok(_) => {
383+
self.set_status_message("reaction sent!".to_owned());
384+
}
385+
Err(err) => self.set_status_message(format!("error when reacting: {err}")),
386+
}
387+
} else {
388+
self.set_status_message("no item to react to".to_owned());
389+
}
390+
} else {
391+
self.set_status_message("missing timeline for room".to_owned());
392+
};
393+
}
394+
360395
/// Run a small back-pagination (expect a batch of 20 events, continue until
361396
/// we get 10 timeline items or hit the timeline start).
362397
fn back_paginate(&mut self) {
@@ -484,6 +519,8 @@ impl App {
484519
};
485520
}
486521

522+
Char('l') => self.toggle_reaction_to_latest_msg().await,
523+
487524
Char('r') => self.details_mode = DetailsMode::ReadReceipts,
488525
Char('t') => self.details_mode = DetailsMode::TimelineItems,
489526
Char('e') => self.details_mode = DetailsMode::Events,

0 commit comments

Comments
 (0)