holy fruck there's actually a way

im sorry i ever doubted u gtkrs
This commit is contained in:
Erica Z 2024-11-01 12:57:20 +01:00
parent e1af996482
commit 62c71dbd26

View file

@ -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<crate::ui::Window>,
}
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)]