working on replies

This commit is contained in:
2026-04-15 06:05:46 +00:00
parent 0d392c90cc
commit c1de283fb6
15 changed files with 436 additions and 211 deletions

View File

@@ -10,12 +10,21 @@ const followingStoreName = "following";
const profileStoreName = "profiles";
let keyBase = "dandelion_posts_v1_";
let key = "";
let version = 1;
async function upgrade_0to1(db) {
let version = 3;
async function upgrade_0to1(db, _transaction) {
let postsStore = db.createObjectStore(postStoreName, { keyPath: "id", autoIncrement: true });
postsStore.createIndex("datetimeIndex", "post_timestamp", { unique: false });
postsStore.createIndex("postIDIndex", "data.post_id", { unique: true });
}
async function upgrade_1to2(_db, _transaction) {
// Was broken for some clients — index creation moved to upgrade_2to3
}
async function upgrade_2to3(_db, transaction) {
const postsStore = transaction.objectStore(postStoreName);
if (!postsStore.indexNames.contains("postReplyIndex")) {
postsStore.createIndex("postReplyIndex", "data.reply_to_id", { unique: false });
}
}
// let following = ['b38b623c-c3fa-4351-9cab-50233c99fa4e'];
// let profiles = [
// {
@@ -27,12 +36,12 @@ async function upgrade_0to1(db) {
// description: "A very nice person who never does anything wrong.",
// }];
// let tombstones = ['b38b623c-c3fa-4351-9cab-50233c99fa4e'];
async function upgrade_1to2(db) {
let followingStore = db.createObjectStore(followingStoreName, { keyPath: "id", autoIncrement: true });
let profileStore = db.createObjectStore(profileStoreName, { keyPath: "id", autoIncrement: true });
let tombstoneStore = db.createObjectStore(tombstoneStoreName, { keyPath: "id", autoIncrement: true });
tombstoneStore.createIndex("postIDIndex", "data.post_id", { unique: true });
}
// async function upgrade_1to2(db: IDBDatabase) {
// let followingStore = db.createObjectStore(followingStoreName, { keyPath: "id", autoIncrement: true });
// let profileStore = db.createObjectStore(profileStoreName, { keyPath: "id", autoIncrement: true });
// let tombstoneStore = db.createObjectStore(tombstoneStoreName, { keyPath: "id", autoIncrement: true });
// tombstoneStore.createIndex("postIDIndex", "data.post_id", { unique: true });
// }
// async function upgrade_1to2(db: IDBDatabase) {
// console.log("Upgrading database from 1 to 2");
// console.log("Converting all image arraybuffers to Blobs")
@@ -55,13 +64,13 @@ async function upgrade_1to2(db) {
// }
// }
// }
async function upgrade_2to3(db) {
let followingStore = db.createObjectStore(followingStoreName, { keyPath: "id", autoIncrement: true });
}
// async function upgrade_2to3(db: IDBDatabase) {
// let followingStore = db.createObjectStore(followingStoreName, { keyPath: "id", autoIncrement: true });
// }
let upgrades = new Map([
[0, upgrade_0to1],
[1, upgrade_1to2],
[2, upgrade_2to3]
[2, upgrade_2to3],
]);
export function openDatabase(userID) {
const dbName = `user_${userID}`;
@@ -73,12 +82,14 @@ export function openDatabase(userID) {
};
request.onupgradeneeded = async (event) => {
const db = event.target.result;
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}`);
const transaction = event.target.transaction;
for (let v = event.oldVersion; v < (event.newVersion ?? version); v++) {
const upgradeFunction = upgrades.get(v);
if (!upgradeFunction) {
throw new Error(`db: Don't have an upgrade function to go from version ${v} to version ${v + 1}`);
}
await upgradeFunction(db, transaction);
}
// debugger;
await upgradeFunction(db);
};
request.onsuccess = (event) => {
const db = event.target.result;