165 lines
3.3 KiB
JavaScript
165 lines
3.3 KiB
JavaScript
/*
|
|
DB structure:
|
|
|
|
- tasks
|
|
- [username]:
|
|
- todos (array)
|
|
- [{text, done, focus}, {text, done, focus}]
|
|
- userColor
|
|
- counts
|
|
- users
|
|
- [username]:
|
|
- completeCount
|
|
- points
|
|
- totalCompleteCount
|
|
|
|
- taskmaster
|
|
- users
|
|
- [username]:
|
|
- taskMasterCompleteCount
|
|
- startDate
|
|
*/
|
|
|
|
let taskListMemory = {
|
|
doneTaskCount: 0,
|
|
totalTaskCount: 0,
|
|
};
|
|
|
|
const DBHandler = {
|
|
db: null,
|
|
open: function () {
|
|
return new Promise((resolve, reject) => {
|
|
let request = indexedDB.open("tasksDB", 1);
|
|
|
|
request.onupgradeneeded = function (e) {
|
|
let db = e.target.result;
|
|
if (!db.objectStoreNames.contains("tasks")) {
|
|
db.createObjectStore("tasks", { autoIncrement: true });
|
|
}
|
|
};
|
|
|
|
request.onsuccess = function (e) {
|
|
DBHandler.db = e.target.result;
|
|
resolve();
|
|
};
|
|
|
|
request.onerror = function (e) {
|
|
console.log("Error opening db", e);
|
|
reject(e);
|
|
};
|
|
});
|
|
},
|
|
get: function (key) {
|
|
return new Promise((resolve, reject) => {
|
|
let transaction = DBHandler.db.transaction(["tasks"], "readonly");
|
|
let store = transaction.objectStore("tasks");
|
|
let request = store.get(key);
|
|
|
|
request.onsuccess = function (e) {
|
|
resolve(e.target.result);
|
|
};
|
|
|
|
request.onerror = function (e) {
|
|
reject("Error getting item", e);
|
|
};
|
|
});
|
|
},
|
|
set: function (key, value) {
|
|
return new Promise((resolve, reject) => {
|
|
let transaction = DBHandler.db.transaction(["tasks"], "readwrite");
|
|
let store = transaction.objectStore("tasks");
|
|
let request = store.put(value, key);
|
|
|
|
request.onsuccess = function (e) {
|
|
resolve(e.target.result);
|
|
};
|
|
|
|
request.onerror = function (e) {
|
|
reject("Error setting item", e);
|
|
};
|
|
});
|
|
},
|
|
remove: function (key) {
|
|
return new Promise((resolve, reject) => {
|
|
let transaction = DBHandler.db.transaction(["tasks"], "readwrite");
|
|
let store = transaction.objectStore("tasks");
|
|
let request = store.delete(key);
|
|
|
|
request.onsuccess = function (e) {
|
|
resolve(e.target.result);
|
|
};
|
|
|
|
request.onerror = function (e) {
|
|
reject("Error removing item", e);
|
|
};
|
|
});
|
|
},
|
|
clear: function () {
|
|
return new Promise((resolve, reject) => {
|
|
let transaction = DBHandler.db.transaction(["tasks"], "readwrite");
|
|
let store = transaction.objectStore("tasks");
|
|
let request = store.clear();
|
|
|
|
request.onsuccess = function (e) {
|
|
resolve(e.target.result);
|
|
};
|
|
|
|
request.onerror = function (e) {
|
|
reject("Error clearing store", e);
|
|
};
|
|
});
|
|
},
|
|
};
|
|
|
|
async function transferLocalStorageToIndexedDB() {
|
|
let keys = Object.keys(localStorage);
|
|
|
|
for (let key of keys) {
|
|
let value = JSON.parse(localStorage.getItem(key));
|
|
await DBHandler.set(key, value);
|
|
}
|
|
|
|
console.log("Transfer complete");
|
|
|
|
await renderTaskListToDOM();
|
|
}
|
|
|
|
function clearLocalStorage() {
|
|
localStorage.removeItem("tasks");
|
|
localStorage.removeItem("counts");
|
|
}
|
|
|
|
async function resetDB() {
|
|
await DBHandler.clear();
|
|
await setupDB();
|
|
}
|
|
|
|
async function setupDB() {
|
|
const keys = ["tasks", "counts", "taskmaster"];
|
|
const defaultValues = [
|
|
{},
|
|
{ users: {} },
|
|
{
|
|
users: {},
|
|
startDate: new Date(),
|
|
taskMasterCompleteCount: 0,
|
|
},
|
|
];
|
|
|
|
for (let i = 0; i < keys.length; i++) {
|
|
let value = await DBHandler.get(keys[i]);
|
|
if (!value) {
|
|
value = defaultValues[i];
|
|
}
|
|
await DBHandler.set(keys[i], value);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
function clearMemory() {
|
|
taskListMemory = {
|
|
doneTaskCount: 0,
|
|
totalTaskCount: 0,
|
|
};
|
|
}
|