(app: AppHandle)
| 24 | |
| 25 | #[tracing::instrument(level = "debug", skip(app))] |
| 26 | pub fn get_mpris_state(app: AppHandle) -> Result<MprisHolder> { |
| 27 | let mpris_holder = MprisHolder::new()?; |
| 28 | |
| 29 | #[cfg(mobile)] |
| 30 | mpris_holder.set_app_handle(app.clone()); |
| 31 | |
| 32 | let receiver = mpris_holder.event_rx.clone(); |
| 33 | thread::spawn(move || { |
| 34 | let receiver = receiver.lock().unwrap(); |
| 35 | loop { |
| 36 | tracing::trace!("Waiting for mpris events"); |
| 37 | let event = receiver.recv().unwrap(); |
| 38 | let data = match event { |
| 39 | mpris::MediaControlEvent::Play => (0, Value::Null), |
| 40 | mpris::MediaControlEvent::Pause => (1, Value::Null), |
| 41 | mpris::MediaControlEvent::Toggle => (13, Value::Null), |
| 42 | mpris::MediaControlEvent::Next => (6, Value::Null), |
| 43 | mpris::MediaControlEvent::Previous => (7, Value::Null), |
| 44 | mpris::MediaControlEvent::Stop => (2, Value::Null), |
| 45 | mpris::MediaControlEvent::Seek(_) => (12, json!(0)), |
| 46 | mpris::MediaControlEvent::SeekBy(_dir, pos) => { |
| 47 | // match dir { |
| 48 | // mpris::SeekDirection::Forward => (12, json!(pos.as_secs())), |
| 49 | // mpris::SeekDirection::Backward => { |
| 50 | // (12, json!((pos.as_secs() as i128).neg())) |
| 51 | // } |
| 52 | // } |
| 53 | (12, json!(pos.as_secs())) |
| 54 | } |
| 55 | mpris::MediaControlEvent::SetPosition(pos) => (12, json!(pos.0.as_secs())), |
| 56 | |
| 57 | mpris::MediaControlEvent::SetVolume(vol) => (15, json!(vol)), |
| 58 | mpris::MediaControlEvent::OpenUri(uri) => (16, Value::String(uri)), |
| 59 | mpris::MediaControlEvent::Raise => (17, Value::Null), |
| 60 | mpris::MediaControlEvent::Quit => (18, Value::Null), |
| 61 | }; |
| 62 | let _ = app.emit("media_button_press", data); |
| 63 | } |
| 64 | }); |
| 65 | |
| 66 | Ok(mpris_holder) |
| 67 | } |
| 68 | |
| 69 | generate_command!(set_metadata, MprisHolder, (), metadata: MprisPlayerDetails); |
| 70 | generate_command!(set_playback_state, MprisHolder, (), state: PlayerState); |
no test coverage detected