mirror of
				https://github.com/aunetx/deezer-linux.git
				synced 2025-11-03 21:26:00 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			158 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From a808839d950d6f4ad50763d7255a7edbbd32e516 Mon Sep 17 00:00:00 2001
 | 
						|
From: josselinonduty <contact@josselinonduty.fr>
 | 
						|
Date: Mon, 21 Apr 2025 01:43:50 +0900
 | 
						|
Subject: [PATCH] fix: add better management of MPRIS
 | 
						|
 | 
						|
---
 | 
						|
 build/main.js | 65 +++++++++++++++++++++++++++++++++++++++++++--------
 | 
						|
 package.json  |  1 +
 | 
						|
 2 files changed, 56 insertions(+), 10 deletions(-)
 | 
						|
 | 
						|
diff --git a/build/main.js b/build/main.js
 | 
						|
index e03556c..1878712 100644
 | 
						|
--- a/build/main.js
 | 
						|
+++ b/build/main.js
 | 
						|
@@ -89,6 +89,10 @@
 | 
						|
       external_semver_default = __webpack_require__.n(
 | 
						|
         external_semver_namespaceObject
 | 
						|
       );
 | 
						|
+    const external_electron_mpris_namespaceObject = require("@jellybrick/mpris-service");
 | 
						|
