aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mumctl/src/main.rs10
-rw-r--r--mumd/src/state.rs41
-rw-r--r--mumlib/src/command.rs3
-rw-r--r--mumlib/src/error.rs6
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),
}
}