lotsa stuff
This commit is contained in:
58
static/db.js
58
static/db.js
@@ -5,14 +5,23 @@
|
||||
// }
|
||||
// Efficiently storing data in indexdb: https://stackoverflow.com/a/62975917
|
||||
const postStoreName = "posts";
|
||||
const tombStoneStoreName = "tombstones";
|
||||
const followingStoreName = "following";
|
||||
let keyBase = "dandelion_posts_v1_";
|
||||
let key = "";
|
||||
let version = 1;
|
||||
function upgrade_0to1(db) {
|
||||
let store = db.createObjectStore(postStoreName, { keyPath: "id", autoIncrement: true });
|
||||
store.createIndex("datetimeIndex", "post_timestamp", { unique: false });
|
||||
store.createIndex("postIDIndex", "data.post_id", { unique: true });
|
||||
let postsStore = db.createObjectStore(postStoreName, { keyPath: "id", autoIncrement: true });
|
||||
postsStore.createIndex("datetimeIndex", "post_timestamp", { unique: false });
|
||||
postsStore.createIndex("postIDIndex", "data.post_id", { unique: true });
|
||||
}
|
||||
function upgrade_1to2(db) {
|
||||
let followingStore = db.createObjectStore(followingStoreName, { keyPath: "id", autoIncrement: true });
|
||||
}
|
||||
let upgrades = new Map([
|
||||
[0, upgrade_0to1],
|
||||
[1, upgrade_1to2]
|
||||
]);
|
||||
export function openDatabase(userID) {
|
||||
const dbName = `user_${userID}`;
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -23,7 +32,11 @@ export function openDatabase(userID) {
|
||||
};
|
||||
request.onupgradeneeded = (event) => {
|
||||
const db = event.target.result;
|
||||
upgrade_0to1(db);
|
||||
let upgradeFunction = upgrades.get(event.oldVersion);
|
||||
if (!upgradeFunction) {
|
||||
throw new Error(`db: Don't have an upgrade function to go from version ${event.oldVersion} to version ${event.newVersion}`);
|
||||
}
|
||||
upgradeFunction(db);
|
||||
};
|
||||
request.onsuccess = (event) => {
|
||||
const db = event.target.result;
|
||||
@@ -31,15 +44,15 @@ export function openDatabase(userID) {
|
||||
};
|
||||
});
|
||||
}
|
||||
async function getDBTransactionStore(userID) {
|
||||
async function getDBTransactionStore(userID, mode = "readonly") {
|
||||
const db = await openDatabase(userID);
|
||||
const transaction = db.transaction(postStoreName, "readwrite");
|
||||
const transaction = db.transaction(postStoreName, mode);
|
||||
const store = transaction.objectStore(postStoreName);
|
||||
return { db, transaction, store };
|
||||
}
|
||||
export async function addData(userID, data) {
|
||||
try {
|
||||
const { db, transaction, store } = await getDBTransactionStore(userID);
|
||||
const { db, transaction, store } = await getDBTransactionStore(userID, "readwrite");
|
||||
const addRequest = store.add({ post_timestamp: data.post_timestamp, data: data });
|
||||
addRequest.onsuccess = (e) => {
|
||||
// console.log('Data has been added:', (e.target as IDBRequest).result);
|
||||
@@ -56,7 +69,7 @@ export async function addData(userID, data) {
|
||||
}
|
||||
export async function deleteData(userID, postID) {
|
||||
try {
|
||||
const { db, transaction, store } = await getDBTransactionStore(userID);
|
||||
const { db, transaction, store } = await getDBTransactionStore(userID, "readwrite");
|
||||
const index = store.index("postIDIndex");
|
||||
const getRequest = index.getKey(postID);
|
||||
getRequest.onerror = e => console.log(e.target.error);
|
||||
@@ -77,7 +90,7 @@ export async function deleteData(userID, postID) {
|
||||
}
|
||||
export async function clearData(userID) {
|
||||
try {
|
||||
const { db, transaction, store } = await getDBTransactionStore(userID);
|
||||
const { db, transaction, store } = await getDBTransactionStore(userID, "readwrite");
|
||||
const clearRequest = store.clear();
|
||||
clearRequest.onsuccess = (e) => {
|
||||
// console.log('Data has been added:', (e.target as IDBRequest).result);
|
||||
@@ -94,20 +107,23 @@ export async function clearData(userID) {
|
||||
}
|
||||
export async function addDataArray(userID, array) {
|
||||
try {
|
||||
const { db, transaction, store } = await getDBTransactionStore(userID);
|
||||
let count = 0;
|
||||
const { db, transaction, store } = await getDBTransactionStore(userID, "readwrite");
|
||||
transaction.onerror = (event) => {
|
||||
console.error('Error in adding data:', event);
|
||||
};
|
||||
// let count = 0;
|
||||
array.reverse();
|
||||
for (let data of array) {
|
||||
const addRequest = store.add({ post_timestamp: data.post_timestamp, data: data });
|
||||
addRequest.onsuccess = (e) => {
|
||||
// console.log('Data has been added:', (e.target as IDBRequest).result);
|
||||
};
|
||||
addRequest.onerror = (event) => {
|
||||
// Use a type assertion to access the specific properties of IDBRequest error event
|
||||
const errorEvent = event;
|
||||
console.error('Error in adding data:', errorEvent.target.error?.message);
|
||||
};
|
||||
count++;
|
||||
// addRequest.onsuccess = (e: Event) => {
|
||||
// // console.log('Data has been added:', (e.target as IDBRequest).result);
|
||||
// };
|
||||
// addRequest.onerror = (event: Event) => {
|
||||
// // Use a type assertion to access the specific properties of IDBRequest error event
|
||||
// const errorEvent = event as IDBRequestEvent;
|
||||
// console.error('Error in adding data:', errorEvent.target.error?.message);
|
||||
// };
|
||||
// count++;
|
||||
// if (count % 100 === 0) {
|
||||
// console.log(`Added ${count} posts...`);
|
||||
// }
|
||||
@@ -161,7 +177,7 @@ export async function checkPostIds(userID, post_ids) {
|
||||
}
|
||||
export async function mergeDataArray(userID, array) {
|
||||
try {
|
||||
const { db, transaction, store } = await getDBTransactionStore(userID);
|
||||
const { db, transaction, store } = await getDBTransactionStore(userID, "readwrite");
|
||||
const index = store.index("postIDIndex");
|
||||
transaction.oncomplete = () => {
|
||||
// console.log("Transaction completed successfully");
|
||||
|
||||
Reference in New Issue
Block a user