From d0f42e73ffdfe9dd5ca6364589d75080204d62f1 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Mon, 21 Oct 2024 05:07:49 -0300 Subject: [PATCH] feat: get achievement data on demand --- .../events/user/get-unlocked-achievements.ts | 15 ++++++++---- .../achievement-watcher-manager.ts | 23 +------------------ .../achievements/get-game-achievement-data.ts | 13 ++++++++++- .../achievements/merge-achievements.ts | 2 +- 4 files changed, 24 insertions(+), 29 deletions(-) diff --git a/src/main/events/user/get-unlocked-achievements.ts b/src/main/events/user/get-unlocked-achievements.ts index b6f3e0b7..a831bc50 100644 --- a/src/main/events/user/get-unlocked-achievements.ts +++ b/src/main/events/user/get-unlocked-achievements.ts @@ -5,13 +5,18 @@ import { getGameAchievementData } from "@main/services/achievements/get-game-ach export const getUnlockedAchievements = async ( objectId: string, - shop: GameShop + shop: GameShop, + useCachedData: boolean ): Promise => { const cachedAchievements = await gameAchievementRepository.findOne({ where: { objectId, shop }, }); - const achievementsData = await getGameAchievementData(objectId, shop); + const achievementsData = await getGameAchievementData( + objectId, + shop, + useCachedData + ); const unlockedAchievements = JSON.parse( cachedAchievements?.unlockedAchievements || "[]" @@ -57,12 +62,12 @@ export const getUnlockedAchievements = async ( }); }; -const getGameAchievementsEvent = async ( +const getUnlockedAchievementsEvent = async ( _event: Electron.IpcMainInvokeEvent, objectId: string, shop: GameShop ): Promise => { - return getUnlockedAchievements(objectId, shop); + return getUnlockedAchievements(objectId, shop, false); }; -registerEvent("getUnlockedAchievements", getGameAchievementsEvent); +registerEvent("getUnlockedAchievements", getUnlockedAchievementsEvent); diff --git a/src/main/services/achievements/achievement-watcher-manager.ts b/src/main/services/achievements/achievement-watcher-manager.ts index 5f915c52..ea06dfd9 100644 --- a/src/main/services/achievements/achievement-watcher-manager.ts +++ b/src/main/services/achievements/achievement-watcher-manager.ts @@ -1,4 +1,4 @@ -import { gameAchievementRepository, gameRepository } from "@main/repository"; +import { gameRepository } from "@main/repository"; import { parseAchievementFile } from "./parse-achievement-file"; import { Game } from "@main/entity"; import { mergeAchievements } from "./merge-achievements"; @@ -13,7 +13,6 @@ import type { AchievementFile, UnlockedAchievement } from "@types"; import { achievementsLogger } from "../logger"; import { Cracker } from "@shared"; import { IsNull, Not } from "typeorm"; -import { getGameAchievementData } from "./get-game-achievement-data"; const fileStats: Map = new Map(); const fltFiles: Map> = new Map(); @@ -196,16 +195,6 @@ export class AchievementWatcherManager { return Promise.all( games.map((game) => { - gameAchievementRepository - .findOne({ - where: { objectId: game.objectID, shop: game.shop }, - }) - .then((localAchievements) => { - if (!localAchievements || !localAchievements.achievements) { - getGameAchievementData(game.objectID, game.shop); - } - }); - const gameAchievementFiles: AchievementFile[] = []; for (const objectId of getAlternativeObjectIds(game.objectID)) { @@ -233,16 +222,6 @@ export class AchievementWatcherManager { return Promise.all( games.map((game) => { - gameAchievementRepository - .findOne({ - where: { objectId: game.objectID, shop: game.shop }, - }) - .then((localAchievements) => { - if (!localAchievements || !localAchievements.achievements) { - getGameAchievementData(game.objectID, game.shop); - } - }); - const gameAchievementFiles = findAchievementFiles(game); const achievementFileInsideDirectory = findAchievementFileInExecutableDirectory(game); diff --git a/src/main/services/achievements/get-game-achievement-data.ts b/src/main/services/achievements/get-game-achievement-data.ts index b08914e8..02019dab 100644 --- a/src/main/services/achievements/get-game-achievement-data.ts +++ b/src/main/services/achievements/get-game-achievement-data.ts @@ -9,8 +9,19 @@ import { logger } from "../logger"; export const getGameAchievementData = async ( objectId: string, - shop: GameShop + shop: GameShop, + useCachedData: boolean ) => { + if (useCachedData) { + const cachedAchievements = await gameAchievementRepository.findOne({ + where: { objectId, shop }, + }); + + if (cachedAchievements && cachedAchievements.achievements) { + return JSON.parse(cachedAchievements.achievements) as AchievementData[]; + } + } + const userPreferences = await userPreferencesRepository.findOne({ where: { id: 1 }, }); diff --git a/src/main/services/achievements/merge-achievements.ts b/src/main/services/achievements/merge-achievements.ts index b7aabf9c..8dce5aa8 100644 --- a/src/main/services/achievements/merge-achievements.ts +++ b/src/main/services/achievements/merge-achievements.ts @@ -26,7 +26,7 @@ const saveAchievementsOnLocal = async ( .then(() => { if (!sendUpdateEvent) return; - return getUnlockedAchievements(objectId, shop) + return getUnlockedAchievements(objectId, shop, true) .then((achievements) => { WindowManager.mainWindow?.webContents.send( `on-update-achievements-${objectId}-${shop}`,