Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 8411b345 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

MPRIS: Add the TrackList to the implementation

parent 52cf89b8
Branches menu
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
use std::future::pending;
use zbus::ConnectionBuilder;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let (main, player) = mpris::server::build("mpris");
let _ = ConnectionBuilder::session()?
.name("org.mpris.MediaPlayer2.mpris")?
.serve_at("/org/mpris/MediaPlayer2", main)?
.serve_at("/org/mpris/MediaPlayer2", player)?
.build()
.await?;
let _ = mpris::server::build_session("mpris").await?;
// Do other things or go to wait forever
pending::<()>().await;
std::future::pending::<()>().await;
Ok(())
}
//! # DBus interface for: `org.mpris.MediaPlayer2`, `org.mpris.MediaPlayer2.Player`
// use crate::types::*;
use crate::types::*;
use commons::log;
use zbus::dbus_interface;
use zbus::{dbus_interface, Connection, ConnectionBuilder, SignalContext as ZSignalCtx};
macro_rules! str {
($str: literal) => {
......@@ -11,25 +10,31 @@ macro_rules! str {
};
}
pub fn build(identity: impl ToString) -> (MediaPlayer2, MediaPlayer2Player) {
(
MediaPlayer2 {
pub async fn build_session(identity: impl ToString) -> zbus::Result<Connection> {
let main = Main {
identity: identity.to_string(),
},
MediaPlayer2Player {},
)
}
/// Should be served at "/org/mpris/MediaPlayer2"
pub struct MediaPlayer2 {
};
let player = Player {};
let track_list = TrackList {};
ConnectionBuilder::session()?
.name("org.mpris.MediaPlayer2.mpris")?
.serve_at("/org/mpris/MediaPlayer2", main)?
.serve_at("/org/mpris/MediaPlayer2", player)?
.serve_at("/org/mpris/MediaPlayer2", track_list)?
.build()
.await
}
struct Main {
identity: String,
}
/// Should be served at "/org/mpris/MediaPlayer2"
pub struct MediaPlayer2Player {}
struct Player {}
struct TrackList {}
#[dbus_interface(name = "org.mpris.MediaPlayer2")]
impl MediaPlayer2 {
impl Main {
/// Quit method
#[dbus_interface(name = "Quit")]
fn quit(&self) {}
......@@ -98,7 +103,7 @@ impl MediaPlayer2 {
}
#[dbus_interface(name = "org.mpris.MediaPlayer2.Player")]
impl MediaPlayer2Player {
impl Player {
/// Next method
fn next(&self) {}
......@@ -222,3 +227,72 @@ impl MediaPlayer2Player {
MediaPlayerMetadata::from_iter([])
}
}
#[dbus_interface(name = "org.mpris.MediaPlayer2.TrackList")]
impl TrackList {
/// AddTrack method
fn add_track(&self, uri: &str, after: MediaPlayerObjectPath, set_as_current: bool) {
todo!("handle add {uri} after {after:?} with set as current: {set_as_current}")
}
/// GetTracksMetadata method
fn get_tracks_metadata(
&self,
tracks_ids: Vec<MediaPlayerObjectPath>,
) -> Vec<MediaPlayerMetadata> {
todo!("handle track ids: {tracks_ids:?}")
}
/// GoTo method
fn go_to(&self, track_id: MediaPlayerObjectPath) {
todo!("handle track id {track_id:?}")
}
/// RemoveTrack method
fn remove_track(&self, track_id: MediaPlayerObjectPath) {
todo!("handle track id {track_id:?}")
}
/// CanEditTracks property
#[dbus_interface(property)]
fn can_edit_tracks(&self) -> bool {
true
}
/// Tracks property
#[dbus_interface(property)]
fn tracks(&self) -> Vec<MediaPlayerObjectPath> {
vec![]
}
/// TrackAdded signal
#[dbus_interface(signal)]
async fn track_added(
#[zbus(signal_context)] ctxt: ZSignalCtx<'_>,
metadata: MediaPlayerMetadata,
after: MediaPlayerObjectPath,
) -> zbus::Result<()>;
/// TrackListReplaced signal
#[dbus_interface(signal)]
async fn track_list_replaced(
#[zbus(signal_context)] ctxt: ZSignalCtx<'_>,
tracks: Vec<MediaPlayerObjectPath>,
current: MediaPlayerObjectPath,
) -> zbus::Result<()>;
/// TrackMetadataChanged signal
#[dbus_interface(signal)]
async fn track_metadata_changed(
#[zbus(signal_context)] ctxt: ZSignalCtx<'_>,
track_id: MediaPlayerObjectPath,
metadata: MediaPlayerMetadata,
) -> zbus::Result<()>;
/// TrackRemoved signal
#[dbus_interface(signal)]
async fn track_removed(
#[zbus(signal_context)] ctxt: ZSignalCtx<'_>,
track_id: MediaPlayerObjectPath,
) -> zbus::Result<()>;
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter