From 3fdfa0082e10c9c6cf47fa9c618160cd132f652c Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Sat, 4 Feb 2023 20:20:27 +0100
Subject: [PATCH] MPRIS: Add an option if we want a unique name (with the pid)
 or not

---
 src/rust/mpris/src/server.rs | 47 ++++++++++++++++++++++--------------
 1 file changed, 29 insertions(+), 18 deletions(-)

diff --git a/src/rust/mpris/src/server.rs b/src/rust/mpris/src/server.rs
index 36b3bdb1..c424e781 100644
--- a/src/rust/mpris/src/server.rs
+++ b/src/rust/mpris/src/server.rs
@@ -5,13 +5,12 @@ use commons::log;
 use smallstring::SmallString;
 use zbus::{dbus_interface, Connection, ConnectionBuilder, SignalContext as ZSignalCtx};
 
-pub struct Server {
-    connexion: Connection,
-}
+pub struct Server(Connection);
 
 pub struct ServerBuilder {
     identity: SmallString,
     desktop_entry: Option<SmallString>,
+    is_unique: bool,
 }
 
 impl Server {
@@ -19,6 +18,7 @@ impl Server {
         ServerBuilder {
             identity: identity.as_ref().into(),
             desktop_entry: None,
+            is_unique: false,
         }
     }
 }
@@ -29,23 +29,34 @@ impl ServerBuilder {
         self
     }
 
+    pub fn unique(mut self) -> Self {
+        self.is_unique = true;
+        self
+    }
+
     /// Try to build the DBus server.
     pub async fn try_build(self) -> zbus::Result<Server> {
-        let desktop_entry = self.desktop_entry.unwrap_or_else(|| self.identity.clone());
-        let main = Main {
-            identity: self.identity,
-            desktop_entry,
-        };
-        let player = Player {};
-        let track_list = TrackList {};
-        let connexion = 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?;
-        Ok(Server { connexion })
+        Ok(Server(
+            ConnectionBuilder::session()?
+                .name(format!(
+                    "org.mpris.MediaPlayer2.{}{}",
+                    self.identity,
+                    self.is_unique
+                        .then_some(format!("-{}", std::process::id()))
+                        .unwrap_or_default()
+                ))?
+                .serve_at(
+                    "/org/mpris/MediaPlayer2",
+                    Main {
+                        desktop_entry: self.desktop_entry.unwrap_or_else(|| self.identity.clone()),
+                        identity: self.identity,
+                    },
+                )?
+                .serve_at("/org/mpris/MediaPlayer2", Player {})?
+                .serve_at("/org/mpris/MediaPlayer2", TrackList {})?
+                .build()
+                .await?,
+        ))
     }
 }
 
-- 
GitLab