Experiment to rebuild Diffuse using web applets.
0

Configure Feed

Select the types of activity you want to include in your feed.

at main 2.4 kB View raw
1<main class="container"> 2 <h1>OpenSubsonic input</h1> 3 4 <h4>Mounted servers</h4> 5 6 <div id="servers"> 7 <p> 8 <span class="with-icon"> 9 <i class="iconoir-bonfire"></i> 10 <small>Just a moment, loading mounted servers.</small> 11 </span> 12 </p> 13 </div> 14 15 <h4>Add a new OpenSubsonic-compatible server</h4> 16 17 <form id="form"></form> 18</main> 19 20<script> 21 import type { Tasks } from "@scripts/input/opensubsonic/worker"; 22 import type { Track } from "@applets/core/types.d.ts"; 23 import { register } from "@scripts/applet/common"; 24 import { endpoint, inIframe, SharedWorker, transfer } from "@scripts/common"; 25 import manifest from "./_manifest.json"; 26 27 //////////////////////////////////////////// 28 // SETUP 29 //////////////////////////////////////////// 30 const worker = endpoint<Tasks>( 31 new Worker(new URL("../../../scripts/input/opensubsonic/worker", import.meta.url), { 32 type: "module", 33 name: manifest.name, 34 }), 35 ); 36 37 // Register applet 38 const context = register({ worker }); 39 40 //////////////////////////////////////////// 41 // ACTIONS 42 //////////////////////////////////////////// 43 const consult = async (fileUriOrScheme: string) => { 44 return await worker.consult(fileUriOrScheme); 45 }; 46 47 const contextualize = async (tracks: Track[]) => { 48 const s = await worker.contextualize(transfer(tracks)); 49 ui?.setServers({ ...ui?.servers(), ...s }); 50 }; 51 52 const groupConsult = async (tracks: Track[]) => { 53 return await worker.groupConsult(transfer(tracks)); 54 }; 55 56 const list = async (cachedTracks: Track[] = []) => { 57 return await worker.list(transfer(cachedTracks)); 58 }; 59 60 const resolve = async (args: { method: string; uri: string }) => { 61 return await worker.resolve(args); 62 }; 63 64 const mount = async () => {}; 65 66 const unmount = async () => {}; 67 68 context.setActionHandler("consult", consult); 69 context.setActionHandler("contextualize", contextualize); 70 context.setActionHandler("groupConsult", groupConsult); 71 context.setActionHandler("list", list); 72 context.setActionHandler("resolve", resolve); 73 context.setActionHandler("mount", mount); 74 context.setActionHandler("unmount", unmount); 75 76 //////////////////////////////////////////// 77 // UI 78 //////////////////////////////////////////// 79 const ui = inIframe() ? undefined : await import("@scripts/input/opensubsonic/ui"); 80</script>