Krolyxon
Commit a0a3139

rmptuia0a3139

use subcommands instead of options

Author
krolxon
Date
2024-04-22 16:04 +0530
Parent
3578eae
Commit
a0a313996428b598e83016c97adeacd08ad42628

+67 −53

3 files changed

  1. A src/cli.rs +43 −0
  2. M src/connection.rs +12 −11
  3. M src/main.rs +12 −42
A src/cli.rs View
@@ -0,0 +1,43 @@
1+use clap::{Parser, Subcommand};
2+#[derive(Parser, Debug)]
3+#[command(version, about)]
4+#[clap(author = "krolyxon")]
5+/// MPD client made with Rust
6+pub struct Args {
7+ /// pause
8+ #[clap(short, long, default_value = "false")]
9+ pub pause: bool,
10+
11+ /// toggle pause
12+ #[arg(short, long, default_value = "false")]
13+ pub toggle_pause: bool,
14+
15+ /// show current status
16+ #[arg(short, long, default_value = "false")]
17+ pub show_status: bool,
18+
19+ /// use fzf selector for selecting songs
20+ #[arg(short, long, default_value = "false")]
21+ pub fzf_select: bool,
22+
23+ /// use dmenu selector for selecting songss
24+ #[arg(short, long, default_value = "false")]
25+ pub dmenu_select: bool,
26+
27+ #[command(subcommand)]
28+ pub command: Command,
29+}
30+
31+#[derive(Debug, Subcommand)]
32+pub enum Command {
33+ #[command(arg_required_else_help = true)]
34+ Volume {
35+ vol: String,
36+ },
37+
38+ Dmenu,
39+ Fzf,
40+ Status,
41+ Pause,
42+ Toggle,
43+}
M src/connection.rs View
@@ -13,8 +13,8 @@ impl Connection {
1313 let songs_filenames: Vec<String> = conn
1414 .listall()
1515 .unwrap()
16− .iter()
17− .map(|x| x.clone().file)
16+ .into_iter()
17+ .map(|x| x.file)
1818 .collect();
1919
2020 Ok(Self {
@@ -70,7 +70,7 @@ impl Connection {
7070 let current_song = self.conn.currentsong();
7171 let status = self.conn.status().unwrap();
7272
73− if current_song.is_ok() {
73+ if current_song.is_ok() && status.state != State::Stop {
7474 let song = current_song.unwrap();
7575 if let Some(s) = song {
7676 println!("{} - {}", s.artist.unwrap(), s.title.unwrap());
@@ -82,7 +82,7 @@ impl Connection {
8282 );
8383 }
8484
85− // Play controls
85+ // Playback controls
8686 pub fn pause(&mut self) {
8787 self.conn.pause(true).unwrap();
8888 }
@@ -92,14 +92,15 @@ impl Connection {
9292 }
9393
9494 // Volume controls
95− pub fn inc_volume(&mut self, inc: i8) {
95+ pub fn set_volume(&mut self, u: String) {
9696 let cur = self.conn.status().unwrap().volume;
97− self.conn.volume(cur + inc).unwrap();
98− }
99−
100− pub fn dec_volume(&mut self, dec: i8) {
101− let cur = self.conn.status().unwrap().volume;
102− self.conn.volume(cur - dec).unwrap();
97+ let sym = u.get(0..1).unwrap();
98+ let u: i8 = u.parse::<i8>().unwrap();
99+ if sym == "+" || sym == "-" {
100+ self.conn.volume(cur + u).unwrap();
101+ } else {
102+ self.conn.volume(u).unwrap();
103+ }
103104 }
104105 }
105106
M src/main.rs View
@@ -1,53 +1,23 @@
1+mod cli;
12 mod connection;
23 use clap::Parser;
4+use cli::Args;
5+use cli::Command;
36 use connection::Connection;
47
5−#[derive(Parser, Debug)]
6−#[command(version, about, long_about = None)]
7−struct Args {
8− /// pause
9− #[arg(short, long, default_value = "false")]
10− pub pause: bool,
11−
12− /// toggle pause
13− #[arg(short, long, default_value = "false")]
14− pub toggle_pause: bool,
15−
16− /// show current status
17− #[arg(short, long, default_value = "false")]
18− pub show_status: bool,
19−
20− /// use fzf selector for selecting songs
21− #[arg(short, long, default_value = "false")]
22− pub fzf_select: bool,
23−
24− /// use dmenu selector for selecting songss
25− #[arg(short, long, default_value = "false")]
26− pub dmenu_select: bool,
27−}
28−
298 fn main() -> Result<(), Box<dyn std::error::Error>> {
309 let args = Args::parse();
3110 let mut conn = Connection::new("127.0.0.1:6600")?;
3211
33− if args.show_status {
34− conn.status();
35− }
36−
37− if args.toggle_pause {
38− conn.toggle_pause();
39− }
40−
41− if args.pause {
42− conn.pause();
43− }
44−
45− if args.fzf_select {
46− conn.play_fzf();
47− }
48−
49− if args.dmenu_select {
50− conn.play_dmenu();
12+ match args.command {
13+ Command::Volume { vol } => {
14+ conn.set_volume(vol);
15+ }
16+ Command::Dmenu => conn.play_dmenu(),
17+ Command::Fzf => conn.play_fzf(),
18+ Command::Status => conn.status(),
19+ Command::Pause => conn.pause(),
20+ Command::Toggle => conn.toggle_pause(),
5121 }
5222
5323 Ok(())