diff --git a/src/message.rs b/src/message.rs index 6d680b8af..da3bd9025 100644 --- a/src/message.rs +++ b/src/message.rs @@ -459,7 +459,19 @@ impl Message { } /// Loads message with given ID from the database. + /// + /// Returns an error if the message does not exist. pub async fn load_from_db(context: &Context, id: MsgId) -> Result { + let message = Self::load_from_db_optional(context, id) + .await? + .context("Message {id} does not exist")?; + Ok(message) + } + + /// Loads message with given ID from the database. + /// + /// Returns `None` if the message does not exist. + pub async fn load_from_db_optional(context: &Context, id: MsgId) -> Result> { ensure!( !id.is_special(), "Can not load special message ID {} from DB", @@ -467,7 +479,7 @@ impl Message { ); let msg = context .sql - .query_row( + .query_row_optional( concat!( "SELECT", " m.id AS id,", diff --git a/src/reaction.rs b/src/reaction.rs index 946a0b379..edc9f4d7f 100644 --- a/src/reaction.rs +++ b/src/reaction.rs @@ -348,7 +348,9 @@ impl Chat { // The message reacted to may be deleted physically (`load_from_db()` fails) or marked as a tombstone (`is_trash()`). // These are no errors as `Param::LastReaction*` are just weak pointers. // Instead, just return `Ok(None)` and let the caller create another summary. - if let Ok(reaction_msg) = Message::load_from_db(context, reaction_msg_id).await { + if let Some(reaction_msg) = + Message::load_from_db_optional(context, reaction_msg_id).await? + { if !reaction_msg.chat_id.is_trash() { let reaction_contact_id = ContactId::new( self.param