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, thread};
2
3use anyhow::Error;
4use rockbox::{
5 api::rockbox::v1alpha1::{library_service_client::LibraryServiceClient, ScanLibraryRequest},
6 install_rockboxd, wait_for_rockboxd,
7};
8
9use super::start::*;
10
11pub async fn scan(path: Option<String>, rebuild_index: Option<bool>) -> Result<(), Error> {
12 install_rockboxd()?;
13 let handle = thread::spawn(|| match start(false) {
14 Ok(_) => {}
15 Err(e) => {
16 eprintln!("Failed to start Rockbox server: {}", e);
17 }
18 });
19
20 let host = env::var("ROCKBOX_HOST").unwrap_or_else(|_| "localhost".to_string());
21 let port = env::var("ROCKBOX_PORT").unwrap_or_else(|_| "6061".to_string());
22
23 wait_for_rockboxd(port.parse()?, None)?;
24
25 let url = format!("tcp://{}:{}", host, port);
26 let mut client = LibraryServiceClient::connect(url).await?;
27 let request = tonic::Request::new(ScanLibraryRequest {
28 path,
29 rebuild_index,
30 });
31 client.scan_library(request).await?;
32 println!("Scan request sent to Rockbox server");
33 handle.join().unwrap();
34 Ok(())
35}