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

79 lines
1.9 KiB
Rust
Raw Normal View History

mod data;
2022-10-05 12:45:54 +02:00
use std::{collections::{HashSet, HashMap}, sync::Mutex};
pub use data::Data;
use ruma::{DeviceId, UserId, RoomId};
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 {
db: Box<dyn Data>,
lazy_load_waiting: 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> {
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,
)) {
self.db.lazy_load_confirm_delivery(user_id, device_id, room_id, &mut user_ids.iter().map(|&u| &*u))?;
} 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
}
}