comparison src/player.rs @ 2:594c0f9d7972

errr
author Paper <paper@tflc.us>
date Sat, 04 Apr 2026 16:04:31 -0400
parents a5ee18c79a04
children 18f743c980fa
comparison
equal deleted inserted replaced
1:a5ee18c79a04 2:594c0f9d7972
21 use crate::beefweb; 21 use crate::beefweb;
22 22
23 use zbus::fdo; 23 use zbus::fdo;
24 use zbus::Result; 24 use zbus::Result;
25 use std::collections::HashMap; 25 use std::collections::HashMap;
26 use std::io::Write; 26 //use std::io::Write;
27 use std::cell::RefCell; 27 use std::cell::RefCell;
28 28
29 /* teehee */ 29 /* teehee */
30 pub struct BeefwebPlayer { 30 pub struct BeefwebPlayer {
31 bw: beefweb::Beefweb, 31 bw: beefweb::Beefweb,
235 match p { 235 match p {
236 Err(_) => return Err(fdo::Error::Failed("wtf".to_string())), 236 Err(_) => return Err(fdo::Error::Failed("wtf".to_string())),
237 _ => (), 237 _ => (),
238 }; 238 };
239 239
240 return match p.unwrap().playback_state.as_str() { 240 return match p.unwrap().playback_state {
241 "playing" => Ok(mpris_server::PlaybackStatus::Playing), 241 beefweb::PlaybackState::PLAYING => Ok(mpris_server::PlaybackStatus::Playing),
242 "stopped" => Ok(mpris_server::PlaybackStatus::Stopped), 242 beefweb::PlaybackState::STOPPED => Ok(mpris_server::PlaybackStatus::Stopped),
243 "paused" => Ok(mpris_server::PlaybackStatus::Paused), 243 beefweb::PlaybackState::PAUSED => Ok(mpris_server::PlaybackStatus::Paused),
244 _ => Err(fdo::Error::Failed("deez nuts".to_string())),
245 }; 244 };
246 } 245 }
247 246
248 async fn loop_status(&self) -> fdo::Result<mpris_server::LoopStatus> 247 async fn loop_status(&self) -> fdo::Result<mpris_server::LoopStatus>
249 { 248 {
249 /* TODO -- we can do this w/ self.bw.playback_order() */
250 return Ok(mpris_server::LoopStatus::None); 250 return Ok(mpris_server::LoopStatus::None);
251 } 251 }
252 252
253 async fn set_loop_status(&self, loop_status: mpris_server::LoopStatus) -> Result<()> 253 async fn set_loop_status(&self, loop_status: mpris_server::LoopStatus) -> Result<()>
254 { 254 {
255 /* TODO -- implement self.bw.set_playback_order() */
255 return Ok(()); 256 return Ok(());
256 } 257 }
257 258
258 async fn shuffle(&self) -> fdo::Result<bool> 259 async fn shuffle(&self) -> fdo::Result<bool>
259 { 260 {
260 /* TODO */ 261 /* TODO -- we can do this w/ self.bw.playback_order() */
261 println!("Shuffle"); 262 println!("Shuffle");
262 return Ok(false); 263 return Ok(false);
263 } 264 }
264 265
265 async fn set_shuffle(&self, shuffle: bool) -> Result<()> 266 async fn set_shuffle(&self, shuffle: bool) -> Result<()>
266 { 267 {
267 /* TODO */ 268 /* TODO -- implement self.bw.set_playback_order() */
268 println!("SetShuffle({shuffle})"); 269 println!("SetShuffle({shuffle})");
269 return Ok(()); 270 return Ok(());
270 } 271 }
271 272
272 async fn metadata(&self) -> fdo::Result<mpris_server::Metadata> 273 async fn metadata(&self) -> fdo::Result<mpris_server::Metadata>
313 return Ok(builder.build()); 314 return Ok(builder.build());
314 } 315 }
315 316
316 async fn volume(&self) -> fdo::Result<mpris_server::Volume> 317 async fn volume(&self) -> fdo::Result<mpris_server::Volume>
317 { 318 {
318 return Ok(mpris_server::Volume::default()); 319 let vr = self.bw.volume().await;
320
321 match vr {
322 Err(_) => return Err(fdo::Error::Failed("uhoh".to_string())),
323 _ => (),
324 }
325
326 let v = vr.unwrap();
327
328 /* dB -> linear */
329 return Ok(match v.r#type {
330 beefweb::VolumeType::DB => 10.0_f64.powf(v.value / 20.0),
331 beefweb::VolumeType::LINEAR => v.value,
332 beefweb::VolumeType::UPDOWN => /* ??? */ v.value,
333 });
319 } 334 }
320 335
321 async fn set_volume(&self, volume: mpris_server::Volume) -> Result<()> 336 async fn set_volume(&self, volume: mpris_server::Volume) -> Result<()>
322 { 337 {
338 /* linear -> dB */
339 let v = 20.0 * volume.log10();
340
341 match self.bw.set_volume(v).await {
342 Err(_) => return Err(zbus::Error::Failure("uhoh".to_string())),
343 _ => (),
344 }
345
323 return Ok(()); 346 return Ok(());
324 } 347 }
325 348
326 /* "can" functions -- all work */ 349 /* "can" functions -- all work */
327 350