diff options
author | Toby Vincent <tobyv@tobyvin.dev> | 2024-07-16 00:36:48 -0500 |
---|---|---|
committer | Toby Vincent <tobyv@tobyvin.dev> | 2024-07-16 00:36:48 -0500 |
commit | 3e7721dfbaeb0b57f48801660a64c13989643198 (patch) | |
tree | 06b34c469c6f28fec8530c38fce8c7444cf3ba79 /src/dbus | |
parent | 712f381b1ba65d40e03e530b871e34a73dbb615d (diff) |
wip
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/player.rs | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/dbus/player.rs b/src/dbus/player.rs index 9e76e14..63a13ca 100644 --- a/src/dbus/player.rs +++ b/src/dbus/player.rs @@ -19,7 +19,32 @@ //! //! [Writing a client proxy]: https://dbus2.github.io/zbus/client.html //! [D-Bus standard interfaces]: https://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces, -use zbus::proxy; +use zbus::{ + proxy, + zvariant::{OwnedValue, Type}, +}; + +#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Type)] +pub enum PlaybackStatus { + Playing, + Paused, + #[default] + Stopped, +} + +impl TryFrom<OwnedValue> for PlaybackStatus { + type Error = zbus::Error; + + fn try_from(value: OwnedValue) -> Result<Self, Self::Error> { + match value.downcast_ref()? { + "Playing" => Ok(Self::Playing), + "Paused" => Ok(Self::Paused), + "Stopped" => Ok(Self::Stopped), + _ => Err(zbus::Error::InvalidField), + } + } +} + #[proxy( interface = "org.mpris.MediaPlayer2.Player", default_service = "org.mpris.MediaPlayer2.playerctld", @@ -107,7 +132,7 @@ trait Player { /// PlaybackStatus property #[zbus(property)] - fn playback_status(&self) -> zbus::Result<String>; + fn playback_status(&self) -> zbus::Result<PlaybackStatus>; /// Position property #[zbus(property)] |