Shell completions
This commit is contained in:
parent
c21072727c
commit
49f7746f57
6 changed files with 219 additions and 86 deletions
120
src/main.rs
120
src/main.rs
|
@ -1,88 +1,37 @@
|
|||
extern crate libnotify;
|
||||
extern crate mpd;
|
||||
|
||||
use clap::{Parser, Subcommand};
|
||||
mod cli;
|
||||
use cli::*;
|
||||
|
||||
use clap::{Command, CommandFactory, Parser};
|
||||
use clap_complete::{generate, Generator};
|
||||
use libnotify::Notification;
|
||||
use mpd::{Client, Query, Song, State, Term};
|
||||
use std::time::Duration;
|
||||
use std::{io, time::Duration};
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(author, version, about, long_about = "Banaan")]
|
||||
#[command(propagate_version = true)]
|
||||
|
||||
struct Cli {
|
||||
#[command(subcommand)]
|
||||
command: Option<Commands>,
|
||||
|
||||
#[arg(short, long, global = true)]
|
||||
verbose: bool,
|
||||
///hostname where MPD listens at
|
||||
#[arg(short = 'H', long, global = true)]
|
||||
host: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Subcommand)]
|
||||
enum Commands {
|
||||
/// Toggle MPD stream
|
||||
Toggle,
|
||||
/// Skip to the next track
|
||||
Next,
|
||||
/// Revert to the previous track
|
||||
Prev,
|
||||
/// Stops playing
|
||||
Stop,
|
||||
/// Play queueueu
|
||||
Play { track: Option<u32> },
|
||||
/// Set or get crossfade
|
||||
Crossfade { seconds: Option<i64> },
|
||||
///Update still needs some work
|
||||
Update,
|
||||
/// Return currently playing song
|
||||
Current,
|
||||
/// Clear current queueueu
|
||||
Clear,
|
||||
/// Query database
|
||||
Search {
|
||||
///Search query
|
||||
#[arg(trailing_var_arg = true)]
|
||||
query: Vec<String>,
|
||||
///Only return the first n results
|
||||
#[arg(short, long)]
|
||||
max: Option<u32>,
|
||||
// #[arg(short, long)]
|
||||
// append: bool,
|
||||
// #[arg(short, long)]
|
||||
// insert: Option<u32>,
|
||||
},
|
||||
/// Query database differently
|
||||
Find {
|
||||
///Search query
|
||||
#[arg(trailing_var_arg = true)]
|
||||
query: Vec<String>,
|
||||
///Only return the first n results
|
||||
#[arg(short, long)]
|
||||
max: Option<u32>,
|
||||
#[arg(short, long)]
|
||||
append: bool,
|
||||
},
|
||||
/// List items in the current queueueu
|
||||
List {
|
||||
#[arg(short, long)]
|
||||
file: bool,
|
||||
},
|
||||
// Add {
|
||||
// #[arg(short, long)]
|
||||
// position: Option<u32>,
|
||||
// },
|
||||
/// Shuffles the current queueue
|
||||
Shuffle,
|
||||
fn print_completions<G: Generator>(generator: G, cmd: &mut Command) {
|
||||
generate(
|
||||
generator,
|
||||
cmd,
|
||||
cmd.get_name().to_string(),
|
||||
&mut io::stdout(),
|
||||
);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let cli = Cli::parse();
|
||||
|
||||
if let Some(completions) = cli.completions {
|
||||
let mut cmd = Cli::command();
|
||||
eprintln!("Generating completion file for {completions:?}...");
|
||||
print_completions(completions, &mut cmd);
|
||||
return;
|
||||
}
|
||||
|
||||
libnotify::init("noise").unwrap();
|
||||
|
||||
let n = libnotify::Notification::new("Noise", None, None);
|
||||
let cli = Cli::parse();
|
||||
|
||||
let host = cli.host.unwrap_or("localhost:6600".into());
|
||||
|
||||
|
@ -109,17 +58,20 @@ fn main() {
|
|||
}
|
||||
Commands::Next => conn.next().unwrap(),
|
||||
Commands::Prev => conn.prev().unwrap(),
|
||||
Commands::List { file } => conn.queue().unwrap().iter().for_each(|x| {
|
||||
println!(
|
||||
"{:<02} {}",
|
||||
x.place.unwrap().pos,
|
||||
if *file {
|
||||
x.file.clone()
|
||||
} else {
|
||||
format_song(x.clone())
|
||||
}
|
||||
)
|
||||
}),
|
||||
Commands::List { file } => {
|
||||
let _current_song = conn.currentsong().unwrap();
|
||||
conn.queue().unwrap().iter().for_each(|x| {
|
||||
println!(
|
||||
"{:<02} {}",
|
||||
x.place.unwrap().pos,
|
||||
if *file {
|
||||
x.file.clone()
|
||||
} else {
|
||||
format_song(x.clone())
|
||||
}
|
||||
)
|
||||
});
|
||||
}
|
||||
Commands::Update => {
|
||||
let thing = conn.update().unwrap();
|
||||
println!("{thing}")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue