aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/state.rs
diff options
context:
space:
mode:
authorEskil <eskilq@kth.se>2020-11-03 22:02:32 +0100
committerEskil <eskilq@kth.se>2020-11-03 22:02:32 +0100
commitd6496cb0f6abba855b04338fa8bc5aaa89487c29 (patch)
tree929f5c18babe5bc27676c88aae6b9d3795b09917 /mumd/src/state.rs
parent831182b69eb1bbfedfad1288b73a822241f18d25 (diff)
parent972c11fe66c17728981ec57796c78fb70c7bd180 (diff)
downloadmum-d6496cb0f6abba855b04338fa8bc5aaa89487c29.tar.gz
Merge branch 'audio-volume' into 'main'
Refactor of config and add support for changing global output volume and individual user's volume See merge request gustav/mum!28
Diffstat (limited to 'mumd/src/state.rs')
-rw-r--r--mumd/src/state.rs45
1 files changed, 32 insertions, 13 deletions
diff --git a/mumd/src/state.rs b/mumd/src/state.rs
index 306ded8..56ce030 100644
--- a/mumd/src/state.rs
+++ b/mumd/src/state.rs
@@ -53,7 +53,7 @@ pub enum StatePhase {
}
pub struct State {
- config: Option<Config>,
+ config: Config,
server: Option<Server>,
audio: Audio,
@@ -217,12 +217,35 @@ impl State {
.unwrap();
now!(Ok(None))
}
+ Command::ConfigReload => {
+ self.reload_config();
+ now!(Ok(None))
+ }
Command::InputVolumeSet(volume) => {
self.audio.set_input_volume(volume);
now!(Ok(None))
}
- Command::ConfigReload => {
- self.reload_config();
+ Command::OutputVolumeSet(volume) => {
+ self.audio.set_output_volume(volume);
+ now!(Ok(None))
+ }
+ Command::UserVolumeSet(string, volume) => {
+ if !matches!(*self.phase_receiver().borrow(), StatePhase::Connected) {
+ return now!(Err(Error::DisconnectedError));
+ }
+ let user_id = match self
+ .server()
+ .unwrap()
+ .users()
+ .iter()
+ .find(|e| e.1.name() == &string)
+ .map(|e| *e.0)
+ {
+ None => return now!(Err(Error::InvalidUsernameError(string))),
+ Some(v) => v,
+ };
+
+ self.audio.set_user_volume(user_id, volume);
now!(Ok(None))
}
Command::ServerStatus { host, port } => ExecutionContext::Ping(
@@ -379,16 +402,12 @@ impl State {
}
pub fn reload_config(&mut self) {
- if let Some(config) = mumlib::config::read_default_cfg() {
- self.config = Some(config);
- let config = &self.config.as_ref().unwrap();
- if let Some(audio_config) = &config.audio {
- if let Some(input_volume) = audio_config.input_volume {
- self.audio.set_input_volume(input_volume);
- }
- }
- } else {
- warn!("config file not found");
+ self.config = mumlib::config::read_default_cfg();
+ if let Some(input_volume) = self.config.audio.input_volume {
+ self.audio.set_input_volume(input_volume);
+ }
+ if let Some(output_volume) = self.config.audio.output_volume {
+ self.audio.set_output_volume(output_volume);
}
}