🥡 Refactor

This commit is contained in:
Shiba 2022-01-09 18:59:41 +00:00
parent 719ff06caf
commit 7727d04157

View file

@ -91,65 +91,57 @@ export const ytService = (() => {
return rows.slice(1).map((row) => row.substring(0, row.indexOf(','))) return rows.slice(1).map((row) => row.substring(0, row.indexOf(',')))
} }
const URLResolverCache = (() => const URLResolverCache = (() =>
{
const openRequest = indexedDB.open("yt-url-resolver-cache")
if (typeof self.indexedDB !== 'undefined')
{ {
openRequest.addEventListener('upgradeneeded', () => const openRequest = self.indexedDB?.open("yt-url-resolver-cache")
{
const db = openRequest.result
const store = db.createObjectStore("store")
store.createIndex("expireAt", "expireAt")
})
// Delete Expired if (openRequest)
openRequest.addEventListener('success', () =>
{ {
const db = openRequest.result openRequest.addEventListener('upgradeneeded', () => openRequest.result.createObjectStore("store").createIndex("expireAt", "expireAt"))
const transaction = db.transaction("store", "readwrite")
const range = IDBKeyRange.upperBound(new Date())
const expireAtCursorRequest = transaction.objectStore("store").index("expireAt").openCursor(range) // Delete Expired
expireAtCursorRequest.addEventListener('success', () => openRequest.addEventListener('success', () =>
{ {
const expireCursor = expireAtCursorRequest.result const transaction = openRequest.result.transaction("store", "readwrite")
if (!expireCursor) return const range = IDBKeyRange.upperBound(new Date())
expireCursor.delete()
expireCursor.continue() const expireAtCursorRequest = transaction.objectStore("store").index("expireAt").openCursor(range)
expireAtCursorRequest.addEventListener('success', () =>
{
const expireCursor = expireAtCursorRequest.result
if (!expireCursor) return
expireCursor.delete()
expireCursor.continue()
})
}) })
}) }
} else console.warn(`IndexedDB not supported`)
else console.warn(`IndexedDB not supported`)
async function put(url: string | null, id: string) : Promise<void> async function put(url: string | null, id: string): Promise<void>
{
return await new Promise((resolve, reject) =>
{ {
const db = openRequest.result return await new Promise((resolve, reject) =>
if (!db) return resolve() {
const store = db.transaction("store", "readwrite").objectStore("store") const store = openRequest.result.transaction("store", "readwrite").objectStore("store")
const putRequest = store.put({ value: url, expireAt: new Date(Date.now() + 24 * 60 * 60 * 1000) }, id) if (!store) return resolve()
putRequest.addEventListener('success', () => resolve()) const request = store.put({ value: url, expireAt: new Date(Date.now() + 24 * 60 * 60 * 1000) }, id)
putRequest.addEventListener('error', () => reject(putRequest.error)) request.addEventListener('success', () => resolve())
}) request.addEventListener('error', () => reject(request.error))
} })
async function get(id: string): Promise<string | null> }
{ async function get(id: string): Promise<string | null>
return (await new Promise((resolve, reject) =>
{ {
const db = openRequest.result return (await new Promise((resolve, reject) =>
if (!db) return resolve(null) {
const store = db.transaction("store", "readonly").objectStore("store") const store = openRequest.result.transaction("store", "readonly").objectStore("store")
const getRequest = store.get(id) if (!store) return resolve(null)
getRequest.addEventListener('success', () => resolve(getRequest.result)) const request = store.get(id)
getRequest.addEventListener('error', () => reject(getRequest.error)) request.addEventListener('success', () => resolve(request.result))
}) as any)?.value request.addEventListener('error', () => reject(request.error))
} }) as any)?.value
}
return { put, get } return { put, get }
})() })()
/** /**