diff --git a/src/pages/SettingsPage.jsx b/src/pages/SettingsPage.jsx index 2f26741..16b62af 100644 --- a/src/pages/SettingsPage.jsx +++ b/src/pages/SettingsPage.jsx @@ -53,9 +53,11 @@ export default function SettingsPage() { } const handleClear = async () => { - await cacheClear() - setCleared(true) - setTimeout(() => setCleared(false), 2000) + const success = await cacheClear() + if (success) { + setCleared(true) + setTimeout(() => setCleared(false), 2000) + } } const rateColor = rateLimit diff --git a/src/services/github.js b/src/services/github.js index a4180fa..435f218 100644 --- a/src/services/github.js +++ b/src/services/github.js @@ -16,13 +16,27 @@ export async function cacheGet(key) { try { const db = await openDB() return new Promise(res => { - const req = db.transaction(STORE, 'readonly').objectStore(STORE).get(key) + const tx = db.transaction(STORE, 'readonly') + const req = tx.objectStore(STORE).get(key) + let value = null req.onsuccess = () => { const r = req.result - if (!r || Date.now() - r.ts > TTL_MS) return res(null) - res(r.v) + if (r && Date.now() - r.ts <= TTL_MS) { + value = r.v + } + } + tx.oncomplete = () => { + db.close() + res(value) + } + tx.onerror = () => { + db.close() + res(null) + } + tx.onabort = () => { + db.close() + res(null) } - req.onerror = () => res(null) }) } catch { return null } } @@ -33,8 +47,18 @@ export async function cacheSet(key, value) { return new Promise(res => { const tx = db.transaction(STORE, 'readwrite') tx.objectStore(STORE).put({ k: key, v: value, ts: Date.now() }) - tx.oncomplete = () => res(true) - tx.onerror = () => res(false) + tx.oncomplete = () => { + db.close() + res(true) + } + tx.onerror = () => { + db.close() + res(false) + } + tx.onabort = () => { + db.close() + res(false) + } }) } catch { return false } } @@ -45,8 +69,18 @@ export async function cacheClear() { return new Promise(res => { const tx = db.transaction(STORE, 'readwrite') tx.objectStore(STORE).clear() - tx.oncomplete = () => res(true) - tx.onerror = () => res(false) + tx.oncomplete = () => { + db.close() + res(true) + } + tx.onerror = () => { + db.close() + res(false) + } + tx.onabort = () => { + db.close() + res(false) + } }) } catch { return false } }