A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita
audio
rust
zig
deno
mpris
rockbox
mpd
1use std::{
2 env,
3 process::{Command, Stdio},
4};
5
6use anyhow::Error;
7
8pub mod api {
9 #[path = ""]
10 pub mod rockbox {
11
12 #[path = "rockbox.v1alpha1.rs"]
13 pub mod v1alpha1;
14 }
15}
16
17pub fn install_rockboxd() -> Result<(), Error> {
18 let mut child = Command::new("sh")
19 .arg("-c")
20 .arg("type rockboxd > /dev/null 2>&1 || curl -fsSL https://raw.githubusercontent.com/tsirysndr/rockbox-zig/HEAD/install.sh | bash")
21 .stdin(Stdio::inherit())
22 .stdout(Stdio::inherit())
23 .stderr(Stdio::inherit())
24 .spawn()?;
25 child.wait()?;
26 Ok(())
27}
28
29pub fn wait_for_rockboxd(port: u32, timeout: Option<u32>) -> Result<(), Error> {
30 let cmd = format!(
31 "rockbox run -A npm:wait-port localhost:{} -t {}",
32 port,
33 timeout.unwrap_or(60) * 1000
34 );
35 let mut child = Command::new("sh")
36 .arg("-c")
37 .arg(cmd)
38 .stdin(Stdio::inherit())
39 .stdout(Stdio::inherit())
40 .stderr(Stdio::inherit())
41 .spawn()?;
42 let status = child.wait()?;
43
44 if !status.success() {
45 return Err(Error::msg("Timeout waiting for Rockbox server"));
46 }
47
48 Ok(())
49}
50
51pub fn setup_pkgx() -> Result<(), Error> {
52 let path = format!(
53 "{}:{}",
54 env::var("PATH")?,
55 format!("{}/.local/bin", env::var("HOME")?)
56 );
57 env::set_var("PATH", &path);
58 let mut child = Command::new("sh")
59 .arg("-c")
60 .arg("type pkgx > /dev/null 2>&1 || curl -fsS https://pkgx.sh | sh")
61 .stdin(Stdio::inherit())
62 .stdout(Stdio::inherit())
63 .stderr(Stdio::inherit())
64 .spawn()?;
65 child.wait()?;
66
67 Ok(())
68}