diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/database.rs | 73 |
1 files changed, 31 insertions, 42 deletions
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::<Option<i64>, _>("reply_to"); - let reply_to = match reply_to { - Some(n) => Some(n.into()), - None => None - }; - - let date = row.read::<i64, _>("date").into(); - let deleted = row.read::<i64, _>("deleted"); - let deleted = if deleted < 1 { - false - } else { - true - }; - - let sender = row.read::<i64, _>("sender").into(); - let id = row.read::<i64, _>("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::<Option<i64>, _>("reply_to"); + let reply_to = match reply_to { + Some(n) => Some(n.into()), + None => None + }; + + let date = row.read::<i64, _>("date").into(); + let deleted = row.read::<i64, _>("deleted"); + let deleted = if deleted < 1 { + false + } else { + true + }; + + let msg = if deleted { + "" + } else { + row.read::<&str, _>("message") + }; + + let sender = row.read::<i64, _>("sender").into(); + let id = row.read::<i64, _>("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<Message> { 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<Message> = vec![]; for row in statement.map(|row| row.unwrap()) { - let msg = row.read::<&str, _>("message"); - let reply_to = row.read::<Option<i64>, _>("reply_to"); - let reply_to = match reply_to { - Some(n) => Some(n.into()), - None => None - }; - - let date = row.read::<i64, _>("date").into(); - let deleted = row.read::<i64, _>("deleted"); - let deleted = if deleted < 1 { - false - } else { - true - }; - - let sender = row.read::<i64, _>("sender").into(); - let id = row.read::<i64, _>("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()), ]); |