Skip to content

Commit

Permalink
refactor!: allow more control in PropertiesChanged signal emissions
Browse files Browse the repository at this point in the history
  • Loading branch information
SeaDve committed Nov 8, 2023
1 parent 28361fd commit 9700fdc
Show file tree
Hide file tree
Showing 9 changed files with 167 additions and 127 deletions.
1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ edition = "2021"

[dependencies]
async-trait = "0.1"
enumflags2 = "0.7"
futures-channel = "0.3"
futures-util = { version = "0.3", default-features = false, features = ["std"] }
serde = "1.0"
Expand Down
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,12 @@ async fn main() -> Result<()> {
let server = Server::new("com.my.Application", MyPlayer).await?;
// Emit `PropertiesChanged` signal for `CanSeek` and `Metadata` properties
server.properties_changed(Property::CanSeek | Property::Metadata).await?;
server
.properties_changed([
Property::CanSeek(false),
Property::Metadata(Metadata::new()),
])
.await?;
// Emit `Seeked` signal
server
Expand Down
5 changes: 4 additions & 1 deletion examples/local_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,10 @@ async fn main() -> Result<()> {

// Emit `PropertiesChanged` signal for `CanSeek` and `Metadata` properties
server
.properties_changed(Property::CanSeek | Property::Metadata)
.properties_changed([
Property::CanSeek(false),
Property::Metadata(Metadata::new()),
])
.await?;

// Emit `Seeked` signal
Expand Down
5 changes: 4 additions & 1 deletion examples/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,10 @@ async fn main() -> Result<()> {

// Emit `PropertiesChanged` signal for `CanSeek` and `Metadata` properties
server
.properties_changed(Property::CanSeek | Property::Metadata)
.properties_changed([
Property::CanSeek(false),
Property::Metadata(Metadata::new()),
])
.await?;

// Emit `Seeked` signal
Expand Down
1 change: 0 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ pub mod builder {
/// }
/// ```
pub use async_trait::async_trait;
pub use enumflags2;
pub use zbus;
use zbus::{fdo, zvariant::OwnedObjectPath, Result};

Expand Down
31 changes: 15 additions & 16 deletions src/local_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ use std::{
};

use async_trait::async_trait;
use enumflags2::BitFlags;
use futures_channel::{mpsc, oneshot};
use futures_util::{FutureExt, StreamExt};
use zbus::{fdo, Connection, Result};
Expand Down Expand Up @@ -74,6 +73,18 @@ enum PlayerAction {
CanControl(oneshot::Sender<fdo::Result<bool>>),
}

enum TrackListAction {
// Methods
GetTracksMetadata(Vec<TrackId>, oneshot::Sender<fdo::Result<Vec<Metadata>>>),
AddTrack(Uri, TrackId, bool, oneshot::Sender<fdo::Result<()>>),
RemoveTrack(TrackId, oneshot::Sender<fdo::Result<()>>),
GoTo(TrackId, oneshot::Sender<fdo::Result<()>>),

// Properties
Tracks(oneshot::Sender<fdo::Result<Vec<TrackId>>>),
CanEditTracks(oneshot::Sender<fdo::Result<bool>>),
}

enum PlaylistsAction {
// Methods
ActivatePlaylist(PlaylistId, oneshot::Sender<fdo::Result<()>>),
Expand All @@ -91,18 +102,6 @@ enum PlaylistsAction {
ActivePlaylist(oneshot::Sender<fdo::Result<MaybePlaylist>>),
}

enum TrackListAction {
// Methods
GetTracksMetadata(Vec<TrackId>, oneshot::Sender<fdo::Result<Vec<Metadata>>>),
AddTrack(Uri, TrackId, bool, oneshot::Sender<fdo::Result<()>>),
RemoveTrack(TrackId, oneshot::Sender<fdo::Result<()>>),
GoTo(TrackId, oneshot::Sender<fdo::Result<()>>),

// Properties
Tracks(oneshot::Sender<fdo::Result<Vec<TrackId>>>),
CanEditTracks(oneshot::Sender<fdo::Result<bool>>),
}

enum Action {
Root(RootAction),
Player(PlayerAction),
Expand Down Expand Up @@ -628,7 +627,7 @@ where
#[inline]
pub async fn properties_changed(
&self,
properties: impl Into<BitFlags<Property>>,
properties: impl IntoIterator<Item = Property>,
) -> Result<()> {
self.inner.properties_changed(properties).await
}
Expand Down Expand Up @@ -888,7 +887,7 @@ where
#[inline]
pub async fn track_list_properties_changed(
&self,
properties: impl Into<BitFlags<TrackListProperty>>,
properties: impl IntoIterator<Item = TrackListProperty>,
) -> Result<()> {
self.inner.track_list_properties_changed(properties).await
}
Expand Down Expand Up @@ -970,7 +969,7 @@ where
#[inline]
pub async fn playlists_properties_changed(
&self,
properties: impl Into<BitFlags<PlaylistsProperty>>,
properties: impl IntoIterator<Item = PlaylistsProperty>,
) -> Result<()> {
self.inner.playlists_properties_changed(properties).await
}
Expand Down
96 changes: 67 additions & 29 deletions src/player.rs
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,9 @@ impl Player {
}

self.server.imp().can_quit.set(can_quit);
self.server.properties_changed(Property::CanQuit).await
self.server
.properties_changed([Property::CanQuit(can_quit)])
.await
}

pub fn fullscreen(&self) -> bool {
Expand All @@ -397,7 +399,9 @@ impl Player {
}

self.server.imp().fullscreen.set(fullscreen);
self.server.properties_changed(Property::Fullscreen).await
self.server
.properties_changed([Property::Fullscreen(fullscreen)])
.await
}

pub fn can_set_fullscreen(&self) -> bool {
Expand All @@ -411,7 +415,7 @@ impl Player {

self.server.imp().can_set_fullscreen.set(can_set_fullscreen);
self.server
.properties_changed(Property::CanSetFullscreen)
.properties_changed([Property::CanSetFullscreen(can_set_fullscreen)])
.await
}

Expand All @@ -425,7 +429,9 @@ impl Player {
}

self.server.imp().can_raise.set(can_raise);
self.server.properties_changed(Property::CanRaise).await
self.server
.properties_changed([Property::CanRaise(can_raise)])
.await
}

pub fn has_track_list(&self) -> bool {
Expand All @@ -438,7 +444,9 @@ impl Player {
}

self.server.imp().has_track_list.set(has_track_list);
self.server.properties_changed(Property::HasTrackList).await
self.server
.properties_changed([Property::HasTrackList(has_track_list)])
.await
}

pub fn identity(&self) -> Ref<'_, String> {
Expand All @@ -452,8 +460,10 @@ impl Player {
return Ok(());
}

self.server.imp().identity.replace(identity);
self.server.properties_changed(Property::Identity).await
self.server.imp().identity.replace(identity.clone());
self.server
.properties_changed([Property::Identity(identity)])
.await
}

pub fn desktop_entry(&self) -> Ref<'_, String> {
Expand All @@ -467,8 +477,13 @@ impl Player {
return Ok(());
}

self.server.imp().desktop_entry.replace(desktop_entry);
self.server.properties_changed(Property::DesktopEntry).await
self.server
.imp()
.desktop_entry
.replace(desktop_entry.clone());
self.server
.properties_changed([Property::DesktopEntry(desktop_entry)])
.await
}

pub fn supported_uri_schemes(&self) -> Ref<'_, Vec<String>> {
Expand All @@ -482,7 +497,7 @@ impl Player {
let supported_uri_schemes = supported_uri_schemes
.into_iter()
.map(|i| i.into())
.collect();
.collect::<Vec<_>>();

if *self.supported_uri_schemes() == supported_uri_schemes {
return Ok(());
Expand All @@ -491,9 +506,9 @@ impl Player {
self.server
.imp()
.supported_uri_schemes
.replace(supported_uri_schemes);
.replace(supported_uri_schemes.clone());
self.server
.properties_changed(Property::SupportedUriSchemes)
.properties_changed([Property::SupportedUriSchemes(supported_uri_schemes)])
.await
}

Expand All @@ -505,7 +520,10 @@ impl Player {
&self,
supported_mime_types: impl IntoIterator<Item = impl Into<String>>,
) -> Result<()> {
let supported_mime_types = supported_mime_types.into_iter().map(|i| i.into()).collect();
let supported_mime_types = supported_mime_types
.into_iter()
.map(|i| i.into())
.collect::<Vec<_>>();

if *self.supported_mime_types() == supported_mime_types {
return Ok(());
Expand All @@ -514,9 +532,9 @@ impl Player {
self.server
.imp()
.supported_mime_types
.replace(supported_mime_types);
.replace(supported_mime_types.clone());
self.server
.properties_changed(Property::SupportedMimeTypes)
.properties_changed([Property::SupportedMimeTypes(supported_mime_types)])
.await
}

Expand Down Expand Up @@ -619,7 +637,7 @@ impl Player {

self.server.imp().playback_status.set(playback_status);
self.server
.properties_changed(Property::PlaybackStatus)
.properties_changed([Property::PlaybackStatus(playback_status)])
.await
}

Expand All @@ -633,7 +651,9 @@ impl Player {
}

self.server.imp().loop_status.set(loop_status);
self.server.properties_changed(Property::LoopStatus).await
self.server
.properties_changed([Property::LoopStatus(loop_status)])
.await
}

pub fn rate(&self) -> PlaybackRate {
Expand All @@ -646,7 +666,7 @@ impl Player {
}

self.server.imp().rate.set(rate);
self.server.properties_changed(Property::Rate).await
self.server.properties_changed([Property::Rate(rate)]).await
}

pub fn shuffle(&self) -> bool {
Expand All @@ -659,7 +679,9 @@ impl Player {
}

self.server.imp().shuffle.set(shuffle);
self.server.properties_changed(Property::Shuffle).await
self.server
.properties_changed([Property::Shuffle(shuffle)])
.await
}

pub fn metadata(&self) -> Ref<'_, Metadata> {
Expand All @@ -671,8 +693,10 @@ impl Player {
return Ok(());
}

self.server.imp().metadata.replace(metadata);
self.server.properties_changed(Property::Metadata).await
self.server.imp().metadata.replace(metadata.clone());
self.server
.properties_changed([Property::Metadata(metadata)])
.await
}

pub fn volume(&self) -> Volume {
Expand All @@ -685,7 +709,9 @@ impl Player {
}

self.server.imp().volume.set(volume);
self.server.properties_changed(Property::Volume).await
self.server
.properties_changed([Property::Volume(volume)])
.await
}

pub fn position(&self) -> Time {
Expand All @@ -707,7 +733,9 @@ impl Player {
}

self.server.imp().minimum_rate.set(minimum_rate);
self.server.properties_changed(Property::MinimumRate).await
self.server
.properties_changed([Property::MinimumRate(minimum_rate)])
.await
}

pub fn maximum_rate(&self) -> PlaybackRate {
Expand All @@ -720,7 +748,9 @@ impl Player {
}

self.server.imp().maximum_rate.set(maximum_rate);
self.server.properties_changed(Property::MaximumRate).await
self.server
.properties_changed([Property::MaximumRate(maximum_rate)])
.await
}

pub fn can_go_next(&self) -> bool {
Expand All @@ -733,7 +763,9 @@ impl Player {
}

self.server.imp().can_go_next.set(can_go_next);
self.server.properties_changed(Property::CanGoNext).await
self.server
.properties_changed([Property::CanGoNext(can_go_next)])
.await
}

pub fn can_go_previous(&self) -> bool {
Expand All @@ -747,7 +779,7 @@ impl Player {

self.server.imp().can_go_previous.set(can_go_previous);
self.server
.properties_changed(Property::CanGoPrevious)
.properties_changed([Property::CanGoPrevious(can_go_previous)])
.await
}

Expand All @@ -761,7 +793,9 @@ impl Player {
}

self.server.imp().can_play.set(can_play);
self.server.properties_changed(Property::CanPlay).await
self.server
.properties_changed([Property::CanPlay(can_play)])
.await
}

pub fn can_pause(&self) -> bool {
Expand All @@ -774,7 +808,9 @@ impl Player {
}

self.server.imp().can_pause.set(can_pause);
self.server.properties_changed(Property::CanPause).await
self.server
.properties_changed([Property::CanPause(can_pause)])
.await
}

pub fn can_seek(&self) -> bool {
Expand All @@ -787,7 +823,9 @@ impl Player {
}

self.server.imp().can_seek.set(can_seek);
self.server.properties_changed(Property::CanSeek).await
self.server
.properties_changed([Property::CanSeek(can_seek)])
.await
}

/// This can only be set on construct.
Expand Down

0 comments on commit 9700fdc

Please sign in to comment.