A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 68 lines 1.7 kB view raw
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}