aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-09-12 17:33:07 -0700
committerFuwn <[email protected]>2023-09-12 17:33:07 -0700
commitb07825d0ff57acafaa614bc74c04909207892540 (patch)
treeb9cbec2bf12ed7c92f25162fea8f3b8d7a8b1b6d
parentfeat: activity history risk (diff)
downloaddue.moe-b07825d0ff57acafaa614bc74c04909207892540.tar.xz
due.moe-b07825d0ff57acafaa614bc74c04909207892540.zip
feat: manga-updates
-rwxr-xr-xbun.lockbbin83144 -> 96976 bytes
-rw-r--r--package.json67
-rw-r--r--src/routes/+layout.svelte5
-rw-r--r--src/routes/api/manga-updates/+server.ts3
-rw-r--r--src/routes/manga-updates/+page.svelte55
5 files changed, 96 insertions, 34 deletions
diff --git a/bun.lockb b/bun.lockb
index 9574ad77..df7c6752 100755
--- a/bun.lockb
+++ b/bun.lockb
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>