A music player that connects to your cloud/distributed storage.
at main 1.2 kB view raw
1import type { App } from "./elm/types" 2import * as Tracks from "./tracks" 3 4 5export async function load(): Promise<Worker> { 6 const brain = new Worker( 7 "./js/brain/index.js#appHref=" + encodeURIComponent(window.location.href), 8 { type: "module" } 9 ) 10 11 await new Promise((resolve, reject) => { 12 brain.onmessage = event => { 13 if (event.data.action === "READY") resolve(null) 14 } 15 16 brain.addEventListener("error", () => { 17 reject("<strong>Failed to load web worker.</strong><br />If you're using Firefox, you might need to upgrade your browser (version 113 and up) and set `dom.workers.modules.enabled` to `true` in `about:config`") 18 }) 19 }) 20 21 // Fin 22 return brain 23} 24 25 26export function link({ app, brain }: { app: App, brain: Worker }) { 27 function handleAction(action, data, _ports) { 28 switch (action) { 29 case "DOWNLOAD_TRACKS": return Tracks.download(data) 30 } 31 } 32 33 brain.onmessage = event => { 34 if (event.data.action) return handleAction(event.data.action, event.data.data, event.ports) 35 if (event.data.tag) app.ports.fromAlien.send(event.data) 36 } 37 38 app.ports.toBrain.subscribe(a => brain.postMessage(a)) 39}