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/priority-queue.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/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/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/ui/style.js"></script>

View file

@ -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();
};
});
});
}
};

19
main.js
View file

@ -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() {

View file

@ -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;