Skip to content

Commit

Permalink
feat: Implement additional MediaSession actions and play state
Browse files Browse the repository at this point in the history
  • Loading branch information
jkeen committed May 22, 2023
1 parent 82affba commit 6f6e47a
Showing 1 changed file with 54 additions and 4 deletions.
58 changes: 54 additions & 4 deletions ember-stereo/src/services/stereo.js
Original file line number Diff line number Diff line change
Expand Up @@ -1085,6 +1085,7 @@ export default class Stereo extends Service.extend(EmberEvented) {
this._relayEvent('audio-played', info);
}
_relayPausedEvent(info) {
this._updateNowPlaying(this.currentSound);
this._relayEvent('audio-paused', info);
}
_relayEndedEvent(info) {
Expand Down Expand Up @@ -1125,7 +1126,20 @@ export default class Stereo extends Service.extend(EmberEvented) {

_updateNowPlaying(sound) {
if (!sound) return;
if ('mediaSession' in navigator && 'MediaMetadata' in window) {
if (sound.isDestroyed) return;

if (
window &&
navigator &&
'mediaSession' in navigator &&
'MediaMetadata' in window
) {
if (sound.isPlaying) {
navigator.mediaSession.playbackState = 'playing';
} else {
navigator.mediaSession.playbackState = 'paused';
}

let { title, artist, album, artwork } = sound.metadata;

let mediaAttributes = {
Expand All @@ -1138,9 +1152,45 @@ export default class Stereo extends Service.extend(EmberEvented) {
mediaAttributes.artwork = makeArray(artwork);
}

navigator.mediaSession.metadata = new window.MediaMetadata(
mediaAttributes
);
navigator.mediaSession.metadata = new MediaMetadata(mediaAttributes);

navigator.mediaSession.setActionHandler('play', () => {
if (!sound.isPlaying) {
sound.play();
}
});
navigator.mediaSession.setActionHandler('pause', () => {
if (sound.isPlaying) {
sound.pause();
}
});
navigator.mediaSession.setActionHandler('stop', () => {
sound.stop();
});
navigator.mediaSession.setActionHandler('seekbackward', () => {
if (sound.isRewindable) {
sound.rewind(15000);
}
});
navigator.mediaSession.setActionHandler('seekforward', () => {
if (sound.isFastForwardable) {
sound.fastForward(15000);
}
});
navigator.mediaSession.setActionHandler('seekto', (seekInfo) => {
if (sound.isSeekable) {
sound.position = seekInfo.seekTime * 1000;
}
});
// navigator.mediaSession.setActionHandler('previoustrack', () => {
// /* Code excerpted. */
// });
// navigator.mediaSession.setActionHandler('nexttrack', () => {
// /* Code excerpted. */
// });
// navigator.mediaSession.setActionHandler('skipad', () => {
// /* Code excerpted. */
// });
}
}

Expand Down

0 comments on commit 6f6e47a

Please sign in to comment.