summaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs96
1 files changed, 60 insertions, 36 deletions
diff --git a/src/main.rs b/src/main.rs
index 10c9434..171fe3c 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -5,51 +5,80 @@ extern crate log;
5#[macro_use] 5#[macro_use]
6extern crate failure; 6extern crate failure;
7 7
8#[macro_use]
8extern crate clap; 9extern crate clap;
9extern crate clap_log_flag; 10extern crate clap_log_flag;
10extern crate clap_verbosity_flag; 11extern crate clap_verbosity_flag;
11extern crate structopt; 12extern crate structopt;
12 13
13use structopt::StructOpt;
14
15use failure::Error;
16
17//use dbus::stdintf::org_freedesktop_dbus::Properties;
18use dbus::Connection;
19
20use dbus_api::sink::OrgPulseAudioExtEqualizing1Equalizer;
21
22mod dbus_api; 14mod dbus_api;
23mod parsing; 15mod parsing;
24mod utils; 16mod utils;
25 17
26use utils::*; 18use utils::*;
27 19
20use dbus_api::sink::OrgPulseAudioExtEqualizing1Equalizer;
21use failure::Error;
22use structopt::StructOpt;
23
24use std::fs::File;
25use std::io;
26
27#[derive(StructOpt, Debug)]
28#[structopt(raw(setting = "structopt::clap::AppSettings::ColoredHelp"))]
29/// Hello World! How are you doing?
30struct Cli {
31 #[structopt(flatten)]
32 verbose: clap_verbosity_flag::Verbosity,
33 #[structopt(flatten)]
34 log: clap_log_flag::Log,
35 #[structopt(short = "s")]
36 /// Use the given sink.
37 ///
38 /// By default it will use the last equalized sink it finds
39 sink: Option<String>,
40 #[structopt(subcommand)]
41 cmd: Command,
42}
43
28#[derive(StructOpt, Debug)] 44#[derive(StructOpt, Debug)]
29enum Command { 45enum Command {
30 #[structopt(name = "load")] 46 #[structopt(name = "load",)]
47 /// Load and switch to a given equalizer configuration
31 Load(LoadCli), 48 Load(LoadCli),
32 #[structopt(name = "reset")] 49 #[structopt(name = "reset")]
50 /// Switch to a neutral equalizer
33 Reset(ResetCli), 51 Reset(ResetCli),
34} 52}
35 53
36#[derive(StructOpt, Debug)] 54#[derive(StructOpt, Debug)]
37struct LoadCli { 55struct LoadCli {
56 #[structopt(default_value = "-")]
57 /// The file from which to load the equalizer configuration
58 ///
59 /// If "-" is given, read the configuration from the command-line.
60 file: String,
61 #[structopt(
62 short = "f",
63 raw(
64 possible_values = "&EqualizerConfFormat::variants()",
65 case_insensitive = "true"
66 ),
67 default_value = "EqualizerAPO"
68 )]
69 /// The file format of the equalizer configuration
70 format: EqualizerConfFormat,
38} 71}
39 72
40#[derive(StructOpt, Debug)] 73arg_enum! {
41struct ResetCli { 74 #[derive(Debug)]
75 enum EqualizerConfFormat {
76 EqualizerAPO
77 }
42} 78}
43 79
44#[derive(StructOpt, Debug)] 80#[derive(StructOpt, Debug)]
45struct Cli { 81struct ResetCli {}
46 #[structopt(flatten)]
47 verbose: clap_verbosity_flag::Verbosity,
48 #[structopt(flatten)]
49 log: clap_log_flag::Log,
50 #[structopt(subcommand)]
51 cmd: Command,
52}
53 82
54#[derive(Fail, Debug)] 83#[derive(Fail, Debug)]
55#[fail(display = "No equalized sink found")] 84#[fail(display = "No equalized sink found")]
@@ -88,7 +117,7 @@ fn main() -> Result<(), Error> {
88 117
89 match args.cmd { 118 match args.cmd {
90 Load(args) => load(args), 119 Load(args) => load(args),
91 Reset(args)=> reset(args), 120 Reset(args) => reset(args),
92 } 121 }
93} 122}
94 123
@@ -110,23 +139,18 @@ fn reset(args: ResetCli) -> Result<(), Error> {
110fn load(args: LoadCli) -> Result<(), Error> { 139fn load(args: LoadCli) -> Result<(), Error> {
111 let conn = connect()?; 140 let conn = connect()?;
112 let conn_sink = get_equalized_sink(&conn)?; 141 let conn_sink = get_equalized_sink(&conn)?;
113 let filter = read_filter()?; 142
143 let filter = if args.file == "-" {
144 let stdin = io::stdin();
145 let mut lock = stdin.lock();
146 read_filter(&mut lock)?
147 } else {
148 let mut file = File::open(args.file)?;
149 read_filter(&mut file)?
150 };
151
114 let filter_rate = conn_sink.get_filter_sample_rate()?; 152 let filter_rate = conn_sink.get_filter_sample_rate()?;
115 send_filter(&conn_sink, filter.pad(filter_rate))?; 153 send_filter(&conn_sink, filter.pad(filter_rate))?;
116 154
117 Ok(()) 155 Ok(())
118} 156}
119
120/*
121fn introspect(conn: &dbus::ConnPath<&Connection>) {
122 let mut thing = conn
123 .method_call_with_args(
124 &"org.freedesktop.DBus.Introspectable".into(),
125 &"Introspect".into(),
126 |_| {},
127 ).unwrap();
128 thing.as_result().unwrap();
129
130 println!("{}", thing.iter_init().read::<String>().unwrap());
131}
132*/