mirror of
https://github.com/captbaritone/webamp.git
synced 2026-01-24 02:36:00 +00:00
40 lines
1 KiB
JavaScript
40 lines
1 KiB
JavaScript
import IdbKvStore from "idb-kv-store";
|
|
import { throttle } from "../../js/utils";
|
|
const LOCAL_STORAGE_KEY = "webamp_state";
|
|
|
|
export async function bindToIndexedDB(webamp, clearState, useState) {
|
|
if (!useState) {
|
|
return;
|
|
}
|
|
const localStore = new IdbKvStore("webamp_state_database");
|
|
|
|
if (clearState) {
|
|
try {
|
|
await localStore.clear();
|
|
} catch (e) {
|
|
console.log("Failed to clear our IndexeddB state", e);
|
|
}
|
|
}
|
|
|
|
let previousSerializedState = null;
|
|
try {
|
|
previousSerializedState = await localStore.get(LOCAL_STORAGE_KEY);
|
|
} catch (e) {
|
|
console.error("Failed to load the saved state from IndexedDB", e);
|
|
}
|
|
|
|
if (previousSerializedState != null) {
|
|
webamp.__loadSerializedState(previousSerializedState);
|
|
}
|
|
|
|
async function persist() {
|
|
const serializedState = webamp.__getSerializedState();
|
|
try {
|
|
await localStore.set(LOCAL_STORAGE_KEY, serializedState);
|
|
} catch (e) {
|
|
console.log("Failed to save our state to IndexedDB", e);
|
|
}
|
|
}
|
|
|
|
webamp.__onStateChange(throttle(persist, 1000));
|
|
}
|