Skip to content

Commit 9419df0

Browse files
mls-memory-storage: save messages in the messages_by_group cache
Co-authored-by: Yuki Kishimoto <[email protected]> Signed-off-by: Yuki Kishimoto <[email protected]>
1 parent 50e7f29 commit 9419df0

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

crates/nostr-mls-memory-storage/src/messages.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,32 @@ use crate::NostrMlsMemoryStorage;
99

1010
impl MessageStorage for NostrMlsMemoryStorage {
1111
fn save_message(&self, message: Message) -> Result<(), MessageError> {
12+
// Save in the messages cache
1213
let mut cache = self.messages_cache.write();
13-
cache.put(message.id, message);
14+
cache.put(message.id, message.clone());
15+
16+
// Save in the messages_by_group cache
17+
let mut group_cache = self.messages_by_group_cache.write();
18+
match group_cache.get_mut(&message.mls_group_id) {
19+
Some(group_messages) => {
20+
// TODO: time complexity here is O(n). We probably want to use another data struct here.
21+
22+
// Find and update existing message or add new one
23+
match group_messages.iter().position(|m| m.id == message.id) {
24+
Some(idx) => {
25+
group_messages[idx] = message;
26+
}
27+
None => {
28+
group_messages.push(message);
29+
}
30+
}
31+
}
32+
// Not found, insert new
33+
None => {
34+
group_cache.put(message.mls_group_id.clone(), vec![message]);
35+
}
36+
}
37+
1438
Ok(())
1539
}
1640

0 commit comments

Comments
 (0)