A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 42 lines 1.4 kB view raw
1use std::{env, process::Command}; 2 3use anyhow::Error; 4use rockbox::{install_rockboxd, wait_for_rockboxd}; 5 6pub fn start(with_ui: bool) -> Result<(), Error> { 7 let video_driver = std::env::var("SDL_VIDEODRIVER").unwrap_or_else(|_| "dummy".to_string()); 8 9 let port = env::var("ROCKBOX_PORT").unwrap_or_else(|_| "6061".to_string()); 10 let ui_port = env::var("ROCKBOX_UI_PORT").unwrap_or_else(|_| "6062".to_string()); 11 let http_port = env::var("ROCKBOX_HTTP_PORT").unwrap_or_else(|_| "6063".to_string()); 12 let mpd_port = env::var("MPD_PORT").unwrap_or("6600".to_string()); 13 14 // try to connect to mpd_port to see if mpd server is already running 15 if wait_for_rockboxd(mpd_port.parse()?, Some(1)).is_ok() { 16 if with_ui { 17 rmpc::main_tui()?; 18 } 19 return Ok(()); 20 } 21 22 install_rockboxd()?; 23 24 match wait_for_rockboxd(port.parse()?, Some(1)) { 25 Ok(_) => {} 26 Err(_) => { 27 let mut child = Command::new("rockboxd") 28 .env("SDL_VIDEODRIVER", video_driver) 29 .env("ROCKBOX_PORT", port) 30 .env("ROCKBOX_GRAPHQL_PORT", ui_port) 31 .env("ROCKBOX_TCP_PORT", http_port) 32 .env( 33 "ROCKBOX_UPDATE_LIBRARY", 34 env::var("ROCKBOX_UPDATE_LIBRARY").unwrap_or("0".to_string()), 35 ) 36 .spawn()?; 37 38 child.wait()?; 39 } 40 }; 41 Ok(()) 42}