Compare commits
2 commits
e1af996482
...
56d4057d87
Author | SHA1 | Date | |
---|---|---|---|
56d4057d87 | |||
62c71dbd26 |
1 changed files with 11 additions and 36 deletions
47
src/mpris.rs
47
src/mpris.rs
|
@ -2,57 +2,31 @@ mod player;
|
||||||
pub use player::Player;
|
pub use player::Player;
|
||||||
|
|
||||||
use adw::prelude::*;
|
use adw::prelude::*;
|
||||||
use async_channel::Sender;
|
|
||||||
use gtk::glib;
|
use gtk::glib;
|
||||||
|
|
||||||
pub struct Mpris {
|
pub struct Mpris {
|
||||||
// needs to be Send, so can't store handle to the window...
|
window: glib::SendWeakRef<crate::ui::Window>,
|
||||||
raise_send: Sender<()>,
|
|
||||||
quit_send: Sender<()>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Mpris {
|
impl Mpris {
|
||||||
pub fn new(window: &crate::ui::Window) -> Self {
|
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 {
|
Self {
|
||||||
raise_send: raise_send,
|
window: window.downgrade().into(),
|
||||||
quit_send: quit_send,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[zbus::interface(name = "org.mpris.MediaPlayer2")]
|
#[zbus::interface(name = "org.mpris.MediaPlayer2")]
|
||||||
impl Mpris {
|
impl Mpris {
|
||||||
async fn raise(&self) {
|
fn raise(&self) {
|
||||||
// FIXME: don't unwrap
|
self.window.upgrade().expect("main window was finalized").present();
|
||||||
self.raise_send.send(()).await.unwrap()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn quit(&self) {
|
fn quit(&self) {
|
||||||
// FIXME: don't unwrap
|
match self.window.upgrade() {
|
||||||
self.quit_send.send(()).await.unwrap()
|
None => {}, // guess there's nothing to do
|
||||||
|
Some(window) => window.close(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[zbus(property)]
|
#[zbus(property)]
|
||||||
|
@ -67,7 +41,8 @@ impl Mpris {
|
||||||
|
|
||||||
#[zbus(property)]
|
#[zbus(property)]
|
||||||
// TODO: report that if the argument is just _ the attribute panics
|
// TODO: report that if the argument is just _ the attribute panics
|
||||||
async fn set_fullscreen(&self, _fullscreen: bool) -> zbus::Result<()> {
|
// TODO: why can't this return zbus::fdo::Result??
|
||||||
|
fn set_fullscreen(&self, _fullscreen: bool) -> zbus::Result<()> {
|
||||||
Err(zbus::Error::Unsupported)
|
Err(zbus::Error::Unsupported)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue