diff options
| author | Mistivia <i@mistivia.com> | 2025-07-30 14:54:32 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-07-30 14:54:32 +0800 |
| commit | ae2f1023b78820b37e5d8ca94e6de500feeefe38 (patch) | |
| tree | d4476348081ded6ca60ff9419ecdccfd1046e0bb /src/loading.js | |
| parent | 701ef55d33a0393f3fdf20f4dac40f166d91254f (diff) | |
use indexDb
Diffstat (limited to 'src/loading.js')
| -rw-r--r-- | src/loading.js | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/src/loading.js b/src/loading.js index d768576..523f26c 100644 --- a/src/loading.js +++ b/src/loading.js @@ -11,6 +11,47 @@ async function noCacheFetch(url) { return fetch(url + '?t=' + timestamp); } +const DB_NAME = 'CardDatabase'; +const STORE_NAME = 'cardStore'; + +async function openidxdb() { + return new Promise((resolve, reject) => { + const request = indexedDB.open(DB_NAME, 1); + request.onupgradeneeded = (event) => { + const db = event.target.result; + if (!db.objectStoreNames.contains(STORE_NAME)) { + db.createObjectStore(STORE_NAME); + } + }; + request.onsuccess = () => resolve(request.result); + request.onerror = () => reject(request.error); + }); +} + +async function getidxdbitem(key) { + let db = await openidxdb(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(STORE_NAME, 'readonly'); + const store = transaction.objectStore(STORE_NAME); + const request = store.get(key); + + request.onsuccess = () => resolve(request.result); + request.onerror = () => resolve(null); + }); +} + +async function setidxdbitem(key, value) { + const db = await openidxdb(); + return new Promise((resolve, reject) => { + const transaction = db.transaction(STORE_NAME, 'readwrite'); + const store = transaction.objectStore(STORE_NAME); + const request = store.put(value, key); + + request.onsuccess = () => resolve(); + request.onerror = () => reject(request.error); + }); +} + async function fetchCardDb() { let localVer = localStorage.getItem('card_db_ver'); try { @@ -21,8 +62,8 @@ async function fetchCardDb() { } let data = await response.json(); data = String(data) - if (localVer === data && localStorage.getItem('card_db') !== null) { - setCardDb(JSON.parse(localStorage.getItem('card_db'))); + if (localVer === data && await getidxdbitem('card_db') !== null) { + setCardDb(JSON.parse(await getidxdbitem('card_db'))); } else { localVer = data; response = await noCacheFetch("https://raye.mistivia.com/card_db_parts/index.json"); @@ -36,7 +77,7 @@ async function fetchCardDb() { data = JSON.parse(datas.join('')); setCardDb(data); localStorage.setItem('card_db_ver', localVer); - localStorage.setItem('card_db', datas.join('')); + await setidxdbitem('card_db', datas.join('')); } setAltId(idChangelog); } catch (error) { |
