refactor: indexedDB

This commit is contained in:
Azgaar 2023-07-08 23:32:39 +04:00
parent 4a5d2c0378
commit 290b6b38eb
4 changed files with 74 additions and 53 deletions

View file

@ -7841,7 +7841,7 @@
<script src="libs/d3.min.js"></script> <script src="libs/d3.min.js"></script>
<script src="libs/priority-queue.min.js"></script> <script src="libs/priority-queue.min.js"></script>
<script src="libs/delaunator.min.js"></script> <script src="libs/delaunator.min.js"></script>
<script src="libs/indexedDB.js?v=1.89.31"></script> <script src="libs/indexedDB.js?v=1.89.32"></script>
<script src="utils/shorthands.js"></script> <script src="utils/shorthands.js"></script>
<script src="utils/commonUtils.js?v=1.89.29"></script> <script src="utils/commonUtils.js?v=1.89.29"></script>
@ -7882,7 +7882,7 @@
<script src="modules/ui/general.js?v=1.87.03"></script> <script src="modules/ui/general.js?v=1.87.03"></script>
<script src="modules/ui/options.js?v=1.89.19"></script> <script src="modules/ui/options.js?v=1.89.19"></script>
<script src="main.js?v=1.89.29"></script> <script src="main.js?v=1.89.32"></script>
<script defer src="modules/relief-icons.js"></script> <script defer src="modules/relief-icons.js"></script>
<script defer src="modules/ui/style.js"></script> <script defer src="modules/ui/style.js"></script>

View file

@ -1,50 +1,72 @@
function getValue(key) { let db;
return new Promise(function (resolve) {
const DATABASE_NAME = "d2";
const STORE_NAME = "s";
const KEY_PATH = "key";
const openDatabase = () => {
return new Promise((resolve, reject) => {
if (db) { if (db) {
var transaction = db.transaction("store", "readonly"); resolve();
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);
};
} else { } else {
setTimeout(function () { const request = window.indexedDB.open(DATABASE_NAME, 1);
getValue(key).then(resolve);
}, 100);
}
});
}
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; request.onsuccess = event => {
if (!indexedDB) console.error("indexedDB not supported");
var db;
var request = indexedDB.open("myDatabase", 1);
request.onsuccess = function (event) {
db = event.target.result; db = event.target.result;
}; resolve();
};
request.onerror = function (event) { request.onerror = event => {
console.error("indexedDB request error"); console.error("indexedDB request error");
console.log(event); console.log(event);
}; reject();
request.onupgradeneeded = function (event) {
db = null;
var dbRequest = event.target.result;
var objectStore = dbRequest.createObjectStore("store", {keyPath: "key"});
objectStore.transaction.oncomplete = function () {
db = dbRequest;
}; };
request.onupgradeneeded = event => {
db = event.target.result;
const objectStore = db.createObjectStore(STORE_NAME, {keyPath: KEY_PATH});
objectStore.transaction.oncomplete = () => {
db = event.target.result;
};
};
}
});
}; };
window.ldb = { const ldb = {
get: getValue, get: key => {
set: function (key, value) { return new Promise((resolve, reject) => {
var transaction = db.transaction("store", "readwrite"); if (!window.indexedDB) return reject("indexedDB not supported");
var objectStore = transaction.objectStore("store");
objectStore.put({key: key, value: value}); openDatabase().then(() => {
const hasStore = Array.from(db.objectStoreNames).includes(STORE_NAME);
if (!hasStore) return reject("no store found");
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();
};
});
});
} }
}; };

13
main.js
View file

@ -281,20 +281,19 @@ async function checkLoadParameters() {
} }
// check if there is a map saved to indexedDB // check if there is a map saved to indexedDB
try {
const blob = await ldb.get("lastMap"); const blob = await ldb.get("lastMap");
if (blob) { if (blob) {
try {
WARN && console.warn("Loading last stored map"); WARN && console.warn("Loading last stored map");
uploadMap(blob); uploadMap(blob);
} catch (error) { return;
ERROR && console.error(error);
WARN && console.warn("Cannot load stored map, random map to be generated");
generateMapOnLoad();
} }
} else { } catch (error) {
console.error(error);
}
WARN && console.warn("Generate random map"); WARN && console.warn("Generate random map");
generateMapOnLoad(); generateMapOnLoad();
}
} }
async function generateMapOnLoad() { async function generateMapOnLoad() {

View file

@ -1,7 +1,7 @@
"use strict"; "use strict";
// version and caching control // 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; document.title += " v" + version;