diff --git a/src/components/Player.vue b/src/components/Player.vue index 0b98ab61..2a4cf40c 100644 --- a/src/components/Player.vue +++ b/src/components/Player.vue @@ -217,6 +217,13 @@ export default { : ''; }, }, + mounted() { + this.setupMediaControls(); + window.addEventListener('keydown', this.handleKeydown); + }, + beforeDestroy() { + window.removeEventListener('keydown', this.handleKeydown); + }, methods: { ...mapMutations(['toggleLyrics']), ...mapActions(['showToast', 'likeATrack']), @@ -270,6 +277,39 @@ export default { mute() { this.player.mute(); }, + + setupMediaControls() { + if ('mediaSession' in navigator) { + navigator.mediaSession.setActionHandler('play', () => { + this.playOrPause(); + }); + navigator.mediaSession.setActionHandler('pause', () => { + this.playOrPause(); + }); + navigator.mediaSession.setActionHandler('previoustrack', () => { + this.playPrevTrack(); + }); + navigator.mediaSession.setActionHandler('nexttrack', () => { + this.playNextTrack(); + }); + } + }, + + handleKeydown(event) { + switch (event.code) { + case 'MediaPlayPause': + this.playOrPause(); + break; + case 'MediaTrackPrevious': + this.playPrevTrack(); + break; + case 'MediaTrackNext': + this.playNextTrack(); + break; + default: + break; + } + }, }, };