deleting rooms
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user