Skip to content

Commit

Permalink
fix: ChatId::maybe_delete_draft: Don't delete message if it's not a d…
Browse files Browse the repository at this point in the history
…raft anymore (#6053)

Follow-up to 07fa9c3.
  • Loading branch information
iequidoo committed Oct 19, 2024
1 parent 65b970a commit df4fd82
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 23 deletions.
15 changes: 8 additions & 7 deletions src/chat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -866,13 +866,14 @@ impl ChatId {
///
/// Returns `true`, if message was deleted, `false` otherwise.
async fn maybe_delete_draft(self, context: &Context) -> Result<bool> {
match self.get_draft_msg_id(context).await? {
Some(msg_id) => {
msg_id.delete_from_db(context).await?;
Ok(true)
}
None => Ok(false),
}
Ok(context
.sql
.execute(
"DELETE FROM msgs WHERE chat_id=? AND state=?",
(self, MessageState::OutDraft),
)
.await?
> 0)
}

/// Set provided message as draft message for specified chat.
Expand Down
4 changes: 3 additions & 1 deletion src/download.rs
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,9 @@ mod tests {
let msg = Message::load_from_db(&t, msg_id).await?;
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.
msg_id
.update_download_state(&t, DownloadState::Done)
Expand Down
15 changes: 0 additions & 15 deletions src/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,21 +148,6 @@ impl MsgId {
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<()> {
update_msg_state(context, self, MessageState::OutDelivered).await?;
let chat_id: ChatId = context
Expand Down
24 changes: 24 additions & 0 deletions src/sql/migrations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1046,6 +1046,30 @@ CREATE INDEX msgs_status_updates_index2 ON msgs_status_updates (uid);
.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
.get_raw_config_int(VERSION_CFG)
.await?
Expand Down

0 comments on commit df4fd82

Please sign in to comment.