mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 09:26:29 +03:00
fix: ChatId::maybe_delete_draft: Don't delete message if it's not a draft anymore (#6053)
Follow-up to 07fa9c35ee.
This commit is contained in:
15
src/chat.rs
15
src/chat.rs
@@ -866,13 +866,14 @@ impl ChatId {
|
|||||||
///
|
///
|
||||||
/// Returns `true`, if message was deleted, `false` otherwise.
|
/// Returns `true`, if message was deleted, `false` otherwise.
|
||||||
async fn maybe_delete_draft(self, context: &Context) -> Result<bool> {
|
async fn maybe_delete_draft(self, context: &Context) -> Result<bool> {
|
||||||
match self.get_draft_msg_id(context).await? {
|
Ok(context
|
||||||
Some(msg_id) => {
|
.sql
|
||||||
msg_id.delete_from_db(context).await?;
|
.execute(
|
||||||
Ok(true)
|
"DELETE FROM msgs WHERE chat_id=? AND state=?",
|
||||||
}
|
(self, MessageState::OutDraft),
|
||||||
None => Ok(false),
|
)
|
||||||
}
|
.await?
|
||||||
|
> 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Set provided message as draft message for specified chat.
|
/// Set provided message as draft message for specified chat.
|
||||||
|
|||||||
@@ -335,7 +335,9 @@ mod tests {
|
|||||||
let msg = Message::load_from_db(&t, msg_id).await?;
|
let msg = Message::load_from_db(&t, msg_id).await?;
|
||||||
assert_eq!(msg.download_state(), *s);
|
assert_eq!(msg.download_state(), *s);
|
||||||
}
|
}
|
||||||
msg_id.delete_from_db(&t).await?;
|
t.sql
|
||||||
|
.execute("DELETE FROM msgs WHERE id=?", (msg_id,))
|
||||||
|
.await?;
|
||||||
// Nothing to do is ok.
|
// Nothing to do is ok.
|
||||||
msg_id
|
msg_id
|
||||||
.update_download_state(&t, DownloadState::Done)
|
.update_download_state(&t, DownloadState::Done)
|
||||||
|
|||||||
@@ -148,21 +148,6 @@ impl MsgId {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Deletes a message, corresponding MDNs and unsent SMTP messages from the database.
|
|
||||||
pub(crate) async fn delete_from_db(self, context: &Context) -> Result<()> {
|
|
||||||
context
|
|
||||||
.sql
|
|
||||||
.transaction(move |transaction| {
|
|
||||||
transaction.execute("DELETE FROM smtp WHERE msg_id=?", (self,))?;
|
|
||||||
transaction.execute("DELETE FROM msgs_mdns WHERE msg_id=?", (self,))?;
|
|
||||||
transaction.execute("DELETE FROM msgs_status_updates WHERE msg_id=?", (self,))?;
|
|
||||||
transaction.execute("DELETE FROM msgs WHERE id=?", (self,))?;
|
|
||||||
Ok(())
|
|
||||||
})
|
|
||||||
.await?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) async fn set_delivered(self, context: &Context) -> Result<()> {
|
pub(crate) async fn set_delivered(self, context: &Context) -> Result<()> {
|
||||||
update_msg_state(context, self, MessageState::OutDelivered).await?;
|
update_msg_state(context, self, MessageState::OutDelivered).await?;
|
||||||
let chat_id: ChatId = context
|
let chat_id: ChatId = context
|
||||||
|
|||||||
@@ -1046,6 +1046,30 @@ CREATE INDEX msgs_status_updates_index2 ON msgs_status_updates (uid);
|
|||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inc_and_check(&mut migration_version, 123)?;
|
||||||
|
if dbversion < migration_version {
|
||||||
|
// Add FOREIGN KEY(msg_id).
|
||||||
|
sql.execute_migration(
|
||||||
|
"CREATE TABLE new_msgs_status_updates (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
msg_id INTEGER,
|
||||||
|
update_item TEXT DEFAULT '',
|
||||||
|
uid TEXT UNIQUE,
|
||||||
|
FOREIGN KEY(msg_id) REFERENCES msgs(id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
INSERT OR IGNORE INTO new_msgs_status_updates SELECT
|
||||||
|
id, msg_id, update_item, uid
|
||||||
|
FROM msgs_status_updates;
|
||||||
|
DROP TABLE msgs_status_updates;
|
||||||
|
ALTER TABLE new_msgs_status_updates RENAME TO msgs_status_updates;
|
||||||
|
CREATE INDEX msgs_status_updates_index1 ON msgs_status_updates (msg_id);
|
||||||
|
CREATE INDEX msgs_status_updates_index2 ON msgs_status_updates (uid);
|
||||||
|
",
|
||||||
|
migration_version,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
}
|
||||||
|
|
||||||
let new_version = sql
|
let new_version = sql
|
||||||
.get_raw_config_int(VERSION_CFG)
|
.get_raw_config_int(VERSION_CFG)
|
||||||
.await?
|
.await?
|
||||||
|
|||||||
Reference in New Issue
Block a user