aboutsummaryrefslogtreecommitdiff
path: root/src/database.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/database.rs')
-rw-r--r--src/database.rs73
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()),
]);