A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita
audio
rust
zig
deno
mpris
rockbox
mpd
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}