diff options
| author | Fuwn <[email protected]> | 2024-01-02 02:11:19 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-01-02 02:11:19 -0800 |
| commit | 3f97647ff52c816012e250f65cbdfe6177ab922c (patch) | |
| tree | 3ed846e8604f209f05e53cae15a45d098d85bb00 /src | |
| parent | feat(badges): time info for datetime input (diff) | |
| download | due.moe-3f97647ff52c816012e250f65cbdfe6177ab922c.tar.xz due.moe-3f97647ff52c816012e250f65cbdfe6177ab922c.zip | |
fix(activity): use anilist offset
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/AniList/activity.ts | 56 | ||||
| -rw-r--r-- | src/routes/+page.svelte | 3 | ||||
| -rw-r--r-- | src/routes/completed/+page.svelte | 3 |
3 files changed, 51 insertions, 11 deletions
diff --git a/src/lib/AniList/activity.ts b/src/lib/AniList/activity.ts index 01c1010b..926e8fe6 100644 --- a/src/lib/AniList/activity.ts +++ b/src/lib/AniList/activity.ts @@ -6,6 +6,20 @@ export interface ActivityHistoryEntry { amount: number; } +interface ActivityHistoryOptions { + stats: { + activityHistory: ActivityHistoryEntry[]; + }; + options: { + timezone: string; + }; +} + +interface LastActivity { + date: Date; + timezone: string; +} + export const fillMissingDays = ( inputActivities: ActivityHistoryEntry[], startOfYear = false, @@ -63,36 +77,60 @@ const fillDateRange = ( return outputActivities; }; -export const activityHistory = async ( - userIdentity: UserIdentity -): Promise<ActivityHistoryEntry[]> => { +export const activityHistoryOptions = async ( + userIdentity: UserIdentity, + authorisation?: AniListAuthorisation +): Promise<ActivityHistoryOptions> => { return ( await ( await fetch('https://graphql.anilist.co', { method: 'POST', headers: { 'Content-Type': 'application/json', - Accept: 'application/json' + Accept: 'application/json', + ...(authorisation + ? { Authorization: `${authorisation.tokenType} ${authorisation.accessToken}` } + : {}) }, body: JSON.stringify({ query: `{ User(id: ${userIdentity.id}) { stats { activityHistory { date amount } } + ${authorisation ? 'options { timezone }' : ''} } }` }) }) ).json() - )['data']['User']['stats']['activityHistory']; + )['data']['User']; }; -export const lastActivityDate = async (userIdentity: UserIdentity): Promise<Date> => { - const history = await activityHistory(userIdentity); +const convertToTimezoneOffset = (timeStr: string) => { + const [hours, minutes] = timeStr.split(':'); + let totalMinutes = parseInt(hours, 10) * 60 + parseInt(minutes, 10); + + totalMinutes = -totalMinutes; + + return totalMinutes; +}; + +export const activityHistory = async ( + userIdentity: UserIdentity, + authorisation?: AniListAuthorisation +): Promise<ActivityHistoryEntry[]> => + (await activityHistoryOptions(userIdentity, authorisation)).stats.activityHistory; + +export const lastActivityDate = async ( + userIdentity: UserIdentity, + authorisation: AniListAuthorisation +): Promise<LastActivity> => { + const history = await activityHistoryOptions(userIdentity, authorisation); const date = new Date( - Number(history[history.length - 1]['date']) * 1000 + new Date().getTimezoneOffset() + Number(history.stats.activityHistory[history.stats.activityHistory.length - 1].date) * 1000 + + convertToTimezoneOffset(history.options.timezone) ); date.setDate(date.getDate() + 1); - return date; + return { date, timezone: history.options.timezone }; }; export interface ActivitiesPage { diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 57914bb1..ec553c66 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -32,7 +32,8 @@ currentUserIdentity = JSON.parse($userIdentity); currentUserIdentity.name = currentUserIdentity.name; lastActivityWasToday = - (await lastActivityDate(currentUserIdentity)).toDateString() >= new Date().toDateString(); + (await lastActivityDate(currentUserIdentity, data.user)).date.toDateString() >= + new Date().toDateString(); if (!lastActivityWasToday) { if ($settings.displayLimitListHeight) { diff --git a/src/routes/completed/+page.svelte b/src/routes/completed/+page.svelte index 2ca07d90..ba9243bf 100644 --- a/src/routes/completed/+page.svelte +++ b/src/routes/completed/+page.svelte @@ -31,7 +31,8 @@ currentUserIdentity = JSON.parse($userIdentity); currentUserIdentity.name = currentUserIdentity.name; lastActivityWasToday = - (await lastActivityDate(currentUserIdentity)).toDateString() >= new Date().toDateString(); + (await lastActivityDate(currentUserIdentity, data.user)).date.toDateString() >= + new Date().toDateString(); if (!lastActivityWasToday) { if ($settings.displayLimitListHeight) { |