feat: plugins/web: use media session api for notifications.

The Media Session API provides a way to customize media notifications.
This commit updates the metadata for the media session whenever a new
track (item) starts playing.

https://developer.mozilla.org/en-US/docs/Web/API/Media_Session_API
This commit is contained in:
Martin Atukunda 2025-04-09 09:36:36 +03:00 committed by Šarūnas Nejus
parent 4ddd782e8a
commit b0238d934e

View file

@ -266,7 +266,9 @@ var AppView = Backbone.View.extend({
playItem: function(item) {
var url = 'item/' + item.get('id') + '/file';
$('#player audio').attr('src', url);
$('#player audio').get(0).play();
$('#player audio').get(0).play().then(() => {
this.updateMediaSession(item);
});
if (this.playingItem != null) {
this.playingItem.entryView.setPlaying(false);
@ -275,6 +277,26 @@ var AppView = Backbone.View.extend({
this.playingItem = item;
},
updateMediaSession: function (item) {
if ("mediaSession" in navigator) {
album_id = item.get("album_id");
album_art_url = "album/" + album_id + "/art";
navigator.mediaSession.metadata = new MediaMetadata({
title: item.get("title"),
artist: item.get("artist"),
album: item.get("album"),
artwork: [
{ src: album_art_url, sizes: "96x96" },
{ src: album_art_url, sizes: "128x128" },
{ src: album_art_url, sizes: "192x192" },
{ src: album_art_url, sizes: "256x256" },
{ src: album_art_url, sizes: "384x384" },
{ src: album_art_url, sizes: "512x512" },
],
});
}
},
audioPause: function() {
this.playingItem.entryView.setPlaying(false);
},