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 (43 loc) 1.39 kB
/*! * NENT 2022 */ import { Mutex } from '../../../services/common/mutex'; import { getDataProvider } from '../../../services/data/factory'; import { InMemoryProvider } from '../../../services/data/providers/memory'; 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 || '[]'); } export 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) : []; } export async function setSessionTracks(tracks) { return await collectionMutex.dispatch(async () => { const provider = ((await getDataProvider('session')) || sessionFallback); await provider.set(tracksKey, stringifyTracks(tracks)); }); } export async function playedTrack(trackId) { const tracks = await getSessionTracks(); return tracks.includes(trackId); } export async function markTrack(trackId) { const tracks = await getSessionTracks(); if (tracks.includes(trackId)) return; tracks.push(trackId); await setSessionTracks(tracks); } export async function clearTracks() { await setSessionTracks([]); }