@@ -88,13 +88,15 @@ where
88
88
fn create_message_for_event (
89
89
& self ,
90
90
group : & mut MlsGroup ,
91
- mut rumor : UnsignedEvent ,
91
+ rumor : & mut UnsignedEvent ,
92
92
) -> Result < Vec < u8 > , Error > {
93
93
// Load signer
94
94
let signer: SignatureKeyPair = self . load_mls_signer ( group) ?;
95
95
96
- // Ensure rumor ID and serialize as JSON
96
+ // Ensure rumor ID
97
97
rumor. ensure_id ( ) ;
98
+
99
+ // Serialize as JSON
98
100
let json: String = rumor. as_json ( ) ;
99
101
100
102
// Create message
@@ -126,7 +128,7 @@ where
126
128
pub fn create_message (
127
129
& self ,
128
130
mls_group_id : & GroupId ,
129
- rumor : UnsignedEvent ,
131
+ mut rumor : UnsignedEvent ,
130
132
) -> Result < Event , Error > {
131
133
// Load mls group
132
134
let mut mls_group = self
@@ -140,7 +142,10 @@ where
140
142
. ok_or ( Error :: GroupNotFound ) ?;
141
143
142
144
// Create message
143
- let message: Vec < u8 > = self . create_message_for_event ( & mut mls_group, rumor. clone ( ) ) ?;
145
+ let message: Vec < u8 > = self . create_message_for_event ( & mut mls_group, & mut rumor) ?;
146
+
147
+ // Get the rumor ID
148
+ let rumor_id: EventId = rumor. id ( ) ;
144
149
145
150
// Export secret
146
151
let secret: group_types:: GroupExporterSecret = self . exporter_secret ( mls_group_id) ?;
@@ -167,7 +172,7 @@ where
167
172
168
173
// Create message to save to storage
169
174
let message: message_types:: Message = message_types:: Message {
170
- id : rumor . id . unwrap ( ) ,
175
+ id : rumor_id ,
171
176
pubkey : rumor. pubkey ,
172
177
kind : rumor. kind ,
173
178
mls_group_id : mls_group_id. clone ( ) ,
@@ -182,7 +187,7 @@ where
182
187
// Create processed_message to track state of message
183
188
let processed_message: message_types:: ProcessedMessage = message_types:: ProcessedMessage {
184
189
wrapper_event_id : event. id ,
185
- message_event_id : Some ( rumor . id . unwrap ( ) ) ,
190
+ message_event_id : Some ( rumor_id ) ,
186
191
processed_at : Timestamp :: now ( ) ,
187
192
state : message_types:: ProcessedMessageState :: Created ,
188
193
failure_reason : None ,
@@ -360,17 +365,19 @@ where
360
365
// The resulting serialized message is the MLS encrypted message that Bob sent
361
366
// Now Bob can process the MLS message content and do what's needed with it
362
367
match self . process_message_for_group ( & mut mls_group, & message_bytes) {
363
- Ok ( Some ( rumor) ) => {
368
+ Ok ( Some ( mut rumor) ) => {
369
+ let rumor_id: EventId = rumor. id ( ) ;
370
+
364
371
let processed_message = message_types:: ProcessedMessage {
365
372
wrapper_event_id : event. id ,
366
- message_event_id : Some ( rumor . id . unwrap ( ) ) ,
373
+ message_event_id : Some ( rumor_id ) ,
367
374
processed_at : Timestamp :: now ( ) ,
368
375
state : message_types:: ProcessedMessageState :: Processed ,
369
376
failure_reason : None ,
370
377
} ;
371
378
372
379
let message = message_types:: Message {
373
- id : rumor . id . unwrap ( ) ,
380
+ id : rumor_id ,
374
381
pubkey : rumor. pubkey ,
375
382
kind : rumor. kind ,
376
383
mls_group_id : group. mls_group_id . clone ( ) ,
@@ -421,18 +428,23 @@ where
421
428
match e {
422
429
Error :: CannotDecryptOwnMessage => {
423
430
tracing:: debug!( target: "nostr_mls::messages::process_message" , "Cannot decrypt own message, checking for cached message" ) ;
431
+
424
432
let mut processed_message = self
425
433
. storage ( )
426
434
. find_processed_message_by_event_id ( & event. id )
427
435
. map_err ( |e| Error :: Message ( e. to_string ( ) ) ) ?
428
436
. ok_or ( Error :: Message ( "Processed message not found" . to_string ( ) ) ) ?;
429
437
438
+ let message_event_id: EventId = processed_message
439
+ . message_event_id
440
+ . ok_or ( Error :: Message ( "Message event ID not found" . to_string ( ) ) ) ?;
441
+
430
442
// If the message is created, we need to update the state of the message and processed message
431
443
// If it's already processed, we don't need to do anything
432
444
match processed_message. state {
433
445
message_types:: ProcessedMessageState :: Created => {
434
446
let mut message = self
435
- . get_message ( & processed_message . message_event_id . unwrap ( ) ) ?
447
+ . get_message ( & message_event_id) ?
436
448
. ok_or ( Error :: Message ( "Message not found" . to_string ( ) ) ) ?;
437
449
438
450
message. state = message_types:: MessageState :: Processed ;
@@ -455,8 +467,7 @@ where
455
467
tracing:: debug!( target: "nostr_mls::messages::process_message" , "Message previously failed to process" ) ;
456
468
}
457
469
}
458
- let message =
459
- self . get_message ( & processed_message. message_event_id . unwrap ( ) ) ?;
470
+ let message = self . get_message ( & message_event_id) ?;
460
471
return Ok ( message) ;
461
472
}
462
473
_ => {
0 commit comments