deezer-linux/patches/08-additional-metadata.patch
2025-05-14 17:36:44 +09:00

185 lines
7.1 KiB
Diff

From ff697a112f235e1b973bcadb304ba21aed8dcb71 Mon Sep 17 00:00:00 2001
From: josselinonduty <contact@josselinonduty.fr>
Date: Wed, 14 May 2025 15:12:49 +0900
Subject: [PATCH] feat: provide additional information to mpris (and future
patches)
---
build/main.js | 42 +++++++++++++++++++++++++---------------
build/renderer.js | 49 +++++++++++++++++++++++++++++++----------------
2 files changed, 60 insertions(+), 31 deletions(-)
diff --git a/build/main.js b/build/main.js
index 485b953..2f616b1 100644
--- a/build/main.js
+++ b/build/main.js
@@ -1253,18 +1253,24 @@
setRepeatMode(repeatMode) {
this.ipc.send("channel-player-repeat-mode-update", repeatMode);
}
- setTrackInfo(track) {
+ setTrackInfo(track, data) {
(this.track = Object.assign(this.track, track)),
this.emit(MediaEvents.TrackUpdated, this.track),
(this.mprisPlayer.metadata = {
+ "mpris:length": data?.trackInfo?.song?.DURATION
+ ? data.trackInfo.song.DURATION * 1000
+ : undefined,
"mpris:trackid": this.mprisPlayer.objectPath("track/0"),
"mpris:artUrl": track.coverUrl,
"xesam:title": track.title,
"xesam:album": track.album,
"xesam:artist": [track.artist],
+ "xesam:url": data?.trackInfo?.song
+ ? `https://deezer.com/track/${data.trackInfo.song.SNG_ID}`
+ : undefined,
});
}
- setPlayerInfo(player) {
+ setPlayerInfo(player, data) {
(this.player = Object.assign(this.player, player)),
this.emit(MediaEvents.PlayerUpdated, this.player),
(this.mprisPlayer.playbackStatus =
@@ -2530,7 +2536,7 @@
(this.ipc = ipc),
(this.app = app);
}
- setUserInfo(userInfo) {
+ setUserInfo(userInfo, data) {
const previousUserID = this.user.id;
(this.user = Object.assign(this.user, userInfo)),
previousUserID !== this.user.id &&
@@ -2773,8 +2779,8 @@
media = main_di.get(SERVICE_MEDIA),
powerSave = main_di.get(SERVICE_POWER_SAVE);
var powerSaveTimeoutId;
- PlayerIpc_ipc.on("channel-player-state-update", (event, state) => {
- media.setPlayerInfo({ state }),
+ PlayerIpc_ipc.on("channel-player-state-update", (event, state, data) => {
+ media.setPlayerInfo({ state }, data),
clearTimeout(powerSaveTimeoutId),
(powerSaveTimeoutId = setTimeout(() => {
state === MediaPlayerState.Playing
@@ -2784,16 +2790,22 @@
}),
PlayerIpc_ipc.on(
"channel-player-track-update",
- (event, track, player) => {
- media.setPlayerInfo(player), media.setTrackInfo(track);
+ (event, track, player, data) => {
+ media.setPlayerInfo(player, data), media.setTrackInfo(track, data);
}
),
- PlayerIpc_ipc.on("channel-player-shuffle-update", (event, player) => {
- media.setPlayerInfo(player);
- }),
- PlayerIpc_ipc.on("channel-player-repeat-mode-update", (event, player) => {
- media.setPlayerInfo(player);
- });
+ PlayerIpc_ipc.on(
+ "channel-player-shuffle-update",
+ (event, player, data) => {
+ media.setPlayerInfo(player, data);
+ }
+ ),
+ PlayerIpc_ipc.on(
+ "channel-player-repeat-mode-update",
+ (event, player, data) => {
+ media.setPlayerInfo(player, data);
+ }
+ );
const UpdaterIpc_ipc = main_di.get(SERVICE_IPC),
autoUpdater = main_di.get(SERVICE_UPDATER);
UpdaterIpc_ipc.on("channel-updater-install", () => {
@@ -2801,8 +2813,8 @@
});
const UserIpc_ipc = main_di.get(SERVICE_IPC),
user = main_di.get(SERVICE_USER);
- UserIpc_ipc.on("channel-user-store-updated", (event, userData) => {
- user.setUserInfo(userData);
+ UserIpc_ipc.on("channel-user-store-updated", (event, userData, data) => {
+ user.setUserInfo(userData, data);
});
var application_awaiter = function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
diff --git a/build/renderer.js b/build/renderer.js
index 212c12d..1f7b1b7 100644
--- a/build/renderer.js
+++ b/build/renderer.js
@@ -349,23 +349,31 @@
isFamily =
multiAccount &&
(multiAccount.ENABLED || multiAccount.CHILD_COUNT > 0);
- renderer_ipc.send("channel-user-store-updated", {
- id: userMetadata.USER_ID,
- isFamily,
- isEmployee: userMetadata.SETTING.global.is_employee,
- offerId: user.OFFER_ID,
- country: user.COUNTRY,
- gatekeeps: user.__DZR_GATEKEEPS__,
- });
+ renderer_ipc.send(
+ "channel-user-store-updated",
+ {
+ id: userMetadata.USER_ID,
+ isFamily,
+ isEmployee: userMetadata.SETTING.global.is_employee,
+ offerId: user.OFFER_ID,
+ country: user.COUNTRY,
+ gatekeeps: user.__DZR_GATEKEEPS__,
+ },
+ event.data
+ );
break;
}
case "player-repeat-changed":
- renderer_ipc.send("channel-player-repeat-mode-update", {
- repeatMode: event.data.player.repeat,
- canPrev: event.data.player.hasPrev,
- canNext: event.data.player.hasNext,
- canRepeat: event.data.player.hasRepeat,
- });
+ renderer_ipc.send(
+ "channel-player-repeat-mode-update",
+ {
+ repeatMode: event.data.player.repeat,
+ canPrev: event.data.player.hasPrev,
+ canNext: event.data.player.hasNext,
+ canRepeat: event.data.player.hasRepeat,
+ },
+ event.data
+ );
break;
case "player-shuffle-changed":
renderer_ipc.send("channel-player-shuffle-update", {
@@ -380,7 +388,11 @@
!0 === event.data.isPlaying
? MediaPlayerState.Playing
: MediaPlayerState.Paused;
- renderer_ipc.send("channel-player-state-update", state);
+ renderer_ipc.send(
+ "channel-player-state-update",
+ state,
+ event.data
+ );
break;
}
case "player-track-updated": {
@@ -409,7 +421,12 @@
canRepeat: event.data.player.hasRepeat,
canShuffle: event.data.player.hasShuffle,
};
- renderer_ipc.send("channel-player-track-update", track, player);
+ renderer_ipc.send(
+ "channel-player-track-update",
+ track,
+ player,
+ event.data
+ );
break;
}
}
--
2.43.0