@nent/core
Version:
44 lines (43 loc) • 1.39 kB
JavaScript
/*!
* 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([]);
}