aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-01-02 02:11:19 -0800
committerFuwn <[email protected]>2024-01-02 02:11:19 -0800
commit3f97647ff52c816012e250f65cbdfe6177ab922c (patch)
tree3ed846e8604f209f05e53cae15a45d098d85bb00 /src/lib
parentfeat(badges): time info for datetime input (diff)
downloaddue.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.ts56
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 {