diff --git a/src/ui/rooms.rs b/src/ui/rooms.rs index 42c55c5..17817d8 100644 --- a/src/ui/rooms.rs +++ b/src/ui/rooms.rs @@ -225,6 +225,15 @@ impl Rooms { } } } + KeyCode::Char('D') => { + if let Some(cursor) = &self.cursor { + if let Some(room) = rooms.get(cursor.index) { + self.euph_rooms.remove(room); + self.euph_chats.remove(room); + self.vault.euph(room.clone()).delete(); + } + } + } _ => {} } } diff --git a/src/vault/euph.rs b/src/vault/euph.rs index e38a951..bd6a194 100644 --- a/src/vault/euph.rs +++ b/src/vault/euph.rs @@ -100,6 +100,11 @@ impl EuphVault { let _ = self.tx.send(request.into()); } + pub fn delete(self) { + let request = EuphRequest::Delete { room: self.room }; + let _ = self.tx.send(request.into()); + } + pub fn add_message(&self, msg: Message, prev_msg: Option) { let request = EuphRequest::AddMsg { room: self.room.clone(), @@ -210,6 +215,9 @@ pub(super) enum EuphRequest { Join { room: String, }, + Delete { + room: String, + }, AddMsg { room: String, msg: Message, @@ -259,6 +267,7 @@ impl EuphRequest { let result = match self { EuphRequest::Rooms { result } => Self::rooms(conn, result), EuphRequest::Join { room } => Self::join(conn, room), + EuphRequest::Delete { room } => Self::delete(conn, room), EuphRequest::AddMsg { room, msg, @@ -315,6 +324,17 @@ impl EuphRequest { Ok(()) } + fn delete(conn: &mut Connection, room: String) -> rusqlite::Result<()> { + conn.execute( + " + DELETE FROM euph_rooms + WHERE room = ? + ", + [room], + )?; + Ok(()) + } + fn insert_msgs(tx: &Transaction, room: &str, msgs: Vec) -> rusqlite::Result<()> { let mut insert_msg = tx.prepare( "