From 290b6b38eb9a208e95996aa5b4a2ee47786f55ad Mon Sep 17 00:00:00 2001 From: Azgaar Date: Sat, 8 Jul 2023 23:32:39 +0400 Subject: [PATCH] refactor: indexedDB --- index.html | 4 +- libs/indexedDB.js | 102 ++++++++++++++++++++++++++++------------------ main.js | 19 ++++----- versioning.js | 2 +- 4 files changed, 74 insertions(+), 53 deletions(-) diff --git a/index.html b/index.html index 56154669..c1f4c5d3 100644 --- a/index.html +++ b/index.html @@ -7841,7 +7841,7 @@ - + @@ -7882,7 +7882,7 @@ - + diff --git a/libs/indexedDB.js b/libs/indexedDB.js index 739e581d..100b7be4 100644 --- a/libs/indexedDB.js +++ b/libs/indexedDB.js @@ -1,50 +1,72 @@ -function getValue(key) { - return new Promise(function (resolve) { +let db; + +const DATABASE_NAME = "d2"; +const STORE_NAME = "s"; +const KEY_PATH = "key"; + +const openDatabase = () => { + return new Promise((resolve, reject) => { if (db) { - var transaction = db.transaction("store", "readonly"); - var objectStore = transaction.objectStore("store"); - var getRequest = objectStore.get(key); - getRequest.onsuccess = function (event) { - var result = event.target.result ? event.target.result.value : null; - resolve(result); - }; + resolve(); } else { - setTimeout(function () { - getValue(key).then(resolve); - }, 100); + const request = window.indexedDB.open(DATABASE_NAME, 1); + + request.onsuccess = event => { + db = event.target.result; + resolve(); + }; + + request.onerror = event => { + console.error("indexedDB request error"); + console.log(event); + reject(); + }; + + request.onupgradeneeded = event => { + db = event.target.result; + const objectStore = db.createObjectStore(STORE_NAME, {keyPath: KEY_PATH}); + objectStore.transaction.oncomplete = () => { + db = event.target.result; + }; + }; } }); -} - -var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; -if (!indexedDB) console.error("indexedDB not supported"); - -var db; -var request = indexedDB.open("myDatabase", 1); - -request.onsuccess = function (event) { - db = event.target.result; }; -request.onerror = function (event) { - console.error("indexedDB request error"); - console.log(event); -}; +const ldb = { + get: key => { + return new Promise((resolve, reject) => { + if (!window.indexedDB) return reject("indexedDB not supported"); -request.onupgradeneeded = function (event) { - db = null; - var dbRequest = event.target.result; - var objectStore = dbRequest.createObjectStore("store", {keyPath: "key"}); - objectStore.transaction.oncomplete = function () { - db = dbRequest; - }; -}; + openDatabase().then(() => { + const hasStore = Array.from(db.objectStoreNames).includes(STORE_NAME); + if (!hasStore) return reject("no store found"); -window.ldb = { - get: getValue, - set: function (key, value) { - var transaction = db.transaction("store", "readwrite"); - var objectStore = transaction.objectStore("store"); - objectStore.put({key: key, value: value}); + const transaction = db.transaction(STORE_NAME, "readonly"); + const objectStore = transaction.objectStore(STORE_NAME); + const getRequest = objectStore.get(key); + + getRequest.onsuccess = event => { + const result = event.target.result?.value || null; + resolve(result); + }; + }); + }); + }, + + set: (key, value) => { + return new Promise((resolve, reject) => { + if (!window.indexedDB) return reject("indexedDB not supported"); + + openDatabase().then(() => { + const transaction = db.transaction(STORE_NAME, "readwrite"); + const objectStore = transaction.objectStore(STORE_NAME); + const putRequest = objectStore.put({key, value}); + + putRequest.onsuccess = () => { + resolve(); + }; + }); + }); } }; diff --git a/main.js b/main.js index 9c49703d..e6f95d45 100644 --- a/main.js +++ b/main.js @@ -281,20 +281,19 @@ async function checkLoadParameters() { } // check if there is a map saved to indexedDB - const blob = await ldb.get("lastMap"); - if (blob) { - try { + try { + const blob = await ldb.get("lastMap"); + if (blob) { WARN && console.warn("Loading last stored map"); uploadMap(blob); - } catch (error) { - ERROR && console.error(error); - WARN && console.warn("Cannot load stored map, random map to be generated"); - generateMapOnLoad(); + return; } - } else { - WARN && console.warn("Generate random map"); - generateMapOnLoad(); + } catch (error) { + console.error(error); } + + WARN && console.warn("Generate random map"); + generateMapOnLoad(); } async function generateMapOnLoad() { diff --git a/versioning.js b/versioning.js index 8a3e0e3c..96707b45 100644 --- a/versioning.js +++ b/versioning.js @@ -1,7 +1,7 @@ "use strict"; // version and caching control -const version = "1.89.31"; // generator version, update each time +const version = "1.89.32"; // generator version, update each time { document.title += " v" + version;