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/lib | |
| 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/lib')
| -rw-r--r-- | src/lib/AniList/activity.ts | 56 |
1 files changed, 47 insertions, 9 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 { |