File tree Expand file tree Collapse file tree 1 file changed +25
-1
lines changed
crates/nostr-mls-memory-storage/src Expand file tree Collapse file tree 1 file changed +25
-1
lines changed Original file line number Diff line number Diff line change @@ -9,8 +9,32 @@ use crate::NostrMlsMemoryStorage;
9
9
10
10
impl MessageStorage for NostrMlsMemoryStorage {
11
11
fn save_message ( & self , message : Message ) -> Result < ( ) , MessageError > {
12
+ // Save in the messages cache
12
13
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
+
14
38
Ok ( ( ) )
15
39
}
16
40
You can’t perform that action at this time.
0 commit comments