diff --git a/frontend/src/utils/indexdb-monitor.ts b/frontend/src/utils/indexdb-monitor.ts index b40079a3b..c1cc81b32 100644 --- a/frontend/src/utils/indexdb-monitor.ts +++ b/frontend/src/utils/indexdb-monitor.ts @@ -34,10 +34,15 @@ interface DiffMonitor { off: (event: EventType, listener: EventsListener | ErrorsListener) => void; } -export default async function createIndexedDBDiffMonitor( - dbName: string, - intervalMs: number = 1000, -): Promise { +export default async function createIndexedDBDiffMonitor({ + dbName, + storeName, + intervalMs = 1000, +}: { + dbName: string; + storeName?: string; + intervalMs?: number; +}): Promise { let lastSnapshot: DBSnapshot | null = null; let changes: Change[] = []; let intervalId: number | null = null; @@ -87,10 +92,10 @@ export default async function createIndexedDBDiffMonitor( }; try { - for (const storeName of Array.from(db.objectStoreNames)) { - const tx = db.transaction(storeName, "readonly"); - const store = tx.objectStore(storeName); - snapshot.stores[storeName] = await getAllFromStore(store); + for (const sn of Array.from(db.objectStoreNames)) { + const tx = db.transaction(sn, "readonly"); + const store = tx.objectStore(sn); + snapshot.stores[sn] = await getAllFromStore(store); } db.close(); @@ -99,6 +104,14 @@ export default async function createIndexedDBDiffMonitor( reject(error); } }; + request.onupgradeneeded = () => { + if (!storeName) return; + + const db = request.result; + if (!db.objectStoreNames.contains(storeName)) { + db.createObjectStore(storeName); + } + }; }); } diff --git a/frontend/src/views/Player/EmulatorJS/Player.vue b/frontend/src/views/Player/EmulatorJS/Player.vue index f7879cb54..1da302698 100644 --- a/frontend/src/views/Player/EmulatorJS/Player.vue +++ b/frontend/src/views/Player/EmulatorJS/Player.vue @@ -225,11 +225,15 @@ window.EJS_onGameStart = async () => { }; }, 10); - const savesMonitor = await createIndexedDBDiffMonitor("/data/saves", 2000); - const statesMonitor = await createIndexedDBDiffMonitor( - "EmulatorJS-states", - 2000, - ); + const savesMonitor = await createIndexedDBDiffMonitor({ + dbName: "/data/saves", + intervalMs: 2000, + }); + const statesMonitor = await createIndexedDBDiffMonitor({ + dbName: "EmulatorJS-states", + storeName: "states", + intervalMs: 2000, + }); // Start monitoring savesMonitor.start();