+    var external_electron_mpris_default = __webpack_require__.n(
 | 
						|
+      external_electron_mpris_namespaceObject
 | 
						|
+    );
 | 
						|
     function isPlatform(platform) {
 | 
						|
       switch (platform) {
 | 
						|
         case PLATFORM.WINDOWS:
 | 
						|
@@ -1187,8 +1191,9 @@
 | 
						|
         };
 | 
						|
       };
 | 
						|
     let MediaService = class extends external_events_namespaceObject.EventEmitter {
 | 
						|
-      constructor(ipc, user) {
 | 
						|
+      constructor(ipc, user, app) {
 | 
						|
         super(),
 | 
						|
+          (this.app = app),
 | 
						|
           (this.smtc = null),
 | 
						|
           (this.track = {}),
 | 
						|
           (this.player = {}),
 | 
						|
@@ -1196,6 +1201,11 @@
 | 
						|
           (this.debounceOptions = { leading: !0, maxWait: 500 }),
 | 
						|
           (this.ipc = ipc),
 | 
						|
           (this.user = user),
 | 
						|
+          (this.mprisPlayer = new external_electron_mpris_namespaceObject({
 | 
						|
+            name: "deezer",
 | 
						|
+            identity: "Deezer",
 | 
						|
+            supportedInterfaces: ["player"],
 | 
						|
+          })),
 | 
						|
           isPlatform(PLATFORM.LINUX) &&
 | 
						|
             (this.user.addListener(UserEvents.LoggedIn, () => {
 | 
						|
               this.start();
 | 
						|
@@ -1203,6 +1213,21 @@
 | 
						|
             this.user.addListener(UserEvents.LoggedOut, () => {
 | 
						|
               this.stop();
 | 
						|
             }));
 | 
						|
+        this.initMprisPlayerControls();
 | 
						|
+      }
 | 
						|
+      initMprisPlayerControls() {
 | 
						|
+        // Events => ['raise', 'quit', 'next', 'previous', 'pause', 'playpause', 'stop', 'play', 'seek', 'position', 'open', 'volume', 'loopStatus', 'shuffle'];
 | 
						|
+        this.mprisPlayer.on("play", this.play.bind(this));
 | 
						|
+        this.mprisPlayer.on("pause", this.pause.bind(this));
 | 
						|
+        this.mprisPlayer.on("playpause", () =>
 | 
						|
+          this.player.state === "playing" ? this.pause() : this.play()
 | 
						|
+        );
 | 
						|
+        this.mprisPlayer.on("stop", this.stop.bind(this));
 | 
						|
+        this.mprisPlayer.on("next", this.next.bind(this));
 | 
						|
+        this.mprisPlayer.on("previous", this.prev.bind(this));
 | 
						|
+        this.mprisPlayer.on("shuffle", this.setSuffle.bind(this));
 | 
						|
+        this.mprisPlayer.on("loopStatus", this.setRepeatMode.bind(this));
 | 
						|
+        this.mprisPlayer.on("raise", () => this.app.getWindow().show());
 | 
						|
       }
 | 
						|
       play() {
 | 
						|
         this.ipc.send("channel-player-media-control", MediaPlayerControl.Play);
 | 
						|
@@ -1230,11 +1255,22 @@
 | 
						|
       }
 | 
						|
       setTrackInfo(track) {
 | 
						|
         (this.track = Object.assign(this.track, track)),
 | 
						|
-          this.emit(MediaEvents.TrackUpdated, this.track);
 | 
						|
+          this.emit(MediaEvents.TrackUpdated, this.track),
 | 
						|
+          (this.mprisPlayer.metadata = {
 | 
						|
+            "mpris:trackid": this.mprisPlayer.objectPath("track/0"),
 | 
						|
+            "mpris:artUrl": track.coverUrl,
 | 
						|
+            "xesam:title": track.title,
 | 
						|
+            "xesam:album": track.album,
 | 
						|
+            "xesam:artist": [track.artist],
 | 
						|
+          });
 | 
						|
       }
 | 
						|
       setPlayerInfo(player) {
 | 
						|
         (this.player = Object.assign(this.player, player)),
 | 
						|
-          this.emit(MediaEvents.PlayerUpdated, this.player);
 | 
						|
+          this.emit(MediaEvents.PlayerUpdated, this.player),
 | 
						|
+          (this.mprisPlayer.playbackStatus =
 | 
						|
+            this.player.state === "playing"
 | 
						|
+              ? external_electron_mpris_namespaceObject.PLAYBACK_STATUS_PLAYING
 | 
						|
+              : external_electron_mpris_namespaceObject.PLAYBACK_STATUS_PAUSED);
 | 
						|
       }
 | 
						|
       getTrackInfo() {
 | 
						|
         return this.track;
 | 
						|
@@ -1294,7 +1330,11 @@
 | 
						|
           1,
 | 
						|
           (0, external_inversify_namespaceObject.inject)(SERVICE_USER)
 | 
						|
         ),
 | 
						|
-        MediaService_metadata("design:paramtypes", [Object, Object]),
 | 
						|
+        MediaService_param(
 | 
						|
+          2,
 | 
						|
+          (0, external_inversify_namespaceObject.inject)(SERVICE_APPLICATION)
 | 
						|
+        ),
 | 
						|
+        MediaService_metadata("design:paramtypes", [Object, Object, Object]),
 | 
						|
       ],
 | 
						|
       MediaService
 | 
						|
     );
 | 
						|
@@ -2732,15 +2772,16 @@
 | 
						|
     const PlayerIpc_ipc = main_di.get(SERVICE_IPC),
 | 
						|
       media = main_di.get(SERVICE_MEDIA),
 | 
						|
       powerSave = main_di.get(SERVICE_POWER_SAVE);
 | 
						|
-    PlayerIpc_ipc.on(
 | 
						|
-      "channel-player-state-update",
 | 
						|
-      external_lodash_debounce_default()((event, state) => {
 | 
						|
-        media.setPlayerInfo({ state }),
 | 
						|
+    var powerSaveTimeoutId;
 | 
						|
+    PlayerIpc_ipc.on("channel-player-state-update", (event, state) => {
 | 
						|
+      media.setPlayerInfo({ state }),
 | 
						|
+        clearTimeout(powerSaveTimeoutId),
 | 
						|
+        (powerSaveTimeoutId = setTimeout(() => {
 | 
						|
           state === MediaPlayerState.Playing
 | 
						|
             ? powerSave.start()
 | 
						|
             : powerSave.stop();
 | 
						|
-      }, 3e3)
 | 
						|
-    ),
 | 
						|
+        }, 3e3));
 | 
						|
+    }),
 | 
						|
       PlayerIpc_ipc.on(
 | 
						|
         "channel-player-track-update",
 | 
						|
         (event, track, player) => {
 | 
						|
@@ -2827,6 +2868,10 @@
 | 
						|
             "autoplay-policy",
 | 
						|
             "no-user-gesture-required"
 | 
						|
           ),
 | 
						|
+          external_electron_namespaceObject.app.commandLine.appendSwitch(
 | 
						|
+            "disable-features",
 | 
						|
+            "HardwareMediaKeyHandling"
 | 
						|
+          ),
 | 
						|
           external_electron_namespaceObject.app.on(
 | 
						|
             "second-instance",
 | 
						|
             (event, argv) => {
 | 
						|
diff --git a/package.json b/package.json
 | 
						|
index cec017c..2182f77 100644
 | 
						|
--- a/package.json
 | 
						|
+++ b/package.json
 | 
						|
@@ -13,6 +13,7 @@
 | 
						|
   "main": "build/main.js",
 | 
						|
   "dependencies": {
 | 
						|
     "@electron/remote": "2.1.2",
 | 
						|
+    "@jellybrick/mpris-service": "2.1.5",
 | 
						|
     "electron-log": "^5.1.2",
 | 
						|
     "electron-settings": "4.0.4",
 | 
						|
     "electron-updater": "^6.3.9",
 | 
						|
-- 
 | 
						|
2.43.0
 | 
						|
 |