67
|
1
|
#![cfg(feature = "freesound")] |
28
|
2
|
use std::{env, path::Path}; |
67
|
3
|
use tenex::freesound::{ |
|
4
|
write_sound, FreeSoundClient, FreeSoundRequest, FreeSoundResponse, |
|
5
|
FreesoundConfig, Result, |
|
6
|
}; |
28
|
7
|
|
|
8
|
#[tokio::main] |
|
9
|
async fn main() -> Result<()> { |
|
10
|
let args: Vec<String> = std::env::args().collect(); |
|
11
|
let mut args = args.iter().skip(1); |
|
12
|
let cmd = args.next(); |
|
13
|
let cfg_var = env::var("FREESOUND_CONFIG"); |
|
14
|
let config_path = match cfg_var { |
|
15
|
Ok(ref val) => Path::new(val), |
67
|
16
|
Err(_) => Path::new("freesound.json"), |
28
|
17
|
}; |
|
18
|
let config = FreesoundConfig::load(&config_path)?; |
|
19
|
let mut client = FreeSoundClient::new_with_config(&config); |
|
20
|
if let Some(cmd) = cmd { |
|
21
|
if cmd.eq("auth") { |
|
22
|
client.auth(true).await.unwrap(); |
|
23
|
client.save(&config_path)?; |
|
24
|
} else if cmd.eq("search") { |
|
25
|
let req = FreeSoundRequest::SearchText { |
67
|
26
|
query: &args.next().unwrap(), |
|
27
|
filter: None, |
|
28
|
sort: "", |
|
29
|
group_by_pack: false, |
|
30
|
weights: "", |
|
31
|
page: 1, |
|
32
|
page_size: 150, |
|
33
|
fields: &["id", "name"], |
|
34
|
descriptors: &[], |
|
35
|
normalized: false, |
28
|
36
|
}; |
|
37
|
let res = client.request(req).await.unwrap(); |
|
38
|
let response = FreeSoundResponse::parse(res).await; |
|
39
|
println!("{}", response); |
|
40
|
} else if cmd.eq("dl") || cmd.eq("download") { |
|
41
|
let query = args.next().unwrap(); |
67
|
42
|
let out = if let Some(p) = args.next() { p } else { query }; |
28
|
43
|
let req = FreeSoundRequest::SoundDownload { |
67
|
44
|
id: query.parse().unwrap(), |
28
|
45
|
}; |
|
46
|
let res = client.request(req).await.unwrap(); |
|
47
|
write_sound(res, &out, true).await.unwrap(); |
|
48
|
println!("sound_id {} downloaded to {}", query, out.as_str()); |
|
49
|
} |
|
50
|
} else { |
|
51
|
println!("tenex-fs [auth|query|download/dl] ARG"); |
|
52
|
} |
|
53
|
Ok(()) |
|
54
|
} |