From c47bd9c8e48de50610bfb107252d8f55af211ce6 Mon Sep 17 00:00:00 2001 From: curly Date: Wed, 15 Feb 2023 12:33:12 -0700 Subject: keep deleted message content in db, cleanup --- src/database.rs | 73 ++++++++++++++++++++++++--------------------------------- 1 file changed, 31 insertions(+), 42 deletions(-) (limited to 'src') diff --git a/src/database.rs b/src/database.rs index 89cc213..0faa0d3 100644 --- a/src/database.rs +++ b/src/database.rs @@ -13,26 +13,8 @@ impl Database { let statement = self.db.prepare(query).unwrap().into_iter().bind((":id", id as i64)).unwrap(); for row in statement.map(|row| row.unwrap()) { - let msg = row.read::<&str, _>("message"); - let reply_to = row.read::, _>("reply_to"); - let reply_to = match reply_to { - Some(n) => Some(n.into()), - None => None - }; - - let date = row.read::("date").into(); - let deleted = row.read::("deleted"); - let deleted = if deleted < 1 { - false - } else { - true - }; - - let sender = row.read::("sender").into(); - let id = row.read::("id").into(); - + let msg = self.message_from_row(row); - let msg = Message::construct(String::from(msg), sender, id, reply_to, date, deleted); return Some(msg) } @@ -65,6 +47,34 @@ impl Database { } } + fn message_from_row(&self, row: sqlite::Row) -> Message{ + let reply_to = row.read::, _>("reply_to"); + let reply_to = match reply_to { + Some(n) => Some(n.into()), + None => None + }; + + let date = row.read::("date").into(); + let deleted = row.read::("deleted"); + let deleted = if deleted < 1 { + false + } else { + true + }; + + let msg = if deleted { + "" + } else { + row.read::<&str, _>("message") + }; + + let sender = row.read::("sender").into(); + let id = row.read::("id").into(); + + + Message::construct(String::from(msg), sender, id, reply_to, date, deleted) + } + pub fn get_message_list(&self, id_start: UID, id_end: UID) -> Vec { let query = "SELECT * FROM messages WHERE id BETWEEN :id_start AND :id_end"; let statement = self.db.prepare(query).unwrap().into_iter().bind::<&[(_, sqlite::Value)]>(&[ @@ -75,27 +85,7 @@ impl Database { let mut message_id_vec: Vec = vec![]; for row in statement.map(|row| row.unwrap()) { - let msg = row.read::<&str, _>("message"); - let reply_to = row.read::, _>("reply_to"); - let reply_to = match reply_to { - Some(n) => Some(n.into()), - None => None - }; - - let date = row.read::("date").into(); - let deleted = row.read::("deleted"); - let deleted = if deleted < 1 { - false - } else { - true - }; - - let sender = row.read::("sender").into(); - let id = row.read::("id").into(); - - - let msg = Message::construct(String::from(msg), sender, id, reply_to, date, deleted); - + let msg = self.message_from_row(row); message_id_vec.push(msg); } @@ -151,10 +141,9 @@ impl Database { } pub fn delete_message(&mut self, id: UID) -> Result<&'static str, &'static str> { - let query = "UPDATE messages SET message=:message, deleted=:deleted WHERE id IS :id AND deleted IS false"; + let query = "UPDATE messages SET deleted=:deleted WHERE id IS :id AND deleted IS false"; let statement = self.db.prepare(query).unwrap().into_iter() .bind::<&[(_, sqlite::Value)]>(&[ - (":message", "".into()), (":deleted", 1.into()), (":id", id.into()), ]); -- cgit v1.2.3