webamp/js/mediaSession.ts
2018-09-28 06:45:22 -07:00

57 lines
2.2 KiB
TypeScript

import WebampLazy from "./webampLazy";
import { LoadedURLTrack } from "./types";
export default function enableMediaSession(webamp: WebampLazy) {
if ("mediaSession" in navigator) {
/* global MediaMetadata */
webamp.onTrackDidChange((track: LoadedURLTrack | null) => {
if (track == null) {
return;
}
const {
metaData: { title, artist, album, albumArtUrl }
} = track;
// @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473
navigator.mediaSession.metadata = new MediaMetadata({
title,
artist,
album,
artwork: albumArtUrl
? [
{
src: albumArtUrl
// We don't currently know these.
// sizes: "96x96",
// type: "image/png"
}
]
: []
});
});
// @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473
navigator.mediaSession.setActionHandler("play", () => {
webamp.play();
});
// @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473
navigator.mediaSession.setActionHandler("pause", () => {
webamp.pause();
});
// @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473
navigator.mediaSession.setActionHandler("seekbackward", () => {
webamp.seekBackward(10);
});
// @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473
navigator.mediaSession.setActionHandler("seekforward", () => {
webamp.seekForward(10);
});
// @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473
navigator.mediaSession.setActionHandler("previoustrack", () => {
webamp.previousTrack();
});
// @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473
navigator.mediaSession.setActionHandler("nexttrack", () => {
webamp.nextTrack();
});
}
}