diff --git a/src/mpris.rs b/src/mpris.rs index 018d2ec..1f0f289 100644 --- a/src/mpris.rs +++ b/src/mpris.rs @@ -2,43 +2,16 @@ mod player; pub use player::Player; use adw::prelude::*; -use async_channel::Sender; use gtk::glib; pub struct Mpris { - // needs to be Send, so can't store handle to the window... - raise_send: Sender<()>, - quit_send: Sender<()>, + window: glib::SendWeakRef, } impl Mpris { pub fn new(window: &crate::ui::Window) -> Self { - let (raise_send, raise_recv) = async_channel::bounded(1); - let (quit_send, quit_recv) = async_channel::bounded(1); - - glib::spawn_future_local(glib::clone!( - #[weak] - window, - async move { - while let Ok(()) = raise_recv.recv().await { - window.present(); - } - } - )); - - glib::spawn_future_local(glib::clone!( - #[weak] - window, - async move { - while let Ok(()) = quit_recv.recv().await { - window.close(); - } - } - )); - Self { - raise_send: raise_send, - quit_send: quit_send, + window: window.downgrade().into(), } } } @@ -46,13 +19,13 @@ impl Mpris { #[zbus::interface(name = "org.mpris.MediaPlayer2")] impl Mpris { async fn raise(&self) { - // FIXME: don't unwrap - self.raise_send.send(()).await.unwrap() + // TODO: don't unwrap + self.window.upgrade().unwrap().present(); } async fn quit(&self) { - // FIXME: don't unwrap - self.quit_send.send(()).await.unwrap() + // TODO: don't unwrap + self.window.upgrade().unwrap().close(); } #[zbus(property)]