From 16026d3b586904af7d8ca32248abe0be9eddaa84 Mon Sep 17 00:00:00 2001 From: josselinonduty Date: Fri, 31 Jan 2025 11:55:37 +0100 Subject: [PATCH] fix: update deps for mpris patch - @jellybrick/mpris-service --- build/main.js | 72 ++++++++++++++++++++++++++++++++++++++++++--------- package.json | 1 + 2 files changed, 61 insertions(+), 12 deletions(-) diff --git a/build/main.js b/build/main.js index 9219f4f..34be768 100644 --- a/build/main.js +++ b/build/main.js @@ -88,6 +88,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: @@ -1188,8 +1192,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 = {}), @@ -1197,6 +1202,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(); @@ -1204,6 +1214,19 @@ 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); @@ -1231,11 +1254,23 @@ } 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; @@ -1295,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 ); @@ -2733,14 +2772,20 @@ 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 }), - state === MediaPlayerState.Playing - ? powerSave.start() - : powerSave.stop(); - }, 3e3) + 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 + ); + } ), PlayerIpc_ipc.on( "channel-player-track-update", @@ -2828,6 +2873,9 @@ "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 290f49a..394b4f4 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.1.8", -- 2.43.0