1
0
Fork 0
mirror of https://gitlab.com/famedly/conduit.git synced 2025-08-01 17:38:36 +00:00
conduit/src/service/rooms/lazy_loading/mod.rs

89 lines
2.1 KiB
Rust
Raw Normal View History

mod data;
2022-10-05 20:34:31 +02:00
use std::{
collections::{HashMap, HashSet},
2022-10-08 13:04:55 +02:00
sync::{Mutex},
2022-10-05 20:34:31 +02:00
};
pub use data::Data;
2022-10-05 20:34:31 +02:00
use ruma::{DeviceId, RoomId, UserId};
2022-01-04 14:30:13 +01:00
2022-09-07 13:25:51 +02:00
use crate::Result;
2022-10-05 12:45:54 +02:00
pub struct Service {
2022-10-08 13:02:52 +02:00
pub db: &'static dyn Data,
2022-10-05 12:45:54 +02:00
2022-10-08 13:02:52 +02:00
pub lazy_load_waiting:
2022-10-05 20:34:31 +02:00
Mutex<HashMap<(Box<UserId>, Box<DeviceId>, Box<RoomId>, u64), HashSet<Box<UserId>>>>,
}
2022-10-05 12:45:54 +02:00
impl Service {
2022-01-04 14:30:13 +01:00
#[tracing::instrument(skip(self))]
pub fn lazy_load_was_sent_before(
&self,
user_id: &UserId,
device_id: &DeviceId,
room_id: &RoomId,
ll_user: &UserId,
) -> Result<bool> {
2022-10-05 20:34:31 +02:00
self.db
.lazy_load_was_sent_before(user_id, device_id, room_id, ll_user)
2022-01-04 14:30:13 +01:00
}
#[tracing::instrument(skip(self))]
pub fn lazy_load_mark_sent(
&self,
user_id: &UserId,
device_id: &DeviceId,
room_id: &RoomId,
lazy_load: HashSet<Box<UserId>>,
2022-01-04 14:30:13 +01:00
count: u64,
) {
self.lazy_load_waiting.lock().unwrap().insert(
(
user_id.to_owned(),
device_id.to_owned(),
room_id.to_owned(),
count,
),
lazy_load,
);
}
#[tracing::instrument(skip(self))]
pub fn lazy_load_confirm_delivery(
&self,
user_id: &UserId,
device_id: &DeviceId,
room_id: &RoomId,
since: u64,
) -> Result<()> {
2022-10-05 12:45:54 +02:00
if let Some(user_ids) = self.lazy_load_waiting.lock().unwrap().remove(&(
user_id.to_owned(),
device_id.to_owned(),
room_id.to_owned(),
since,
)) {
2022-10-05 20:34:31 +02:00
self.db.lazy_load_confirm_delivery(
user_id,
device_id,
room_id,
2022-10-08 13:02:52 +02:00
&mut user_ids.iter().map(|u| &**u),
2022-10-05 20:34:31 +02:00
)?;
2022-10-05 12:45:54 +02:00
} else {
// Ignore
}
Ok(())
2022-01-04 14:30:13 +01:00
}
#[tracing::instrument(skip(self))]
pub fn lazy_load_reset(
&self,
2022-01-20 00:10:39 +01:00
user_id: &UserId,
device_id: &DeviceId,
room_id: &RoomId,
2022-01-04 14:30:13 +01:00
) -> Result<()> {
self.db.lazy_load_reset(user_id, device_id, room_id)
2022-01-04 14:30:13 +01:00
}
}