From d7bc2d29cfe618dfc72a97492da9f577aeb499d0 Mon Sep 17 00:00:00 2001 From: Steven Vandevelde Date: Thu, 29 May 2025 01:35:07 +0200 Subject: [PATCH] feat: reuse cached tracks when possible --- src/pages/configurator/input/_applet.astro | 2 +- src/pages/input/s3/_applet.astro | 26 +++++++++++++------ .../orchestrator/input-cache/_applet.astro | 8 +++++- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/pages/configurator/input/_applet.astro b/src/pages/configurator/input/_applet.astro index 9424ac7..cda5f70 100644 --- a/src/pages/configurator/input/_applet.astro +++ b/src/pages/configurator/input/_applet.astro @@ -59,7 +59,7 @@ const groups = cachedTracks.reduce( (acc: Record, track: Track) => { const scheme = track.uri.split(":", 1)[0]; - return { ...acc, [scheme]: [...(acc.scheme || []), track] }; + return { ...acc, [scheme]: [...(acc[scheme] || []), track] }; }, { [input.nativeFs.manifest.input_properties.scheme]: [], diff --git a/src/pages/input/s3/_applet.astro b/src/pages/input/s3/_applet.astro index caa264c..4c14584 100644 --- a/src/pages/input/s3/_applet.astro +++ b/src/pages/input/s3/_applet.astro @@ -45,9 +45,6 @@ import * as URI from "uri-js"; import QS from "query-string"; - // @ts-ignore - import { encodeS3URI } from "node-s3-url-encode"; - import type { Output, Track } from "@applets/core/types.d.ts"; import { applet } from "@scripts/theme"; @@ -221,14 +218,19 @@ // ACTIONS //////////////////////////////////////////// const consult = async (fileUriOrScheme: string) => { - if (!navigator.onLine) return false; + if (!navigator.onLine) + return { supported: false, reason: "Internet connection is not available" }; // TODO: Check if bucket is avail*able + CORS works? - return true; + return { supported: true }; }; - const list = async (_cachedTracks: Track[] = []) => { - // TODO: Do we need to do something with the old tracks here? + const list = async (cachedTracks: Track[] = []) => { + const cache = cachedTracks.reduce((acc: Record, t: Track) => { + const uri = URI.parse(t.uri); + if (!uri.path) return acc; + return { ...acc, [URI.unescapeComponent(uri.path)]: t }; + }, {}); const promises = Object.values(buckets()).map(async (bucket) => { const client = createClient(bucket); @@ -242,8 +244,16 @@ return list .filter((l) => isAudioFile(l.key)) .map((l) => { + const cachedTrack = cache[`/${l.key}`]; + + const id = cachedTrack?.id || crypto.randomUUID(); + const stats = cachedTrack?.stats; + const tags = cachedTrack?.tags; + const track: Track = { - id: crypto.randomUUID(), + id, + stats, + tags, uri: buildURI(bucket, l.key), }; diff --git a/src/pages/orchestrator/input-cache/_applet.astro b/src/pages/orchestrator/input-cache/_applet.astro index c8d8109..c0c3432 100644 --- a/src/pages/orchestrator/input-cache/_applet.astro +++ b/src/pages/orchestrator/input-cache/_applet.astro @@ -33,7 +33,13 @@ }; // 🚀 - process(); + orchestrator.output.addEventListener( + "data", + () => { + process(); + }, + { once: true }, + ); //////////////////////////////////////////// // ACTIONS -- 2.51.2