summaryrefslogtreecommitdiffstats
path: root/src/dbus
diff options
context:
space:
mode:
authorToby Vincent <tobyv@tobyvin.dev>2024-07-16 00:36:48 -0500
committerToby Vincent <tobyv@tobyvin.dev>2024-07-16 00:36:48 -0500
commit3e7721dfbaeb0b57f48801660a64c13989643198 (patch)
tree06b34c469c6f28fec8530c38fce8c7444cf3ba79 /src/dbus
parent712f381b1ba65d40e03e530b871e34a73dbb615d (diff)
wip
Diffstat (limited to 'src/dbus')
-rw-r--r--src/dbus/player.rs29
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)]