diff --git a/src/index.html b/src/index.html index 976def3..a5dad00 100644 --- a/src/index.html +++ b/src/index.html @@ -15,31 +15,31 @@ -
- Skip to main content +
git.skaarup.dev/nikiskaarup/userscripts - +

- userscripts + Userscripts

    diff --git a/src/userscripts/manga-reading/manga-reading.user.ts b/src/userscripts/manga-reading/manga-reading.user.ts index f6474bc..37b4d1c 100644 --- a/src/userscripts/manga-reading/manga-reading.user.ts +++ b/src/userscripts/manga-reading/manga-reading.user.ts @@ -9,7 +9,7 @@ // @downloadURL https://userscripts.skaarup.dev/scripts/manga-reading.user.js // @resource stylesheet https://userscripts.skaarup.dev/styles/manga-reading.user.css // @resource overrides https://userscripts.skaarup.dev/styles/manga-reading-overrides.user.css -// @connect https://pt-api.web.skaarup.dev +// @connect https://pt-api.skaarup.dev // @icon data:image/png;base64,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 // @match https://readmanganato.com/* // @match https://www.readmanganato.com/* @@ -954,13 +954,13 @@ async function initMangaReading() { }); if (!response.ok) { - console.error(`${logName} Failed to fetch bookmarks`); + console.error(`${logName} Failed to fetch entries`); return []; } return response.json(); } catch (e) { - console.error(`${logName} Failed to fetch bookmarks`); + console.error(`${logName} Failed to fetch entries`); console.error(e); return []; } @@ -974,12 +974,12 @@ async function initMangaReading() { }); if (!response.ok) { - console.error(`${logName} Failed to delete bookmark`); + console.error(`${logName} Failed to delete entry`); return false; } return true; } catch (e) { - console.error(`${logName} Failed to delete bookmarks`); + console.error(`${logName} Failed to delete entries`); console.error(e); return false; } @@ -990,7 +990,8 @@ async function initMangaReading() { body: { name: string; href: string } ) { try { - console.log(`${logName} Creating or updating bookmark`, options.input, body); + console.log(`${logName} Creating or updating entry`, options.input, body); + const response = await nwsFetch(options.input, { method: 'PUT', body: JSON.stringify(body), @@ -998,7 +999,7 @@ async function initMangaReading() { }); if (!response.ok) { - console.error(`${logName} Failed to create or update bookmark`); + console.error(`${logName} Failed to create or update entry`); return { success: false, created: false }; } @@ -1012,7 +1013,7 @@ async function initMangaReading() { return { success: false, created: false }; } } catch (e) { - console.error(`${logName} Failed to create or update bookmarks`); + console.error(`${logName} Failed to create or update entries`); console.error(e); return { success: false, created: false }; } @@ -1030,12 +1031,12 @@ async function initMangaReading() { }); if (!response.ok) { - console.error(`${logName} Failed to check bookmark`); + console.error(`${logName} Failed to check entry`); return false; } return true; } catch (e) { - console.error(`${logName} Failed to check bookmark`); + console.error(`${logName} Failed to check entry`); console.error(e); return false; } @@ -1043,10 +1044,9 @@ async function initMangaReading() { function getProgressTrackerApi() { const baseUrl = globals.ptApi.url; - const input = `${baseUrl}/bookmarks`; + const input = `${baseUrl}/api/entries`; const bearerToken = globals.ptApi.bearerToken; const noBodyHeaders = new Headers({ - 'Content-Type': 'application/json', Authorization: `Bearer ${bearerToken}` }); const bodyHeaders = new Headers({ @@ -1153,25 +1153,25 @@ async function initMangaReading() { const title = globals.currentTitle; - const bookmarks = await query({ input, headers: noBodyHeaders }, title); + const entries = await query({ input, headers: noBodyHeaders }, title); - if (bookmarks.length === 0) return; + if (entries.length === 0) return; - if (bookmarks.length === 1) { + if (entries.length === 1) { if (!chapter) return; - const id = bookmarks[0].id; + const id = entries[0].id; await remove({ input, headers: bodyHeaders }, id); triggerNotification({ - title: 'Bookmark Removed', + title: 'Entry Removed', description: title }); } else { - const bookmark = bookmarks.find((b) => b.name === title); + const entry = entries.find((b) => b.name === title); - if (bookmark === undefined) { + if (entry === undefined) { triggerNotification({ - title: 'No bookmark found for title.', + title: 'No entry found for title.', description: title }); return; @@ -1179,10 +1179,10 @@ async function initMangaReading() { if (!chapter) return; - const id = bookmark.id; + const id = entry.id; await remove({ input, headers: bodyHeaders }, id); triggerNotification({ - title: 'Bookmark Removed', + title: 'Entry Removed', description: title }); } @@ -1216,7 +1216,7 @@ async function initMangaReading() { if (!result.success) return; triggerNotification({ - title: `Bookmark ${result.created ? 'created' : 'updated'}`, + title: `Entry ${result.created ? 'created' : 'updated'}`, description: title }); } diff --git a/tsconfig.json b/tsconfig.json index 9c62f74..b049027 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,25 +1,25 @@ { "compilerOptions": { // Environment setup & latest features - "lib": ["ESNext"], + "lib": [ + "ESNext", + "DOM" + ], "target": "ESNext", "module": "ESNext", "moduleDetection": "force", "jsx": "react-jsx", "allowJs": true, - // Bundler mode "moduleResolution": "bundler", "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, "noEmit": true, - // Best practices "strict": true, "skipLibCheck": true, "noFallthroughCasesInSwitch": true, "noUncheckedIndexedAccess": true, - // Some stricter flags (disabled by default) "noUnusedLocals": false, "noUnusedParameters": false,