this has really killed all of my momentum, trying to do things well now
This commit is contained in:
3
src/@custom_types/indexeddb.d.ts
vendored
3
src/@custom_types/indexeddb.d.ts
vendored
@@ -1,3 +0,0 @@
|
|||||||
declare class Database {
|
|
||||||
constructor(name: string, version: number)
|
|
||||||
}
|
|
||||||
@@ -44,7 +44,9 @@ export class SlopDB {
|
|||||||
this.version = idb_version
|
this.version = idb_version
|
||||||
this.open_promise = openDB("SlopDB", idb_version, {
|
this.open_promise = openDB("SlopDB", idb_version, {
|
||||||
upgrade(db, oldVersion, newVersion, transaction, event) {
|
upgrade(db, oldVersion, newVersion, transaction, event) {
|
||||||
//TODO
|
for (let version = oldVersion + 1; version <= newVersion; version++) {
|
||||||
|
this.apply_db_upgrade(db, version)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -64,90 +66,90 @@ export class SlopDB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async open_database(idb_version: number): Promise<IDBDatabase> {
|
// async open_database(idb_version: number): Promise<IDBDatabase> {
|
||||||
const db_promise = new Promise<IDBDatabase>((resolve, reject) => {
|
// const db_promise = new Promise<IDBDatabase>((resolve, reject) => {
|
||||||
const db_request = window.indexedDB.open("SlopDB", idb_version)
|
// const db_request = window.indexedDB.open("SlopDB", idb_version)
|
||||||
|
|
||||||
// success and upgradeneeded will both fire, so this doesn't work right
|
// // success and upgradeneeded will both fire, so this doesn't work right
|
||||||
|
|
||||||
db_request.onerror = (_event) => {
|
// db_request.onerror = (_event) => {
|
||||||
reject(db_request.error)
|
// reject(db_request.error)
|
||||||
}
|
// }
|
||||||
|
|
||||||
db_request.onsuccess = (_event) => {
|
// db_request.onsuccess = (_event) => {
|
||||||
console.log("success")
|
// console.log("success")
|
||||||
resolve(db_request.result)
|
// resolve(db_request.result)
|
||||||
}
|
// }
|
||||||
|
|
||||||
db_request.onupgradeneeded = (upgrade_event) => {
|
// db_request.onupgradeneeded = (upgrade_event) => {
|
||||||
console.log("upgradeneeded")
|
// console.log("upgradeneeded")
|
||||||
const oldVersion = upgrade_event.oldVersion
|
// const oldVersion = upgrade_event.oldVersion
|
||||||
const newVersion = upgrade_event.newVersion
|
// const newVersion = upgrade_event.newVersion
|
||||||
|
|
||||||
const db = db_request.result
|
// const db = db_request.result
|
||||||
|
|
||||||
// make updates
|
// // make updates
|
||||||
for (let version = oldVersion + 1; version <= newVersion; version++) {
|
// for (let version = oldVersion + 1; version <= newVersion; version++) {
|
||||||
this.apply_db_upgrade(db, version)
|
// this.apply_db_upgrade(db, version)
|
||||||
}
|
// }
|
||||||
|
|
||||||
resolve(db)
|
// resolve(db)
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
|
|
||||||
return db_promise
|
// return db_promise
|
||||||
}
|
// }
|
||||||
|
|
||||||
start_transaction(storeNames: string | Array<string>, mode: IDBTransactionMode, options: IDBTransactionOptions = undefined): IDBTransaction {
|
// start_transaction(storeNames: string | Array<string>, mode: IDBTransactionMode, options: IDBTransactionOptions = undefined): IDBTransaction {
|
||||||
return this.db.transaction(storeNames, mode, options)
|
// return this.db.transaction(storeNames, mode, options)
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class CheckCache {
|
// export class CheckCache {
|
||||||
slopdb: SlopDB
|
// slopdb: SlopDB
|
||||||
cache_capacity: number
|
// cache_capacity: number
|
||||||
static cache_objectstore_name = "checkcache"
|
// static cache_objectstore_name = "checkcache"
|
||||||
|
|
||||||
constructor(slopdb: SlopDB, max_entries: number) {
|
// constructor(slopdb: SlopDB, max_entries: number) {
|
||||||
this.slopdb = slopdb
|
// this.slopdb = slopdb
|
||||||
this.cache_capacity = max_entries
|
// this.cache_capacity = max_entries
|
||||||
}
|
// }
|
||||||
|
|
||||||
cache_item_factory(url: URL) {
|
// cache_item_factory(url: URL) {
|
||||||
return {
|
// return {
|
||||||
url: url,
|
// url: url,
|
||||||
check_timestamp: Date.now()
|
// check_timestamp: Date.now()
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
async evict_least_recently_checked(count: number) {
|
// async evict_least_recently_checked(count: number) {
|
||||||
const transaction = this.slopdb.start_transaction(CheckCache.cache_objectstore_name, "readwrite")
|
// const transaction = this.slopdb.start_transaction(CheckCache.cache_objectstore_name, "readwrite")
|
||||||
const cache_objectstore = transaction.objectStore(CheckCache.cache_objectstore_name)
|
// const cache_objectstore = transaction.objectStore(CheckCache.cache_objectstore_name)
|
||||||
|
|
||||||
const cursor_result_promise = new Promise<Iterable<any>>((resolve, reject) => {
|
// const cursor_result_promise = new Promise<Iterable<any>>((resolve, reject) => {
|
||||||
const cache_cursor_request = cache_objectstore.openCursor()
|
// const cache_cursor_request = cache_objectstore.openCursor()
|
||||||
|
|
||||||
cache_cursor_request.onerror = (error) => {
|
// cache_cursor_request.onerror = (error) => {
|
||||||
reject(error)
|
// reject(error)
|
||||||
}
|
// }
|
||||||
|
|
||||||
cache_cursor_request.onsuccess = (event) => {
|
// cache_cursor_request.onsuccess = (event) => {
|
||||||
const cursor = cache_cursor_request.result
|
// const cursor = cache_cursor_request.result
|
||||||
resolve(new IDBCursorValueIterator(cursor))
|
// resolve(new IDBCursorValueIterator(cursor))
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
|
|
||||||
const cursor = await cursor_result_promise
|
// const cursor = await cursor_result_promise
|
||||||
|
|
||||||
const key_array = Array.from(cursor)
|
// const key_array = Array.from(cursor)
|
||||||
key_array.sort((a, b) => {
|
// key_array.sort((a, b) => {
|
||||||
const a_datetime = a.check_timestamp
|
// const a_datetime = a.check_timestamp
|
||||||
const b_datetime = b.check_timestamp
|
// const b_datetime = b.check_timestamp
|
||||||
|
|
||||||
return a_datetime.getTime - b_datetime.getTime
|
// return a_datetime.getTime - b_datetime.getTime
|
||||||
})
|
// })
|
||||||
|
|
||||||
|
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
Reference in New Issue
Block a user