Add support for previewing images in room scrollback (#108)

This commit is contained in:
Benjamin Grosse 2023-11-16 08:36:22 -08:00 committed by GitHub
parent 974775b29b
commit 221faa828d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 588 additions and 29 deletions

View file

@ -244,16 +244,20 @@ async fn load_older_one(
}
}
async fn load_insert(
client: &Client,
room_id: OwnedRoomId,
res: MessageFetchResult,
store: AsyncProgramStore,
) {
async fn load_insert(room_id: OwnedRoomId, res: MessageFetchResult, store: AsyncProgramStore) {
let mut locked = store.lock().await;
let ChatStore { need_load, presences, rooms, .. } = &mut locked.application;
let ChatStore {
need_load,
presences,
rooms,
worker,
picker,
settings,
..
} = &mut locked.application;
let info = rooms.get_or_default(room_id.clone());
info.fetching = false;
let client = &worker.client;
match res {
Ok((fetch_id, msgs)) => {
@ -270,7 +274,14 @@ async fn load_insert(
info.insert_encrypted(msg);
},
AnyMessageLikeEvent::RoomMessage(msg) => {
info.insert(msg);
info.insert_with_preview(
room_id.clone(),
store.clone(),
*picker,
msg,
settings,
client.media(),
);
},
AnyMessageLikeEvent::Reaction(ev) => {
info.insert_reaction(ev);
@ -298,12 +309,11 @@ async fn load_older(client: &Client, store: &AsyncProgramStore) -> usize {
.await
.into_iter()
.map(|(room_id, fetch_id)| {
let client = client.clone();
let store = store.clone();
async move {
let res = load_older_one(&client, room_id.as_ref(), fetch_id, limit).await;
load_insert(&client, room_id, res, store).await;
let res = load_older_one(client, room_id.as_ref(), fetch_id, limit).await;
load_insert(room_id, res, store).await;
}
})
.collect::<FuturesUnordered<_>>()
@ -813,9 +823,20 @@ impl ClientWorker {
let sender = ev.sender().to_owned();
let _ = locked.application.presences.get_or_default(sender);
let info = locked.application.get_room_info(room_id.to_owned());
let ChatStore { rooms, picker, settings, .. } = &mut locked.application;
let info = rooms.get_or_default(room_id.to_owned());
update_event_receipts(info, &room, ev.event_id()).await;
info.insert(ev.into_full_event(room_id.to_owned()));
let full_ev = ev.into_full_event(room_id.to_owned());
info.insert_with_preview(
room_id.to_owned(),
store.clone(),
*picker,
full_ev,
settings,
client.media(),
);
}
},
);