2022-09-06 23:15:09 +02:00
|
|
|
use std::sync::Arc;
|
|
|
|
|
|
2022-10-05 20:34:31 +02:00
|
|
|
use ruma::{EventId, RoomId};
|
2022-09-06 23:15:09 +02:00
|
|
|
|
2022-10-05 20:34:31 +02:00
|
|
|
use crate::{database::KeyValueDatabase, service, Result};
|
2022-09-06 23:15:09 +02:00
|
|
|
|
2022-10-05 18:36:12 +02:00
|
|
|
impl service::rooms::pdu_metadata::Data for KeyValueDatabase {
|
2022-06-25 16:12:23 +02:00
|
|
|
fn mark_as_referenced(&self, room_id: &RoomId, event_ids: &[Arc<EventId>]) -> Result<()> {
|
2021-08-24 19:10:31 +02:00
|
|
|
for prev in event_ids {
|
|
|
|
|
let mut key = room_id.as_bytes().to_vec();
|
|
|
|
|
key.extend_from_slice(prev.as_bytes());
|
|
|
|
|
self.referencedevents.insert(&key, &[])?;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-25 16:12:23 +02:00
|
|
|
fn is_event_referenced(&self, room_id: &RoomId, event_id: &EventId) -> Result<bool> {
|
2021-07-20 12:41:35 +02:00
|
|
|
let mut key = room_id.as_bytes().to_vec();
|
|
|
|
|
key.extend_from_slice(event_id.as_bytes());
|
2021-07-29 08:36:01 +02:00
|
|
|
Ok(self.referencedevents.get(&key)?.is_some())
|
2021-02-03 20:00:01 -05:00
|
|
|
}
|
|
|
|
|
|
2022-06-25 16:12:23 +02:00
|
|
|
fn mark_event_soft_failed(&self, event_id: &EventId) -> Result<()> {
|
2021-09-13 19:45:56 +02:00
|
|
|
self.softfailedeventids.insert(event_id.as_bytes(), &[])
|
2021-08-28 11:39:33 +02:00
|
|
|
}
|
|
|
|
|
|
2022-06-25 16:12:23 +02:00
|
|
|
fn is_event_soft_failed(&self, event_id: &EventId) -> Result<bool> {
|
2021-08-28 11:39:33 +02:00
|
|
|
self.softfailedeventids
|
2021-09-13 19:45:56 +02:00
|
|
|
.get(event_id.as_bytes())
|
2021-08-28 11:39:33 +02:00
|
|
|
.map(|o| o.is_some())
|
2021-01-14 21:32:22 -05:00
|
|
|
}
|
2022-06-25 16:12:23 +02:00
|
|
|
}
|