+4
-2
src/main.rs
+4
-2
src/main.rs
···
45
45
.subcommand(
46
46
Command::new("play")
47
47
.about("Play a radio station")
48
-
.arg(arg!(<station> "The station to play")),
48
+
.arg(arg!(<station> "The station to play"))
49
+
.arg(arg!(--volume "Set the initial volume (as a percent)").default_value("100")),
49
50
)
50
51
.subcommand(
51
52
Command::new("browse")
···
90
91
Some(("play", args)) => {
91
92
let station = args.value_of("station").unwrap();
92
93
let provider = matches.value_of("provider").unwrap();
93
-
play::exec(station, provider).await?;
94
+
let volume = args.value_of("volume").unwrap().parse::<f32>().unwrap();
95
+
play::exec(station, provider, volume).await?;
94
96
}
95
97
Some(("browse", args)) => {
96
98
let category = args.value_of("category");
+5
-2
src/play.rs
+5
-2
src/play.rs
···
11
11
tui,
12
12
};
13
13
14
-
pub async fn exec(name_or_id: &str, provider: &str) -> Result<(), Error> {
14
+
pub async fn exec(name_or_id: &str, provider: &str, default_volume: f32) -> Result<(), Error> {
15
15
let _provider = provider;
16
16
let provider: Box<dyn Provider> = match provider {
17
17
"tunein" => Box::new(Tunein::new()),
···
61
61
let response = client.get(stream_url).send().unwrap();
62
62
63
63
let headers = response.headers();
64
+
let volume = Volume::new(default_volume, false);
65
+
64
66
cmd_tx
65
67
.send(State {
66
68
name: match headers
···
91
93
.to_str()
92
94
.unwrap()
93
95
.to_string(),
94
-
volume: Volume::default(),
96
+
volume: volume.clone(),
95
97
})
96
98
.unwrap();
97
99
let location = response.headers().get("location");
···
110
112
111
113
let (_stream, handle) = rodio::OutputStream::try_default().unwrap();
112
114
let sink = rodio::Sink::try_new(&handle).unwrap();
115
+
sink.set_volume(volume.volume_ratio());
113
116
let decoder = Mp3Decoder::new(response, frame_tx).unwrap();
114
117
sink.append(decoder);
115
118