Skip to content

Commit 7b98274

Browse files
committed
fix(deltachat-jsonrpc): do not fail get_draft if draft is deleted
1 parent ea385fa commit 7b98274

File tree

2 files changed

+19
-11
lines changed

2 files changed

+19
-11
lines changed

deltachat-jsonrpc/src/api.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1135,9 +1135,11 @@ impl CommandApi {
11351135
async fn get_message(&self, account_id: u32, msg_id: u32) -> Result<MessageObject> {
11361136
let ctx = self.get_context(account_id).await?;
11371137
let msg_id = MsgId::new(msg_id);
1138-
MessageObject::from_msg_id(&ctx, msg_id)
1138+
let message_object = MessageObject::from_msg_id(&ctx, msg_id)
11391139
.await
1140-
.with_context(|| format!("Failed to load message {msg_id} for account {account_id}"))
1140+
.with_context(|| format!("Failed to load message {msg_id} for account {account_id}"))?
1141+
.with_context(|| format!("Message {msg_id} does not exist for account {account_id}"))?;
1142+
Ok(message_object)
11411143
}
11421144

11431145
async fn get_message_html(&self, account_id: u32, message_id: u32) -> Result<Option<String>> {
@@ -1161,7 +1163,10 @@ impl CommandApi {
11611163
messages.insert(
11621164
message_id,
11631165
match message_result {
1164-
Ok(message) => MessageLoadResult::Message(message),
1166+
Ok(Some(message)) => MessageLoadResult::Message(message),
1167+
Ok(None) => MessageLoadResult::LoadingError {
1168+
error: "Message does not exist".to_string(),
1169+
},
11651170
Err(error) => MessageLoadResult::LoadingError {
11661171
error: format!("{error:#}"),
11671172
},
@@ -1999,9 +2004,7 @@ impl CommandApi {
19992004
async fn get_draft(&self, account_id: u32, chat_id: u32) -> Result<Option<MessageObject>> {
20002005
let ctx = self.get_context(account_id).await?;
20012006
if let Some(draft) = ChatId::new(chat_id).get_draft(&ctx).await? {
2002-
Ok(Some(
2003-
MessageObject::from_msg_id(&ctx, draft.get_id()).await?,
2004-
))
2007+
Ok(MessageObject::from_msg_id(&ctx, draft.get_id()).await?)
20052008
} else {
20062009
Ok(None)
20072010
}
@@ -2170,7 +2173,9 @@ impl CommandApi {
21702173
.await?;
21712174
}
21722175
let msg_id = chat::send_msg(&ctx, ChatId::new(chat_id), &mut message).await?;
2173-
let message = MessageObject::from_msg_id(&ctx, msg_id).await?;
2176+
let message = MessageObject::from_msg_id(&ctx, msg_id)
2177+
.await?
2178+
.context("Just sent message does not exist")?;
21742179
Ok((msg_id.to_u32(), message))
21752180
}
21762181

deltachat-jsonrpc/src/api/types/message.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,10 @@ enum MessageQuote {
112112
}
113113

114114
impl MessageObject {
115-
pub async fn from_msg_id(context: &Context, msg_id: MsgId) -> Result<Self> {
116-
let message = Message::load_from_db(context, msg_id).await?;
115+
pub async fn from_msg_id(context: &Context, msg_id: MsgId) -> Result<Option<Self>> {
116+
let Some(message) = Message::load_from_db_optional(context, msg_id).await? else {
117+
return Ok(None);
118+
};
117119

118120
let sender_contact = Contact::get_by_id(context, message.get_from_id())
119121
.await
@@ -183,7 +185,7 @@ impl MessageObject {
183185
.map(Into::into)
184186
.collect();
185187

186-
Ok(MessageObject {
188+
let message_object = MessageObject {
187189
id: msg_id.to_u32(),
188190
chat_id: message.get_chat_id().to_u32(),
189191
from_id: message.get_from_id().to_u32(),
@@ -244,7 +246,8 @@ impl MessageObject {
244246
reactions,
245247

246248
vcard_contact: vcard_contacts.first().cloned(),
247-
})
249+
};
250+
Ok(Some(message_object))
248251
}
249252
}
250253

0 commit comments

Comments
 (0)