Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Run Typesense binary directly and set PDEATHSIG

Prefer local ~/.rockbox/bin/typesense-server when present
Add libc to workspace and update Cargo.lock

+32 -6
+1
Cargo.lock
··· 9061 9061 "anyhow", 9062 9062 "clap", 9063 9063 "dirs 6.0.0", 9064 + "libc", 9064 9065 "owo-colors 4.1.0", 9065 9066 "rockbox-library", 9066 9067 "rockbox-rocksky",
+1
crates/cli/Cargo.toml
··· 17 17 tokio = {version = "1.36.0", features = ["full"]} 18 18 dirs = "6.0.0" 19 19 uuid.workspace = true 20 + libc.workspace = true
+30 -6
crates/cli/src/lib.rs
··· 168 168 ".rockbox/bin" 169 169 ); 170 170 171 - std::process::Command::new("sh") 172 - .arg("-c") 173 - .arg(&format!("typesense-server --enable-cors --api-port {port}")) 174 - .env("PATH", &path) 171 + let ts_bin = { 172 + let local = homedir.join(".rockbox/bin/typesense-server"); 173 + if local.exists() { 174 + local 175 + } else { 176 + std::path::PathBuf::from("typesense-server") 177 + } 178 + }; 179 + 180 + let mut cmd = std::process::Command::new(&ts_bin); 181 + cmd.arg("--enable-cors") 182 + .arg(format!("--api-port={port}")) 175 183 .env("TYPESENSE_API_KEY", &api_key) 176 184 .env("TYPESENSE_DATA_DIR", &data_dir) 177 185 .stdout(Stdio::inherit()) 178 - .stderr(Stdio::inherit()) 179 - .status()?; 186 + .stderr(Stdio::inherit()); 187 + 188 + #[cfg(target_os = "linux")] 189 + unsafe { 190 + use std::os::unix::process::CommandExt; 191 + cmd.pre_exec(|| { 192 + libc::prctl( 193 + libc::PR_SET_PDEATHSIG, 194 + libc::SIGTERM as libc::c_ulong, 195 + 0, 196 + 0, 197 + 0, 198 + ); 199 + Ok(()) 200 + }); 201 + } 202 + 203 + cmd.status()?; 180 204 181 205 Ok::<(), Error>(()) 182 206 });