Mercurial > beefweb_mpris
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 |
