aboutsummaryrefslogtreecommitdiffstats
path: root/mumctl/src
diff options
context:
space:
mode:
authorEskil Queseth <eskilq@kth.se>2020-10-17 18:39:36 +0200
committerEskil Queseth <eskilq@kth.se>2020-10-17 18:39:36 +0200
commitc873e4250c58d872763129bff2c0b0e6c91c0a2a (patch)
tree1a55459dd031e5c56ce6ce0db943564aa97baace /mumctl/src
parentb10d20a20496eb9287975fc9fd9b688d59896031 (diff)
downloadmum-c873e4250c58d872763129bff2c0b0e6c91c0a2a.tar.gz
add pretty printing for mumctl status
Diffstat (limited to 'mumctl/src')
-rw-r--r--mumctl/src/main.rs19
1 files changed, 16 insertions, 3 deletions
diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs
index cfd48f8..c73b793 100644
--- a/mumctl/src/main.rs
+++ b/mumctl/src/main.rs
@@ -6,6 +6,8 @@ use std::{fs, io, iter};
use colored::Colorize;
use mumlib::state::Channel;
+const INDENTATION: &str = " ";
+
macro_rules! err_print {
($func:expr) => {
if let Err(e) = $func {
@@ -84,7 +86,18 @@ fn main() {
} else if let Some(_matches) = matches.subcommand_matches("status") {
match send_command(Command::Status) {
Ok(res) => {
- println!("{:#?}", res.unwrap());
+ match res {
+ Some(CommandResponse::Status { server_state }) => {
+ println!("Connected to {} as {}", server_state.host, server_state.username);
+ let own_channel = server_state.channels.iter().find(|e| e.users.iter().any(|e| e.name == server_state.username)).unwrap();
+ println!("Currently in {} with {} other client{}:", own_channel.name, own_channel.users.len() - 1, if own_channel.users.len() == 2 { "" } else { "s" });
+ println!("{}{}", INDENTATION, own_channel.name);
+ for user in &own_channel.users {
+ println!("{}{}{}", INDENTATION, INDENTATION, user);
+ }
+ }
+ _ => unreachable!(),
+ }
}
Err(e) => println!("{} {}", "error:".red(), e),
}
@@ -119,13 +132,13 @@ fn send_command(command: Command) -> mumlib::error::Result<Option<CommandRespons
}
fn print_channel(channel: &Channel, depth: usize) {
- println!("{}{}{}", iter::repeat(" ").take(depth).collect::<String>(), channel.name.bold(), if channel.max_users != 0 {
+ println!("{}{}{}", iter::repeat(INDENTATION).take(depth).collect::<String>(), channel.name.bold(), if channel.max_users != 0 {
format!(" {}/{}", channel.users.len(), channel.max_users)
} else {
"".to_string()
});
for user in &channel.users {
- println!("{}-{}", iter::repeat(" ").take(depth + 1).collect::<String>(), user.name);
+ println!("{}-{}", iter::repeat(INDENTATION).take(depth + 1).collect::<String>(), user);
}
for child in &channel.children {
print_channel(child, depth + 1);