109 lines
3.1 KiB
JavaScript
109 lines
3.1 KiB
JavaScript
const INTERNAL_SECOND_MS = 60 * 1000;
|
|
const INTERNAL_MINUTE_MS = 60 * INTERNAL_SECOND_MS;
|
|
const INTERNAL_HOUR_MS = 60 * INTERNAL_MINUTE_MS;
|
|
|
|
var isIndexedDBSupported = 'indexedDB' in window;
|
|
|
|
|
|
$.dbManager = {
|
|
openDatabases: {}
|
|
}
|
|
|
|
$.dbManager.alert = function (msg) {
|
|
alert(msg);
|
|
}
|
|
|
|
$.dbManager.openDatabase = function (name, version, onUpgradeNeeded) {
|
|
let dbManager = this;
|
|
return new Promise(function (resolve, reject) {
|
|
let db = dbManager.openDatabases[name];
|
|
if (db !== undefined && db !== null) {
|
|
resolve(db);
|
|
return;
|
|
}
|
|
let request = indexedDB.open(name, version);
|
|
request.onupgradeneeded = function (event) {
|
|
//Upgrade DB? Drop DB and reload? For now, drop db
|
|
console.log("onupgradeneeded");
|
|
|
|
if (onUpgradeNeeded != null) {
|
|
onUpgradeNeeded(event);
|
|
}
|
|
else {
|
|
dbManager.deleteDatabase(name).then(
|
|
function onSuccess(db) {
|
|
resolve(db);
|
|
},
|
|
function onError(error) {
|
|
reject(error);
|
|
});
|
|
}
|
|
//reject("Upgrade Needed");
|
|
};
|
|
|
|
request.onerror = function () {
|
|
console.error("Error: ", request.error);
|
|
reject(request.error);
|
|
};
|
|
|
|
request.onblocked = function () {
|
|
console.error();
|
|
reject("Database blocked");
|
|
};
|
|
|
|
request.onsuccess = function () {
|
|
let db = request.result;
|
|
|
|
db.onversionchange = function (event) {
|
|
let isDeleted = event.newVersion === null;
|
|
db.close();
|
|
if(!isDeleted)
|
|
alert("Database is outdated, please reload the page: ", event.currentTarget.name)
|
|
};
|
|
|
|
console.log("Database opened: ", name);
|
|
if (dbManager.openDatabases == null)
|
|
dbManager.openDatabases = {};
|
|
|
|
dbManager.openDatabases[name] = db;
|
|
db.onclose = function () { //TODO: DOesn't appear to be called currently
|
|
console.log('Database connection closed: ', name);
|
|
dbManager.openDatabases[name] = null;
|
|
}
|
|
resolve(db);
|
|
};
|
|
});
|
|
}
|
|
|
|
$.dbManager.closeDatabase = function (name) {
|
|
let currentDB = this;
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
let db = currentDB.openDatabases[name];
|
|
if (db != null) {
|
|
db.close();
|
|
}
|
|
currentDB.openDatabases[name] == null;
|
|
resolve();
|
|
});
|
|
}
|
|
|
|
$.dbManager.deleteDatabase = function (name) {
|
|
let currentDB = this;
|
|
return new Promise(function (resolve, reject) {
|
|
let request = indexedDB.deleteDatabase(name);
|
|
|
|
request.onerror = function () {
|
|
console.error("Error", request.error);
|
|
reject(request.error);
|
|
};
|
|
|
|
request.onsuccess = function () {
|
|
console.log("database deleted: ", name);
|
|
currentDB.openDatabases[name] = null;
|
|
resolve();
|
|
};
|
|
});
|
|
}
|
|
|