lotsa stuff

This commit is contained in:
bobbydigitales
2024-10-30 20:51:44 -07:00
parent 05c4800461
commit 6ce693cefc
13 changed files with 1421 additions and 373 deletions

View File

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