diff options
| -rw-r--r-- | mumctl/src/main.rs | 10 | ||||
| -rw-r--r-- | mumd/src/state.rs | 41 | ||||
| -rw-r--r-- | mumlib/src/command.rs | 3 | ||||
| -rw-r--r-- | mumlib/src/error.rs | 6 |
4 files changed, 50 insertions, 10 deletions
diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs index 11c51e6..2805545 100644 --- a/mumctl/src/main.rs +++ b/mumctl/src/main.rs @@ -128,15 +128,11 @@ fn main() { } else if let Some(matches) = matches.subcommand_matches("add") { match_server_add(matches, &mut config); } else if let Some(_) = matches.subcommand_matches("list") { - let servers = config - .as_ref() - .map(|e| e.servers.as_ref().map(|e| e.clone()).unwrap_or(Vec::new())) - .unwrap_or(Vec::new()); - if servers.len() == 0 { + if config.servers.len() == 0 { println!("{} No servers in config", "warning:".yellow()); } - for (server, response) in servers - .into_iter() + for (server, response) in config.servers + .iter() .map(|e| { let response = send_command(Command::ServerStatus { host: e.host.clone(), diff --git a/mumd/src/state.rs b/mumd/src/state.rs index 56ce030..d1d5510 100644 --- a/mumd/src/state.rs +++ b/mumd/src/state.rs @@ -229,6 +229,47 @@ impl State { self.audio.set_output_volume(volume); now!(Ok(None)) } + Command::DeafenSelf => { + if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) { + return now!(Err(Error::DisconnectedError)); + } + + let mut msg = msgs::UserState::new(); + msg.set_self_deaf(true); + self.packet_sender.send(msg.into()).unwrap(); + + now!(Ok(None)) + } + Command::MuteSelf => { + if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) { + return now!(Err(Error::DisconnectedError)); + } + + let mut msg = msgs::UserState::new(); + msg.set_self_mute(true); + self.packet_sender.send(msg.into()).unwrap(); + + now!(Ok(None)) + } + Command::MuteOther(string) => { + if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) { + return now!(Err(Error::DisconnectedError)); + } + + let id = self.server().unwrap().users().iter().find(|(_, user)| user.name() == &string); + + let id = match id { + Some(id) => *id.0, + None => return now!(Err(Error::InvalidUserIdentifierError(string))), + }; + + let mut msg = msgs::UserState::new(); + msg.set_mute(true); + msg.set_session(id); + self.packet_sender.send(msg.into()).unwrap(); + + return now!(Ok(None)); + } Command::UserVolumeSet(string, volume) => { if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) { return now!(Err(Error::DisconnectedError)); diff --git a/mumlib/src/command.rs b/mumlib/src/command.rs index 2fed4f1..28b4d79 100644 --- a/mumlib/src/command.rs +++ b/mumlib/src/command.rs @@ -20,6 +20,9 @@ pub enum Command { }, ServerDisconnect, Status, + DeafenSelf, + MuteSelf, + MuteOther(String), ServerStatus { host: String, port: u16, diff --git a/mumlib/src/error.rs b/mumlib/src/error.rs index 1e79b9c..c9eff52 100644 --- a/mumlib/src/error.rs +++ b/mumlib/src/error.rs @@ -9,6 +9,7 @@ pub enum Error { DisconnectedError, AlreadyConnectedError, ChannelIdentifierError(String, ChannelIdentifierError), + InvalidUserIdentifierError(String), InvalidServerAddrError(String, u16), InvalidUsernameError(String), } @@ -19,9 +20,8 @@ impl Display for Error { Error::DisconnectedError => write!(f, "Not connected to a server"), Error::AlreadyConnectedError => write!(f, "Already connected to a server"), Error::ChannelIdentifierError(id, kind) => write!(f, "{}: {}", kind, id), - Error::InvalidServerAddrError(addr, port) => { - write!(f, "Invalid server address: {}: {}", addr, port) - } + Error::InvalidServerAddrError(addr, port) => write!(f, "Invalid server address: {}: {}", addr, port), + Error::InvalidUserIdentifierError(name) => write!(f, "Invalid username: {}", name), Error::InvalidUsernameError(username) => write!(f, "Invalid username: {}", username), } } |
