From 4b454dabd0ede98dcb75cc80cf88c0a06d678923 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 31 Dec 2023 21:09:47 -0800 Subject: feat(wrapped): select year --- src/lib/AniList/activity.ts | 3 ++- src/lib/AniList/wrapped.ts | 23 ++++++++++++++++++----- src/lib/Error/RateLimited.svelte | 12 ++++++++---- src/lib/Tools/Wrapped.svelte | 33 +++++++++++++++++++++++---------- 4 files changed, 51 insertions(+), 20 deletions(-) (limited to 'src/lib') diff --git a/src/lib/AniList/activity.ts b/src/lib/AniList/activity.ts index e1547084..6c8deca7 100644 --- a/src/lib/AniList/activity.ts +++ b/src/lib/AniList/activity.ts @@ -195,7 +195,8 @@ export const fullActivityHistory = async ( fullLocalActivityHistory = fullLocalActivityHistory.filter((a) => !isNaN(a.date)); - fullLocalActivityHistory.push(...(await activityHistory(userIdentity))); + if (new Date().getMonth() > 6) + fullLocalActivityHistory.push(...(await activityHistory(userIdentity))); fullLocalActivityHistory = fullLocalActivityHistory.filter( (activityHistoryEntry, index, self) => diff --git a/src/lib/AniList/wrapped.ts b/src/lib/AniList/wrapped.ts index 4bee8bbb..00ae0acc 100644 --- a/src/lib/AniList/wrapped.ts +++ b/src/lib/AniList/wrapped.ts @@ -45,7 +45,11 @@ export interface Wrapped { }; } -const profileActivities = async (user: AniListAuthorisation, identity: UserIdentity) => { +const profileActivities = async ( + user: AniListAuthorisation, + identity: UserIdentity, + now = Date.now() +) => { const get = async (page: number) => await ( await fetch('https://graphql.anilist.co', { @@ -79,6 +83,7 @@ const profileActivities = async (user: AniListAuthorisation, identity: UserIdent const pages = []; let page = 1; let response = await get(page); + const yearInSeconds = 31556952; pages.push(response['data']['Page']['activities']); @@ -94,21 +99,25 @@ const profileActivities = async (user: AniListAuthorisation, identity: UserIdent .flat() .filter( (activity) => - activity.type == 'TEXT' && activity.createdAt > Math.floor(Date.now() / 1000) - 31556952 + activity.type == 'TEXT' && + activity.createdAt > Math.floor(now / 1000) - yearInSeconds && + activity.createdAt < Math.floor(now / 1000) ).length, messageCount: pages .flat() .filter( (activity) => activity.type == 'MESSAGE' && - activity.createdAt > Math.floor(Date.now() / 1000) - 31556952 + activity.createdAt > Math.floor(now / 1000) - yearInSeconds && + activity.createdAt < Math.floor(now / 1000) ).length }; }; export const wrapped = async ( anilistAuthorisation: AniListAuthorisation, - identity: UserIdentity + identity: UserIdentity, + year = new Date().getFullYear() ): Promise => { const wrappedResponse = await ( await fetch('https://graphql.anilist.co', { @@ -139,7 +148,11 @@ export const wrapped = async ( }) }) ).json(); - const { statusCount, messageCount } = await profileActivities(anilistAuthorisation, identity); + const { statusCount, messageCount } = await profileActivities( + anilistAuthorisation, + identity, + new Date(year, 11, 31).getTime() + ); return { statistics: wrappedResponse['data']['User']['statistics'], diff --git a/src/lib/Error/RateLimited.svelte b/src/lib/Error/RateLimited.svelte index f00239dd..59de182d 100644 --- a/src/lib/Error/RateLimited.svelte +++ b/src/lib/Error/RateLimited.svelte @@ -1,6 +1,7 @@ diff --git a/src/lib/Tools/Wrapped.svelte b/src/lib/Tools/Wrapped.svelte index 312e5a01..87c97ba8 100644 --- a/src/lib/Tools/Wrapped.svelte +++ b/src/lib/Tools/Wrapped.svelte @@ -29,7 +29,7 @@ export let user: AniListAuthorisation; - const currentYear = new Date(Date.now()).getFullYear(); + let currentYear = new Date(Date.now()).getFullYear(); let currentUserIdentity = { name: '', id: -1 }; let episodes = 0; let chapters = 0; @@ -104,6 +104,7 @@ mediaSort = mediaSort; includeMovies = includeMovies; includeOVAs = includeOVAs; + currentYear = currentYear; update().then(updateWidth).catch(updateWidth); } @@ -481,10 +482,10 @@ {#if currentUserIdentity.id === -2} Please log in to view this page. {:else if currentUserIdentity.id !== -1} - {#await useFullActivityHistory ? fullActivityHistory(user, currentUserIdentity, currentYear) : getActivityHistory(currentUserIdentity)} + {#await currentYear !== new Date(Date.now()).getFullYear() || useFullActivityHistory ? fullActivityHistory(user, currentUserIdentity, currentYear) : getActivityHistory(currentUserIdentity)} {@html nbsp(`Loading${useFullActivityHistory ? ' full-year' : ''} activity history ...`)} {:then activities} - {#await wrapped(user, currentUserIdentity)} + {#await wrapped(user, currentUserIdentity, currentYear)} {@html nbsp('Loading user data ...')} {:then wrapped}
@@ -776,14 +777,18 @@ Calculation - Enable full-year activity
+ Enable full-year activity - If you have many activities, you may rate-limited and you may need multiple - attempts to fully populate your local activity history database.
If you get - rate-limited, wait one minute, then try again. Refresh data

-

+ + Calculate for year