From c7da36d89c1d3a81aaa7e1095ee9a8a064a570b5 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sat, 12 Oct 2024 20:12:26 -0700 Subject: feat(tools): add simple tracker --- bun.lockb | Bin 367541 -> 367870 bytes package.json | 1 + src/lib/Database/IDB/tracker.ts | 23 ++++++ src/lib/Tools/Picker.svelte | 2 +- src/lib/Tools/Tracker/Tool.svelte | 142 +++++++++++++++++++++++++++++++++++ src/lib/Tools/tools.ts | 7 ++ src/routes/tools/+page.svelte | 2 +- src/routes/tools/[tool]/+page.svelte | 3 + 8 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 src/lib/Database/IDB/tracker.ts create mode 100644 src/lib/Tools/Tracker/Tool.svelte diff --git a/bun.lockb b/bun.lockb index 8ff1fb56..30d1b9d4 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 211422dc..6b3e1f53 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ "svelte-i18n": "^4.0.0", "svelte-markdown": "^0.4.1", "svelte-notifications": "^0.9.98", + "uuid": "^10.0.0", "wanakana": "^5.3.1", "web-push": "^3.6.7" } diff --git a/src/lib/Database/IDB/tracker.ts b/src/lib/Database/IDB/tracker.ts new file mode 100644 index 00000000..dc25c8fd --- /dev/null +++ b/src/lib/Database/IDB/tracker.ts @@ -0,0 +1,23 @@ +import Dexie, { type Table } from 'dexie'; + +export interface TrackerEntry { + id: string; + url: string; + title: string; + progress: number; +} + +export class TrackerDatabase extends Dexie { + entries: Table; + + constructor() { + super('tracker'); + this.version(1).stores({ + entries: 'id, url, title, progress', + }); + + this.entries = this.table('entries'); + } +} + +export const database = new TrackerDatabase(); diff --git a/src/lib/Tools/Picker.svelte b/src/lib/Tools/Picker.svelte index 583a7a0d..3f20300f 100644 --- a/src/lib/Tools/Picker.svelte +++ b/src/lib/Tools/Picker.svelte @@ -16,7 +16,7 @@ > - {#each Object.keys(tools).filter((t) => t !== 'default') as t} + {#each Object.keys(tools).filter((t) => t !== 'default' && !tools[t].hidden) as t} {/each} diff --git a/src/lib/Tools/Tracker/Tool.svelte b/src/lib/Tools/Tracker/Tool.svelte new file mode 100644 index 00000000..8906e72d --- /dev/null +++ b/src/lib/Tools/Tracker/Tool.svelte @@ -0,0 +1,142 @@ + + +
+ {#if error} +

Error: {error}

+ {/if} + + + + + + +

+ + {#if masterList === null} + + {:else} +

    + {#each listAccess.sort((a, b) => a.title.localeCompare(b.title)) as entry} +
  • +
    + + {entry.title} + + + | + + + adjustEntry(entry.id, e.target ? e.target.value || entry.progress : entry.progress)} + /> + + + | + + + | + + +
    +
  • + {/each} +
+ {/if} +
+ + diff --git a/src/lib/Tools/tools.ts b/src/lib/Tools/tools.ts index b85ff7f6..06249ab3 100644 --- a/src/lib/Tools/tools.ts +++ b/src/lib/Tools/tools.ts @@ -7,6 +7,7 @@ export const tools: { short?: string; description?: () => string; id: string; + hidden?: boolean; }; } = { default: { @@ -35,6 +36,12 @@ export const tools: { "Find media with prequels you haven't seen yet for any given simulcast season", id: 'sequel_spy' }, + tracker: { + name: () => 'Tracker', + description: () => 'Track your anime and manga progress with ease, intended for media that doesn\'t qualify for an AniList entry', + id: 'tracker', + hidden: true + }, uma_musume_birthdays: { name: () => { return 'Uma Musume: Pretty Derby Character Birthdays'; diff --git a/src/routes/tools/+page.svelte b/src/routes/tools/+page.svelte index 97e27e0e..d1650b34 100644 --- a/src/routes/tools/+page.svelte +++ b/src/routes/tools/+page.svelte @@ -13,7 +13,7 @@