UNPKG

@nent/core

Version:

Functional elements to add routing, data-binding, dynamic HTML, declarative actions, audio, video, and so much more. Supercharge static HTML files into web apps without script or builds.

44 lines (41 loc) 1.31 kB
/*! * NENT 2022 */ import { M as Mutex } from './mutex-e5645c85.js'; import { g as getDataProvider } from './factory-acbf0d3d.js'; import { I as InMemoryProvider } from './memory-0d63dacd.js'; const tracksKey = 'tracks'; const sessionFallback = new InMemoryProvider(); const collectionMutex = new Mutex(); function parseTracks(tracks) { return JSON.parse(tracks || '[]'); } function stringifyTracks(tracks) { return JSON.stringify(tracks || '[]'); } async function getSessionTracks() { const unlock = await collectionMutex.lock(); var provider = (await getDataProvider('session')) || sessionFallback; const tracks = await provider.get(tracksKey); unlock(); return tracks ? parseTracks(tracks) : []; } async function setSessionTracks(tracks) { return await collectionMutex.dispatch(async () => { const provider = ((await getDataProvider('session')) || sessionFallback); await provider.set(tracksKey, stringifyTracks(tracks)); }); } async function playedTrack(trackId) { const tracks = await getSessionTracks(); return tracks.includes(trackId); } async function markTrack(trackId) { const tracks = await getSessionTracks(); if (tracks.includes(trackId)) return; tracks.push(trackId); await setSessionTracks(tracks); } export { markTrack as m, playedTrack as p };