(&self, app: AppHandle)
| 50 | } |
| 51 | |
| 52 | pub fn set_app_handle(&self, app: AppHandle) { |
| 53 | let ev_tx = self.event_tx.clone(); |
| 54 | app.listen("MediaSessionCallback", move |event| { |
| 55 | let mut payload: HashMap<String, Value> = |
| 56 | serde_json::from_str(event.payload()).unwrap(); |
| 57 | let event: String = |
| 58 | serde_json::from_value(payload.get_mut("event").unwrap().take()).unwrap(); |
| 59 | let media_control_ev = match event.as_str() { |
| 60 | "onPlay" => Some(MediaControlEvent::Play), |
| 61 | "onPause" => Some(MediaControlEvent::Pause), |
| 62 | "onStop" => Some(MediaControlEvent::Stop), |
| 63 | "onSeekTo" => { |
| 64 | let millis = |
| 65 | serde_json::from_value(payload.get_mut("pos").unwrap().take()).unwrap(); |
| 66 | Some(MediaControlEvent::SetPosition(MediaPosition( |
| 67 | Duration::from_millis(millis), |
| 68 | ))) |
| 69 | } |
| 70 | _ => None, |
| 71 | }; |
| 72 | |
| 73 | if let Some(ev) = media_control_ev { |
| 74 | let ev_tx = ev_tx.lock().unwrap(); |
| 75 | ev_tx.send(ev).unwrap(); |
| 76 | } |
| 77 | }); |
| 78 | |
| 79 | let mut app_handle = self.app_handle.lock().unwrap(); |
| 80 | *app_handle = Some(app) |
| 81 | } |
| 82 | |
| 83 | #[tracing::instrument(level = "debug", skip(self, metadata))] |
| 84 | pub fn set_metadata(&self, mut metadata: MprisPlayerDetails) -> Result<()> { |
no test coverage detected