diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 96 |
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] |
6 | extern crate failure; | 6 | extern crate failure; |
7 | 7 | ||
8 | #[macro_use] | ||
8 | extern crate clap; | 9 | extern crate clap; |
9 | extern crate clap_log_flag; | 10 | extern crate clap_log_flag; |
10 | extern crate clap_verbosity_flag; | 11 | extern crate clap_verbosity_flag; |
11 | extern crate structopt; | 12 | extern crate structopt; |
12 | 13 | ||
13 | use structopt::StructOpt; | ||
14 | |||
15 | use failure::Error; | ||
16 | |||
17 | //use dbus::stdintf::org_freedesktop_dbus::Properties; | ||
18 | use dbus::Connection; | ||
19 | |||
20 | use dbus_api::sink::OrgPulseAudioExtEqualizing1Equalizer; | ||
21 | |||
22 | mod dbus_api; | 14 | mod dbus_api; |
23 | mod parsing; | 15 | mod parsing; |
24 | mod utils; | 16 | mod utils; |
25 | 17 | ||
26 | use utils::*; | 18 | use utils::*; |
27 | 19 | ||
20 | use dbus_api::sink::OrgPulseAudioExtEqualizing1Equalizer; | ||
21 | use failure::Error; | ||
22 | use structopt::StructOpt; | ||
23 | |||
24 | use std::fs::File; | ||
25 | use std::io; | ||
26 | |||
27 | #[derive(StructOpt, Debug)] | ||
28 | #[structopt(raw(setting = "structopt::clap::AppSettings::ColoredHelp"))] | ||
29 | /// Hello World! How are you doing? | ||
30 | struct 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)] |
29 | enum Command { | 45 | enum 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)] |
37 | struct LoadCli { | 55 | struct 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)] | 73 | arg_enum! { |
41 | struct ResetCli { | 74 | #[derive(Debug)] |
75 | enum EqualizerConfFormat { | ||
76 | EqualizerAPO | ||
77 | } | ||
42 | } | 78 | } |
43 | 79 | ||
44 | #[derive(StructOpt, Debug)] | 80 | #[derive(StructOpt, Debug)] |
45 | struct Cli { | 81 | struct 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> { | |||
110 | fn load(args: LoadCli) -> Result<(), Error> { | 139 | fn 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 | /* | ||
121 | fn 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 | */ | ||