diff options
Diffstat (limited to 'mumd/src')
| -rw-r--r-- | mumd/src/state.rs | 22 | ||||
| -rw-r--r-- | mumd/src/state/server.rs | 6 |
2 files changed, 23 insertions, 5 deletions
diff --git a/mumd/src/state.rs b/mumd/src/state.rs index 84583e0..a57b53d 100644 --- a/mumd/src/state.rs +++ b/mumd/src/state.rs @@ -687,14 +687,26 @@ pub fn handle_command( for target in targets { match target { + MessageTarget::CurrentChannel { recursive } => { + let channel_id = match state.server().unwrap().current_channel() { + Some(channel)=> channel.0, + None => return now!(Err(Error::NotConnectedToChannel)), + }; + + if recursive { + msg.mut_tree_id() + } else { + msg.mut_channel_id() + } + .push(channel_id); + } MessageTarget::Channel { recursive, name } => { - let channel_id = state.server().unwrap().channel_name(&name); + let channel = state.server().unwrap().channel_name(&name); - let channel_id = match channel_id { - Ok(id) => id, + let channel_id = match channel { + Ok(channel) => channel.0, Err(e) => return now!(Err(Error::ChannelIdentifierError(name, e))), - } - .0; + }; if recursive { msg.mut_tree_id() diff --git a/mumd/src/state/server.rs b/mumd/src/state/server.rs index 869940a..58c614c 100644 --- a/mumd/src/state/server.rs +++ b/mumd/src/state/server.rs @@ -132,6 +132,12 @@ impl Server { }) } + pub fn current_channel(&self) -> Option<(u32, &Channel)> { + let channel_id = self.users().get(&self.session_id()?)?.channel(); + let channel = self.channels().get(&channel_id)?; + Some((channel_id, channel)) + } + pub fn host_mut(&mut self) -> &mut Option<String> { &mut self.host } |
