From 4441aa3f4d465118060f8ce6a91b5559e501a6a7 Mon Sep 17 00:00:00 2001 From: Joshua Higgins Date: Sun, 13 Oct 2024 23:24:46 -0400 Subject: [PATCH] deleting rooms --- client/src/app.rs | 22 ++++++++++++++++++++++ client/src/ui/gui.rs | 34 +++++++++++++++++++++++++++++----- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/client/src/app.rs b/client/src/app.rs index d5c2aa5..f7c9e8d 100644 --- a/client/src/app.rs +++ b/client/src/app.rs @@ -90,6 +90,8 @@ pub struct RealmApp { #[serde(skip)] pub add_room_channel: (Sender>, Receiver>), #[serde(skip)] + pub delete_room_channel: (Sender>, Receiver>), + #[serde(skip)] pub room_changes_channel: (Sender), ErrorCode>>, Receiver), ErrorCode>>) } @@ -133,6 +135,7 @@ impl Default for RealmApp { leave_server_channel: broadcast::channel(10), fetching_servers_channel: broadcast::channel(10), add_room_channel: broadcast::channel(10), + delete_room_channel: broadcast::channel(10), room_changes_channel: broadcast::channel(10), } } @@ -412,6 +415,8 @@ impl eframe::App for RealmApp { Ok((serverid, domain, port)) => { info!("Successfully left a server"); self.active_servers.as_mut().unwrap().retain(|s| !s.server_id.eq(&serverid)); + self.selected_serverid.clear(); + self.selected_roomid.clear(); let send_channel = self.remove_server_channel.0.clone(); let auth_address = self.current_user.clone().unwrap().auth_address; let username = self.current_user.clone().unwrap().username; @@ -491,6 +496,23 @@ impl eframe::App for RealmApp { } } + // Deleting a room + while let Ok(result) = self.delete_room_channel.1.try_recv() { + match result { + Ok(server) => { + info!("Got room delete! Fetching them..."); + self.selected_roomid.clear(); + fetch_rooms_data( + self.room_changes_channel.0.clone(), + server, + self.current_user.as_ref().unwrap().token.clone(), + self.current_user.as_ref().unwrap().username.clone() + ); + } + Err(e) => error!("Error deleting room: {:?}", e), + } + } + // Fetching rooms while let Ok(result) = self.room_changes_channel.1.try_recv() { match result { diff --git a/client/src/ui/gui.rs b/client/src/ui/gui.rs index d0771d0..b5dbf0d 100644 --- a/client/src/ui/gui.rs +++ b/client/src/ui/gui.rs @@ -4,6 +4,7 @@ use tarpc::tokio_serde::formats::Json; use realm_auth::types::RealmAuthClient; use realm_shared::types::ErrorCode::RPCError; use regex::Regex; +use tarpc::client::RpcError; use tracing::log::*; use realm_server::types::{RealmChatClient, Room}; use realm_shared::stoken; @@ -120,8 +121,8 @@ pub fn servers(app: &mut RealmApp, ctx: &Context) { pub fn rooms(app: &mut RealmApp, ctx: &Context) { egui::SidePanel::left("rooms").show(ctx, |ui| { - let mut current_server: Option<&CServer> = None; - if let Some(servers) = &app.active_servers { + let mut current_server: Option = None; + if let Some(servers) = app.active_servers.clone() { for server in servers { if server.server_id.eq(&app.selected_serverid) { current_server = Some(server); @@ -131,16 +132,39 @@ pub fn rooms(app: &mut RealmApp, ctx: &Context) { ui.horizontal(|ui| { ui.heading("Rooms"); - if let Some(server) = current_server { + if let Some(server) = current_server.clone() { if server.is_admin && ui.button("+").clicked() { app.room_window_open = true; } + if server.is_admin && !app.selected_roomid.is_empty() && ui.button("-").clicked() { + let token = app.current_user.as_ref().unwrap().token.clone(); + let roomid = app.selected_roomid.clone(); + let userid = app.current_user.as_ref().unwrap().username.clone(); + let send_channel = app.delete_room_channel.0.clone(); + let _handle = tokio::spawn(async move { + let result = server.tarpc_conn.delete_room( + context::current(), + stoken(&token, &server.server_id, &server.domain, server.port), + userid, + roomid + ).await; + + match result { + Ok(r) => { + match r { + Ok(_) => send_channel.send(Ok(server)).unwrap(), + Err(e) => send_channel.send(Err(e)).unwrap() + } + }, + Err(_) => send_channel.send(Err(RPCError)).unwrap(), + } + }); + } } }); ui.separator(); - - + if let Some(server) = current_server { for room in &server.rooms { if ui.add(SelectableLabel::new(room.roomid.eq(&app.selected_roomid), room.roomid.clone())).clicked() {