diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-06-07 17:58:06 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-06-07 17:58:06 +0200 |
| commit | c6d63f0b5c231bfc42128a670923a660fabd1835 (patch) | |
| tree | 44af7c6c6937eda97a3f8bafb575b9d763d36aa3 | |
| parent | be76c2aa51733a0cf495e92659fbcbe527f41149 (diff) | |
| download | mum-c6d63f0b5c231bfc42128a670923a660fabd1835.tar.gz | |
default send message to current channel if no channel specified
| -rw-r--r-- | mumctl/src/main.rs | 12 | ||||
| -rw-r--r-- | mumd/src/state.rs | 22 | ||||
| -rw-r--r-- | mumd/src/state/server.rs | 6 | ||||
| -rw-r--r-- | mumlib/src/command.rs | 1 | ||||
| -rw-r--r-- | mumlib/src/error.rs | 2 |
5 files changed, 34 insertions, 9 deletions
diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs index bde24a1..7d02582 100644 --- a/mumctl/src/main.rs +++ b/mumctl/src/main.rs @@ -381,10 +381,14 @@ fn match_opt() -> Result<(), Error> { } => { let msg = MumCommand::SendMessage { message, - targets: names - .into_iter() - .map(|name| MessageTarget::Channel { name, recursive }) - .collect(), + targets: if !names.is_empty() { + names + .into_iter() + .map(|name| MessageTarget::Channel { name, recursive }) + .collect() + } else { + vec![MessageTarget::CurrentChannel { recursive }] + }, }; send_command(msg)??; } 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 } diff --git a/mumlib/src/command.rs b/mumlib/src/command.rs index 351d7f6..f8a8fc8 100644 --- a/mumlib/src/command.rs +++ b/mumlib/src/command.rs @@ -69,6 +69,7 @@ pub enum CommandResponse { #[derive(Clone, Debug, Deserialize, Serialize)] pub enum MessageTarget { + CurrentChannel {recursive: bool }, Channel { recursive: bool, name: String }, User { name: String }, } diff --git a/mumlib/src/error.rs b/mumlib/src/error.rs index e88bd97..83f97b8 100644 --- a/mumlib/src/error.rs +++ b/mumlib/src/error.rs @@ -11,6 +11,7 @@ pub enum Error { InvalidServerAddr(String, u16), InvalidUsername(String), InvalidServerPassword, + NotConnectedToChannel, } impl std::error::Error for Error {} @@ -26,6 +27,7 @@ impl fmt::Display for Error { } Error::InvalidUsername(username) => write!(f, "Invalid username: {}", username), Error::InvalidServerPassword => write!(f, "Invalid server password"), + Error::NotConnectedToChannel => write!(f, "Not connected to a channel"), } } } |
