mirror of
https://github.com/hydralauncher/hydra.git
synced 2026-01-11 05:46:17 +00:00
fix: game achievement cache
This commit is contained in:
@@ -5,15 +5,18 @@ import { logger } from "../logger";
|
||||
import { db, gameAchievementsSublevel, levelKeys } from "@main/level";
|
||||
import { AxiosError } from "axios";
|
||||
|
||||
const LOCAL_CACHE_EXPIRATION = 1000 * 60 * 60; // 1 hour
|
||||
|
||||
const getModifiedSinceHeader = (
|
||||
cachedAchievements: GameAchievement | undefined
|
||||
cachedAchievements: GameAchievement | undefined,
|
||||
userLanguage: string
|
||||
): Date | undefined => {
|
||||
if (!cachedAchievements) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (userLanguage != cachedAchievements.language) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return cachedAchievements.updatedAt
|
||||
? new Date(cachedAchievements.updatedAt)
|
||||
: undefined;
|
||||
@@ -28,13 +31,7 @@ export const getGameAchievementData = async (
|
||||
|
||||
const cachedAchievements = await gameAchievementsSublevel.get(gameKey);
|
||||
|
||||
if (cachedAchievements?.achievements && useCachedData)
|
||||
return cachedAchievements.achievements;
|
||||
|
||||
if (
|
||||
cachedAchievements?.achievements &&
|
||||
Date.now() < (cachedAchievements.updatedAt ?? 0) + LOCAL_CACHE_EXPIRATION
|
||||
) {
|
||||
if (cachedAchievements?.achievements && useCachedData) {
|
||||
return cachedAchievements.achievements;
|
||||
}
|
||||
|
||||
@@ -50,14 +47,15 @@ export const getGameAchievementData = async (
|
||||
language,
|
||||
},
|
||||
{
|
||||
ifModifiedSince: getModifiedSinceHeader(cachedAchievements),
|
||||
ifModifiedSince: getModifiedSinceHeader(cachedAchievements, language),
|
||||
}
|
||||
)
|
||||
.then(async (achievements) => {
|
||||
await gameAchievementsSublevel.put(gameKey, {
|
||||
unlockedAchievements: cachedAchievements?.unlockedAchievements ?? [],
|
||||
achievements,
|
||||
updatedAt: Date.now() + LOCAL_CACHE_EXPIRATION,
|
||||
updatedAt: Date.now(),
|
||||
language,
|
||||
});
|
||||
|
||||
return achievements;
|
||||
|
||||
@@ -37,6 +37,7 @@ const saveAchievementsOnLocal = async (
|
||||
achievements: gameAchievement?.achievements ?? [],
|
||||
unlockedAchievements: unlockedAchievements,
|
||||
updatedAt: gameAchievement?.updatedAt,
|
||||
language: gameAchievement?.language,
|
||||
});
|
||||
|
||||
if (!sendUpdateEvent) return;
|
||||
|
||||
@@ -83,6 +83,7 @@ export interface GameAchievement {
|
||||
achievements: SteamAchievement[];
|
||||
unlockedAchievements: UnlockedAchievement[];
|
||||
updatedAt: number | undefined;
|
||||
language: string | undefined;
|
||||
}
|
||||
|
||||
export type AchievementCustomNotificationPosition =
|
||||
|
||||
Reference in New Issue
Block a user