mirror of
https://github.com/aunetx/deezer-linux.git
synced 2025-08-14 14:18:17 +02: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
|
|
|