From 52d156847cebd29efa7178cd009e57e6ece5f3a3 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Fri, 22 Dec 2023 03:36:37 -0800 Subject: feat(wrapped): commit activities to database --- src/lib/AniList/activity.ts | 26 +++++++++++++++++++++++--- src/lib/Database/activities.ts | 22 ++++++++++++++++++++++ src/lib/Tools/Wrapped.svelte | 2 +- 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 src/lib/Database/activities.ts diff --git a/src/lib/AniList/activity.ts b/src/lib/AniList/activity.ts index 0735b291..37548edd 100644 --- a/src/lib/AniList/activity.ts +++ b/src/lib/AniList/activity.ts @@ -1,3 +1,4 @@ +import { database } from '$lib/Database/activities'; import type { AniListAuthorisation, UserIdentity } from './identity'; export interface ActivityHistoryEntry { @@ -91,7 +92,7 @@ export const lastActivityDate = async (userIdentity: UserIdentity): Promise => { const activities: any[] = []; let page = 1; - let currentPage = await activitiesPage(page, anilistAuthorisation, userIdentity); + let currentDatabasePage = await database.activities.get(page); + let currentPage; + + if (currentDatabasePage) currentPage = currentDatabasePage.data; + else { + currentPage = await activitiesPage(page, anilistAuthorisation, userIdentity); + database.activities.add({ + page, + data: currentPage + }); + } for (const activity of currentPage.data.Page.activities) activities.push(activity); @@ -150,7 +161,16 @@ export const fullActivityHistory = async ( for (const activity of currentPage.data.Page.activities) activities.push(activity); page += 1; - currentPage = await activitiesPage(page, anilistAuthorisation, userIdentity); + currentDatabasePage = await database.activities.get(page); + + if (currentDatabasePage) currentPage = currentDatabasePage.data; + else { + currentPage = await activitiesPage(page, anilistAuthorisation, userIdentity); + database.activities.add({ + page, + data: currentPage + }); + } } let fullLocalActivityHistory: ActivityHistoryEntry[] = []; diff --git a/src/lib/Database/activities.ts b/src/lib/Database/activities.ts new file mode 100644 index 00000000..f3d4a8a4 --- /dev/null +++ b/src/lib/Database/activities.ts @@ -0,0 +1,22 @@ +import type { ActivitiesPage } from '$lib/AniList/activity'; +import Dexie, { type Table } from 'dexie'; + +export interface ActivityPage { + page: number; + data: ActivitiesPage; +} + +export class ActivityDatabase extends Dexie { + activities: Table; + + constructor() { + super('activities'); + this.version(1).stores({ + activities: 'page, data' + }); + + this.activities = this.table('activities'); + } +} + +export const database = new ActivityDatabase(); diff --git a/src/lib/Tools/Wrapped.svelte b/src/lib/Tools/Wrapped.svelte index ab1ac125..49a86e63 100644 --- a/src/lib/Tools/Wrapped.svelte +++ b/src/lib/Tools/Wrapped.svelte @@ -552,7 +552,7 @@ {/await} {:catch} {/await} -- cgit v1.2.3