diff options
| author | Fuwn <[email protected]> | 2023-09-12 17:33:07 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-09-12 17:33:07 -0700 |
| commit | b07825d0ff57acafaa614bc74c04909207892540 (patch) | |
| tree | b9cbec2bf12ed7c92f25162fea8f3b8d7a8b1b6d | |
| parent | feat: activity history risk (diff) | |
| download | due.moe-b07825d0ff57acafaa614bc74c04909207892540.tar.xz due.moe-b07825d0ff57acafaa614bc74c04909207892540.zip | |
feat: manga-updates
| -rwxr-xr-x | bun.lockb | bin | 83144 -> 96976 bytes | |||
| -rw-r--r-- | package.json | 67 | ||||
| -rw-r--r-- | src/routes/+layout.svelte | 5 | ||||
| -rw-r--r-- | src/routes/api/manga-updates/+server.ts | 3 | ||||
| -rw-r--r-- | src/routes/manga-updates/+page.svelte | 55 |
5 files changed, 96 insertions, 34 deletions
| Binary files differ diff --git a/package.json b/package.json index 00621884..12d57159 100644 --- a/package.json +++ b/package.json @@ -1,35 +1,36 @@ { - "name": "due.moe", - "version": "0.0.0", - "private": true, - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --plugin-search-dir . --check . && eslint .", - "format": "prettier --plugin-search-dir . --write ." - }, - "devDependencies": { - "@sveltejs/adapter-auto": "^2.0.0", - "@sveltejs/kit": "^1.20.4", - "@typescript-eslint/eslint-plugin": "^5.45.0", - "@typescript-eslint/parser": "^5.45.0", - "eslint": "^8.28.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-svelte": "^2.30.0", - "prettier": "^2.8.0", - "prettier-plugin-svelte": "^2.10.1", - "svelte": "^4.0.5", - "svelte-adapter-bun": "^0.5.0", - "svelte-check": "^3.4.3", - "tslib": "^2.4.1", - "typescript": "^5.0.0", - "vite": "^4.4.2" - }, - "type": "module", - "dependencies": { - "dexie": "^4.0.1-alpha.25" - } + "name": "due.moe", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --plugin-search-dir . --check . && eslint .", + "format": "prettier --plugin-search-dir . --write ." + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/kit": "^1.20.4", + "@typescript-eslint/eslint-plugin": "^5.45.0", + "@typescript-eslint/parser": "^5.45.0", + "eslint": "^8.28.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-svelte": "^2.30.0", + "prettier": "^2.8.0", + "prettier-plugin-svelte": "^2.10.1", + "svelte": "^4.0.5", + "svelte-adapter-bun": "^0.5.0", + "svelte-check": "^3.4.3", + "tslib": "^2.4.1", + "typescript": "^5.0.0", + "vite": "^4.4.2" + }, + "type": "module", + "dependencies": { + "dexie": "^4.0.1-alpha.25", + "rss-parser": "^3.13.0" + } } diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 7812147d..37625ba5 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -80,7 +80,10 @@ <p /> -<p>「 <a href="/">Home</a> • <a href="/settings">Settings</a> 」</p> +<p> + 「 <a href="/">Home</a> • <a href="/manga-updates">Manga Updates</a> • + <a href="/settings">Settings</a> 」 +</p> <hr /> diff --git a/src/routes/api/manga-updates/+server.ts b/src/routes/api/manga-updates/+server.ts new file mode 100644 index 00000000..28b71f7b --- /dev/null +++ b/src/routes/api/manga-updates/+server.ts @@ -0,0 +1,3 @@ +export const GET = async () => { + return new Response((await fetch('https://www.mangaupdates.com/rss.php')).body); +}; diff --git a/src/routes/manga-updates/+page.svelte b/src/routes/manga-updates/+page.svelte new file mode 100644 index 00000000..a9e9fe1b --- /dev/null +++ b/src/routes/manga-updates/+page.svelte @@ -0,0 +1,55 @@ +<script lang="ts"> + import { onMount } from 'svelte'; + import RSSParser from 'rss-parser/dist/rss-parser.js'; + + let feed: { items: any } | null | undefined = undefined; + + onMount(async () => { + let parser = new RSSParser(); + + parser.parseURL('/api/manga-updates', (e: any, f: any) => { + if (e) { + feed = null; + + throw e; + } + + feed = f; + }); + }); + + const reformat = (title: string) => { + return title + .replace(/\[.*?\]\s/, '') + .replace(/c\.(\d+-\d+)/, 'Ch. $1') + .replace(/v\.(\d+)\s/, 'Vol. $1 ') + .replace(/c\.(\d+)/, 'Ch. $1'); + }; + + function reformatChapters(title: string): string { + return title + .replace(/(Vol\. \d+ )?Ch\. \d+(\-\d+(\.\d+)?)?$/, '') + .replace(/\? ~.*$/, '') + .trim(); + } +</script> + +<ul> + {#if feed === null} + <li>Failed to load feed</li> + {:else if feed !== undefined} + {#each feed.items as item} + <li> + <a + href={`https://anilist.co/search/manga?search=${reformatChapters( + reformat(item.title) + )}&sort=SEARCH_MATCH`} + > + {reformat(item.title)} + </a> + </li> + {/each} + {:else} + <li>Loading ...</li> + {/if} +</ul> |