deleting rooms

This commit is contained in:
2024-10-13 23:24:46 -04:00
Unverified
parent 5a628d46ce
commit 4441aa3f4d
2 changed files with 51 additions and 5 deletions

View File

@@ -90,6 +90,8 @@ pub struct RealmApp {
#[serde(skip)] #[serde(skip)]
pub add_room_channel: (Sender<Result<CServer, ErrorCode>>, Receiver<Result<CServer, ErrorCode>>), pub add_room_channel: (Sender<Result<CServer, ErrorCode>>, Receiver<Result<CServer, ErrorCode>>),
#[serde(skip)] #[serde(skip)]
pub delete_room_channel: (Sender<Result<CServer, ErrorCode>>, Receiver<Result<CServer, ErrorCode>>),
#[serde(skip)]
pub room_changes_channel: (Sender<Result<(CServer, Vec<Room>), ErrorCode>>, Receiver<Result<(CServer, Vec<Room>), ErrorCode>>) pub room_changes_channel: (Sender<Result<(CServer, Vec<Room>), ErrorCode>>, Receiver<Result<(CServer, Vec<Room>), ErrorCode>>)
} }
@@ -133,6 +135,7 @@ impl Default for RealmApp {
leave_server_channel: broadcast::channel(10), leave_server_channel: broadcast::channel(10),
fetching_servers_channel: broadcast::channel(10), fetching_servers_channel: broadcast::channel(10),
add_room_channel: broadcast::channel(10), add_room_channel: broadcast::channel(10),
delete_room_channel: broadcast::channel(10),
room_changes_channel: broadcast::channel(10), room_changes_channel: broadcast::channel(10),
} }
} }
@@ -412,6 +415,8 @@ impl eframe::App for RealmApp {
Ok((serverid, domain, port)) => { Ok((serverid, domain, port)) => {
info!("Successfully left a server"); info!("Successfully left a server");
self.active_servers.as_mut().unwrap().retain(|s| !s.server_id.eq(&serverid)); 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 send_channel = self.remove_server_channel.0.clone();
let auth_address = self.current_user.clone().unwrap().auth_address; let auth_address = self.current_user.clone().unwrap().auth_address;
let username = self.current_user.clone().unwrap().username; 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 // Fetching rooms
while let Ok(result) = self.room_changes_channel.1.try_recv() { while let Ok(result) = self.room_changes_channel.1.try_recv() {
match result { match result {

View File

@@ -4,6 +4,7 @@ use tarpc::tokio_serde::formats::Json;
use realm_auth::types::RealmAuthClient; use realm_auth::types::RealmAuthClient;
use realm_shared::types::ErrorCode::RPCError; use realm_shared::types::ErrorCode::RPCError;
use regex::Regex; use regex::Regex;
use tarpc::client::RpcError;
use tracing::log::*; use tracing::log::*;
use realm_server::types::{RealmChatClient, Room}; use realm_server::types::{RealmChatClient, Room};
use realm_shared::stoken; use realm_shared::stoken;
@@ -120,8 +121,8 @@ pub fn servers(app: &mut RealmApp, ctx: &Context) {
pub fn rooms(app: &mut RealmApp, ctx: &Context) { pub fn rooms(app: &mut RealmApp, ctx: &Context) {
egui::SidePanel::left("rooms").show(ctx, |ui| { egui::SidePanel::left("rooms").show(ctx, |ui| {
let mut current_server: Option<&CServer> = None; let mut current_server: Option<CServer> = None;
if let Some(servers) = &app.active_servers { if let Some(servers) = app.active_servers.clone() {
for server in servers { for server in servers {
if server.server_id.eq(&app.selected_serverid) { if server.server_id.eq(&app.selected_serverid) {
current_server = Some(server); current_server = Some(server);
@@ -131,16 +132,39 @@ pub fn rooms(app: &mut RealmApp, ctx: &Context) {
ui.horizontal(|ui| { ui.horizontal(|ui| {
ui.heading("Rooms"); ui.heading("Rooms");
if let Some(server) = current_server { if let Some(server) = current_server.clone() {
if server.is_admin && ui.button("+").clicked() { if server.is_admin && ui.button("+").clicked() {
app.room_window_open = true; 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(); ui.separator();
if let Some(server) = current_server { if let Some(server) = current_server {
for room in &server.rooms { for room in &server.rooms {
if ui.add(SelectableLabel::new(room.roomid.eq(&app.selected_roomid), room.roomid.clone())).clicked() { if ui.add(SelectableLabel::new(room.roomid.eq(&app.selected_roomid), room.roomid.clone())).clicked() {