···22pub mod artist;
33pub mod audio_status;
44pub mod compressor_settings;
55+pub mod device;
56pub mod entry;
67pub mod eq_band_setting;
78pub mod new_global_settings;
···11+use anyhow::Error;
22+use rockbox_chromecast::Chromecast;
33+44+use crate::http::{Context, Request, Response};
55+66+pub async fn connect(ctx: &Context, req: &Request, res: &mut Response) -> Result<(), Error> {
77+ let id = &req.params[0];
88+ let mut player = ctx.player.lock().unwrap();
99+ let mut current_device = ctx.current_device.lock().unwrap();
1010+ let devices = ctx.devices.lock().unwrap();
1111+ let device = devices.iter().find(|d| d.id == *id);
1212+ if let Some(device) = device {
1313+ *player = Chromecast::connect(device.clone())?;
1414+ *current_device = Some(device.clone());
1515+ res.set_status(200);
1616+ return Ok(());
1717+ }
1818+ res.set_status(404);
1919+ Ok(())
2020+}
2121+2222+pub async fn disconnect(ctx: &Context, req: &Request, res: &mut Response) -> Result<(), Error> {
2323+ let _id = &req.params[0];
2424+ let mut player = ctx.player.lock().unwrap();
2525+ let mut current_device = ctx.current_device.lock().unwrap();
2626+ if let Some(player) = player.as_mut() {
2727+ player.disconnect().await?;
2828+ }
2929+ *player = None;
3030+ *current_device = None;
3131+ res.set_status(200);
3232+ Ok(())
3333+}
3434+3535+pub async fn get_devices(ctx: &Context, _req: &Request, res: &mut Response) -> Result<(), Error> {
3636+ let devices = ctx.devices.lock().unwrap();
3737+ res.json(&devices.clone());
3838+ Ok(())
3939+}
4040+4141+pub async fn get_device(ctx: &Context, req: &Request, res: &mut Response) -> Result<(), Error> {
4242+ let id = &req.params[0];
4343+ let devices = ctx.devices.lock().unwrap();
4444+ let device = devices.iter().find(|d| d.id == *id);
4545+4646+ if let Some(device) = device {
4747+ res.json(&device.clone());
4848+ return Ok(());
4949+ }
5050+5151+ res.json(&device);
5252+ res.set_status(404);
5353+ Ok(())
5454+}
+5
crates/server/src/handlers/mod.rs
···11pub mod albums;
22pub mod artists;
33pub mod browse;
44+pub mod devices;
45pub mod docs;
56pub mod player;
67pub mod playlists;
···6768async_handler!(docs, get_openapi);
6869async_handler!(docs, index);
6970async_handler!(search, search);
7171+async_handler!(devices, connect);
7272+async_handler!(devices, disconnect);
7373+async_handler!(devices, get_devices);
7474+async_handler!(devices, get_device);