diff --git a/src/components/dialogs.tsx b/src/components/dialogs.tsx index d62caaa..5ff8c53 100644 --- a/src/components/dialogs.tsx +++ b/src/components/dialogs.tsx @@ -68,6 +68,7 @@ export function Dialogs(params: { manager: ReturnType openRequest.result.createObjectStore("store").createIndex("expireAt", "expireAt")) - - // Delete Expired - openRequest.addEventListener('success', () => { - db = openRequest.result - clearExpired() - }) -} -else console.warn(`IndexedDB not supported`) +let db = new Promise((resolve, reject) => { + if (typeof self.indexedDB !== 'undefined') { + const openRequest = indexedDB.open("yt-url-resolver-cache") + openRequest.addEventListener('upgradeneeded', () => openRequest.result.createObjectStore("store").createIndex("expireAt", "expireAt")) + openRequest.addEventListener('success', () => { + resolve(openRequest.result) + clearExpired() + }, { once: true }) + } + else reject(`IndexedDB not supported`) +}) async function clearExpired() { - return new Promise((resolve, reject) => { - if (!db) throw new Error(`IDBDatabase not defined.`) - const transaction = db.transaction("store", "readwrite") + return new Promise(async (resolve, reject) => { + const transaction = (await db).transaction("store", "readwrite") const range = IDBKeyRange.upperBound(new Date()) const expireAtCursorRequest = transaction.objectStore("store").index("expireAt").openCursor(range) @@ -40,8 +36,8 @@ async function clearExpired() { } async function clearAll() { - return await new Promise((resolve, reject) => { - const store = db?.transaction("store", "readwrite").objectStore("store") + return await new Promise(async (resolve, reject) => { + const store = (await db).transaction("store", "readwrite").objectStore("store") if (!store) return resolve() const request = store.clear() request.addEventListener('success', () => resolve()) @@ -50,8 +46,8 @@ async function clearAll() { } async function put(url: string | null, id: string): Promise { - return await new Promise((resolve, reject) => { - const store = db?.transaction("store", "readwrite").objectStore("store") + return await new Promise(async (resolve, reject) => { + const store = (await db).transaction("store", "readwrite").objectStore("store") if (!store) return resolve() const expireAt = !url ? new Date(Date.now() + 1 * 60 * 60 * 1000) : new Date(Date.now() + 15 * 24 * 60 * 60 * 1000) const request = store.put({ value: url, expireAt }, id) @@ -65,8 +61,8 @@ async function put(url: string | null, id: string): Promise { // null means there is cache of that id has no lbrypathname // undefined means there is no cache async function get(id: string): Promise { - const response = (await new Promise((resolve, reject) => { - const store = db?.transaction("store", "readonly").objectStore("store") + const response = (await new Promise(async (resolve, reject) => { + const store = (await db).transaction("store", "readonly").objectStore("store") if (!store) return reject(`Can't find object store.`) const request = store.get(id) diff --git a/src/modules/yt/urlResolve.ts b/src/modules/yt/urlResolve.ts index 99d4df7..f2f694a 100644 --- a/src/modules/yt/urlResolve.ts +++ b/src/modules/yt/urlResolve.ts @@ -49,7 +49,7 @@ export async function resolveById(params: Paramaters, progressCallback?: (progre const controller = new AbortController() // 5 second timeout: - const timeoutId = setTimeout(() => controller.abort(), 5000) + const timeoutId = setTimeout(() => controller.abort(), 15000) const apiResponse = await fetch(url.toString(), { cache: 'no-store', signal: controller.signal }) clearTimeout(timeoutId) diff --git a/src/pages/YTtoLBRY/README.md b/src/pages/YTtoLBRY/README.md deleted file mode 100644 index 04a15ce..0000000 --- a/src/pages/YTtoLBRY/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Getting your subscription data - -1. Go to https://takeout.google.com/settings/takeout -2. Deselect everything except `YouTube and YouTube Music` and within that only select `subscriptions` -3. Go through the process and create the export -4. Once it's exported, open the archive and find `YouTube and YouTube Music/subscriptions/subscriptions.json` and upload it to the extension \ No newline at end of file diff --git a/src/pages/YTtoLBRY/main.tsx b/src/pages/YTtoLBRY/main.tsx index 0294ce3..8ab79b1 100644 --- a/src/pages/YTtoLBRY/main.tsx +++ b/src/pages/YTtoLBRY/main.tsx @@ -4,7 +4,6 @@ import { getFileContent } from '../../modules/file' import { getSubsFromCsv, getSubsFromJson, getSubsFromOpml } from '../../modules/yt' import { resolveById } from '../../modules/yt/urlResolve' import { targetPlatformSettings, useExtensionSettings } from '../../settings' -import readme from './README.md' async function getSubscribedChannelIdsFromFile(file: File) { const ext = file.name.split('.').pop()?.toLowerCase() @@ -71,8 +70,15 @@ function YTtoLBRY() {