Experiment to rebuild Diffuse using web applets.
0
fork

Configure Feed

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

feat: reuse cached tracks when possible

+26 -10
+1 -1
src/pages/configurator/input/_applet.astro
··· 59 59 const groups = cachedTracks.reduce( 60 60 (acc: Record<string, Track[]>, track: Track) => { 61 61 const scheme = track.uri.split(":", 1)[0]; 62 - return { ...acc, [scheme]: [...(acc.scheme || []), track] }; 62 + return { ...acc, [scheme]: [...(acc[scheme] || []), track] }; 63 63 }, 64 64 { 65 65 [input.nativeFs.manifest.input_properties.scheme]: [],
+18 -8
src/pages/input/s3/_applet.astro
··· 45 45 import * as URI from "uri-js"; 46 46 import QS from "query-string"; 47 47 48 - // @ts-ignore 49 - import { encodeS3URI } from "node-s3-url-encode"; 50 - 51 48 import type { Output, Track } from "@applets/core/types.d.ts"; 52 49 import { applet } from "@scripts/theme"; 53 50 ··· 221 218 // ACTIONS 222 219 //////////////////////////////////////////// 223 220 const consult = async (fileUriOrScheme: string) => { 224 - if (!navigator.onLine) return false; 221 + if (!navigator.onLine) 222 + return { supported: false, reason: "Internet connection is not available" }; 225 223 226 224 // TODO: Check if bucket is avail*able + CORS works? 227 - return true; 225 + return { supported: true }; 228 226 }; 229 227 230 - const list = async (_cachedTracks: Track[] = []) => { 231 - // TODO: Do we need to do something with the old tracks here? 228 + const list = async (cachedTracks: Track[] = []) => { 229 + const cache = cachedTracks.reduce((acc: Record<string, Track>, t: Track) => { 230 + const uri = URI.parse(t.uri); 231 + if (!uri.path) return acc; 232 + return { ...acc, [URI.unescapeComponent(uri.path)]: t }; 233 + }, {}); 232 234 233 235 const promises = Object.values(buckets()).map(async (bucket) => { 234 236 const client = createClient(bucket); ··· 242 244 return list 243 245 .filter((l) => isAudioFile(l.key)) 244 246 .map((l) => { 247 + const cachedTrack = cache[`/${l.key}`]; 248 + 249 + const id = cachedTrack?.id || crypto.randomUUID(); 250 + const stats = cachedTrack?.stats; 251 + const tags = cachedTrack?.tags; 252 + 245 253 const track: Track = { 246 - id: crypto.randomUUID(), 254 + id, 255 + stats, 256 + tags, 247 257 uri: buildURI(bucket, l.key), 248 258 }; 249 259
+7 -1
src/pages/orchestrator/input-cache/_applet.astro
··· 33 33 }; 34 34 35 35 // 🚀 36 - process(); 36 + orchestrator.output.addEventListener( 37 + "data", 38 + () => { 39 + process(); 40 + }, 41 + { once: true }, 42 + ); 37 43 38 44 //////////////////////////////////////////// 39 45 // ACTIONS