MCPcopy Create free account
hub / github.com/Moosync/Moosync / get_mpris_state

Function get_mpris_state

src-tauri/src/mpris/mod.rs:26–67  ·  view source on GitHub ↗
(app: AppHandle)

Source from the content-addressed store, hash-verified

24
25#[tracing::instrument(level = "debug", skip(app))]
26pub 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
69generate_command!(set_metadata, MprisHolder, (), metadata: MprisPlayerDetails);
70generate_command!(set_playback_state, MprisHolder, (), state: PlayerState);

Callers 1

runFunction · 0.85

Calls 3

set_app_handleMethod · 0.80
cloneMethod · 0.80
emitMethod · 0.80

Tested by

no test coverage detected