aboutsummaryrefslogtreecommitdiffstats
path: root/mumctl
diff options
context:
space:
mode:
authorEskil Queseth <eskilq@kth.se>2020-10-17 20:44:54 +0200
committerEskil Queseth <eskilq@kth.se>2020-10-17 20:44:54 +0200
commit821107122299eebde5da1223ea328f63782ceac9 (patch)
treecba7be2dc8a7d264bd6acfbdab82bc1f448a1ad5 /mumctl
parentc873e4250c58d872763129bff2c0b0e6c91c0a2a (diff)
downloadmum-821107122299eebde5da1223ea328f63782ceac9.tar.gz
cargo fmt
Diffstat (limited to 'mumctl')
-rw-r--r--mumctl/src/main.rs161
1 files changed, 91 insertions, 70 deletions
diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs
index c73b793..bcb5e71 100644
--- a/mumctl/src/main.rs
+++ b/mumctl/src/main.rs
@@ -1,10 +1,10 @@
use clap::{App, AppSettings, Arg, Shell, SubCommand};
+use colored::Colorize;
use ipc_channel::ipc::{self, IpcSender};
use mumlib::command::{Command, CommandResponse};
use mumlib::setup_logger;
-use std::{fs, io, iter};
-use colored::Colorize;
use mumlib::state::Channel;
+use std::{fs, io, iter};
const INDENTATION: &str = " ";
@@ -21,37 +21,38 @@ fn main() {
let mut app = App::new("mumctl")
.setting(AppSettings::ArgRequiredElseHelp)
- .subcommand(SubCommand::with_name("server")
- .setting(AppSettings::ArgRequiredElseHelp)
- .subcommand(SubCommand::with_name("connect")
- .setting(AppSettings::ArgRequiredElseHelp)
- .arg(Arg::with_name("host")
- .required(true)
- .index(1))
- .arg(Arg::with_name("username")
- .required(true)
- .index(2)))
- .subcommand(SubCommand::with_name("disconnect")))
- .subcommand(SubCommand::with_name("channel")
- .setting(AppSettings::ArgRequiredElseHelp)
- .subcommand(SubCommand::with_name("list")
- .arg(Arg::with_name("short")
- .short("s")
- .long("short")))
- .subcommand(SubCommand::with_name("connect")
- .arg(Arg::with_name("channel")
- .required(true))))
+ .subcommand(
+ SubCommand::with_name("server")
+ .setting(AppSettings::ArgRequiredElseHelp)
+ .subcommand(
+ SubCommand::with_name("connect")
+ .setting(AppSettings::ArgRequiredElseHelp)
+ .arg(Arg::with_name("host").required(true).index(1))
+ .arg(Arg::with_name("username").required(true).index(2)),
+ )
+ .subcommand(SubCommand::with_name("disconnect")),
+ )
+ .subcommand(
+ SubCommand::with_name("channel")
+ .setting(AppSettings::ArgRequiredElseHelp)
+ .subcommand(
+ SubCommand::with_name("list")
+ .arg(Arg::with_name("short").short("s").long("short")),
+ )
+ .subcommand(
+ SubCommand::with_name("connect").arg(Arg::with_name("channel").required(true)),
+ ),
+ )
.subcommand(SubCommand::with_name("status"))
- .subcommand(SubCommand::with_name("completions")
- .arg(Arg::with_name("zsh")
- .long("zsh"))
- .arg(Arg::with_name("bash")
- .long("bash"))
- .arg(Arg::with_name("fish")
- .long("fish")));
+ .subcommand(
+ SubCommand::with_name("completions")
+ .arg(Arg::with_name("zsh").long("zsh"))
+ .arg(Arg::with_name("bash").long("bash"))
+ .arg(Arg::with_name("fish").long("fish")),
+ );
let matches = app.clone().get_matches();
-
+
if let Some(matches) = matches.subcommand_matches("server") {
if let Some(matches) = matches.subcommand_matches("connect") {
let host = matches.value_of("host").unwrap();
@@ -68,14 +69,12 @@ fn main() {
} else if let Some(matches) = matches.subcommand_matches("channel") {
if let Some(_matches) = matches.subcommand_matches("list") {
match send_command(Command::ChannelList) {
- Ok(res) => {
- match res {
- Some(CommandResponse::ChannelList { channels }) => {
- print_channel(&channels, 0);
- }
- _ => unreachable!(),
+ Ok(res) => match res {
+ Some(CommandResponse::ChannelList { channels }) => {
+ print_channel(&channels, 0);
}
- }
+ _ => unreachable!(),
+ },
Err(e) => println!("{} {}", "error:".red(), e),
}
} else if let Some(matches) = matches.subcommand_matches("connect") {
@@ -85,42 +84,53 @@ fn main() {
}
} else if let Some(_matches) = matches.subcommand_matches("status") {
match send_command(Command::Status) {
- Ok(res) => {
- 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);
+ Ok(res) => 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!(),
}
- }
+ _ => unreachable!(),
+ },
Err(e) => println!("{} {}", "error:".red(), e),
}
} else if let Some(matches) = matches.subcommand_matches("completions") {
- app.gen_completions_to("mumctl",
- match matches.value_of("shell").unwrap_or("zsh") {
- "bash" => {
- Shell::Bash
- },
- "fish" => {
- Shell::Fish
- },
- _ => {
- Shell::Zsh
- },
- },
- &mut io::stdout());
- return;
+ app.gen_completions_to(
+ "mumctl",
+ match matches.value_of("shell").unwrap_or("zsh") {
+ "bash" => Shell::Bash,
+ "fish" => Shell::Fish,
+ _ => Shell::Zsh,
+ },
+ &mut io::stdout(),
+ );
+ return;
};
}
fn send_command(command: Command) -> mumlib::error::Result<Option<CommandResponse>> {
- let (tx_client, rx_client) = ipc::channel::<mumlib::error::Result<Option<CommandResponse>>>().unwrap();
+ let (tx_client, rx_client) =
+ ipc::channel::<mumlib::error::Result<Option<CommandResponse>>>().unwrap();
let server_name = fs::read_to_string("/var/tmp/mumd-oneshot").unwrap(); //TODO don't panic
@@ -132,15 +142,26 @@ fn send_command(command: Command) -> mumlib::error::Result<Option<CommandRespons
}
fn print_channel(channel: &Channel, depth: usize) {
- 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()
- });
+ 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(INDENTATION).take(depth + 1).collect::<String>(), user);
+ println!(
+ "{}-{}",
+ iter::repeat(INDENTATION)
+ .take(depth + 1)
+ .collect::<String>(),
+ user
+ );
}
for child in &channel.children {
print_channel(child, depth + 1);
}
-} \ No newline at end of file
+}