From 5d21adcbb1f3dc095cde5fe44e35a950fa543207 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Sun, 6 Oct 2024 02:48:46 -0300 Subject: [PATCH] wip: get alternate objectIds --- .../achievements/achievement-watcher.ts | 29 ++++--- .../achievements/find-achivement-files.ts | 16 ++-- .../update-local-unlocked-achivements.ts | 86 ++++++++++--------- 3 files changed, 66 insertions(+), 65 deletions(-) diff --git a/src/main/services/achievements/achievement-watcher.ts b/src/main/services/achievements/achievement-watcher.ts index eecb71d5..15496a0e 100644 --- a/src/main/services/achievements/achievement-watcher.ts +++ b/src/main/services/achievements/achievement-watcher.ts @@ -6,6 +6,7 @@ import fs, { readdirSync } from "node:fs"; import { findAchievementFileInExecutableDirectory, findAllAchievementFiles, + getAlternativeObjectIds, } from "./find-achivement-files"; import type { AchievementFile } from "@types"; import { achievementsLogger, logger } from "../logger"; @@ -23,25 +24,27 @@ export const watchAchievements = async () => { if (games.length === 0) return; - const achievementFiles = await findAllAchievementFiles(); + const achievementFiles = findAllAchievementFiles(); for (const game of games) { - const gameAchievementFiles = achievementFiles.get(game.objectID) || []; - const achievementFileInsideDirectory = - findAchievementFileInExecutableDirectory(game); + for (const objectId of getAlternativeObjectIds(game.objectID)) { + const gameAchievementFiles = achievementFiles.get(objectId) || []; + const achievementFileInsideDirectory = + findAchievementFileInExecutableDirectory(game); - gameAchievementFiles.push(...achievementFileInsideDirectory); + gameAchievementFiles.push(...achievementFileInsideDirectory); - if (!gameAchievementFiles.length) continue; + if (!gameAchievementFiles.length) continue; - console.log( - "Achievements files to observe for:", - game.title, - gameAchievementFiles - ); + console.log( + "Achievements files to observe for:", + game.title, + gameAchievementFiles + ); - for (const file of gameAchievementFiles) { - compareFile(game, file); + for (const file of gameAchievementFiles) { + compareFile(game, file); + } } } }; diff --git a/src/main/services/achievements/find-achivement-files.ts b/src/main/services/achievements/find-achivement-files.ts index c7aa4950..d13ffb63 100644 --- a/src/main/services/achievements/find-achivement-files.ts +++ b/src/main/services/achievements/find-achivement-files.ts @@ -27,7 +27,7 @@ const crackers = [ Cracker.flt, ]; -const getPathFromCracker = async (cracker: Cracker) => { +const getPathFromCracker = (cracker: Cracker) => { if (cracker === Cracker.codex) { return [ { @@ -167,7 +167,7 @@ const getPathFromCracker = async (cracker: Cracker) => { throw new Error(`Cracker ${cracker} not implemented`); }; -const getAlternativeObjectIds = (objectId: string) => { +export const getAlternativeObjectIds = (objectId: string) => { if (objectId === "205100") { return ["205100", "217980", "31292"]; } @@ -175,13 +175,11 @@ const getAlternativeObjectIds = (objectId: string) => { return [objectId]; }; -export const findAchievementFiles = async (game: Game) => { +export const findAchievementFiles = (game: Game) => { const achievementFiles: AchievementFile[] = []; for (const cracker of crackers) { - for (const { folderPath, fileLocation } of await getPathFromCracker( - cracker - )) { + for (const { folderPath, fileLocation } of getPathFromCracker(cracker)) { for (const objectId of getAlternativeObjectIds(game.objectID)) { const filePath = path.join(folderPath, objectId, ...fileLocation); @@ -229,13 +227,11 @@ export const findAchievementFileInExecutableDirectory = ( ]; }; -export const findAllAchievementFiles = async () => { +export const findAllAchievementFiles = () => { const gameAchievementFiles = new Map(); for (const cracker of crackers) { - for (const { folderPath, fileLocation } of await getPathFromCracker( - cracker - )) { + for (const { folderPath, fileLocation } of getPathFromCracker(cracker)) { if (!fs.existsSync(folderPath)) { continue; } diff --git a/src/main/services/achievements/update-local-unlocked-achivements.ts b/src/main/services/achievements/update-local-unlocked-achivements.ts index 963ce602..a58cd69f 100644 --- a/src/main/services/achievements/update-local-unlocked-achivements.ts +++ b/src/main/services/achievements/update-local-unlocked-achivements.ts @@ -3,6 +3,7 @@ import { findAllAchievementFiles, findAchievementFiles, findAchievementFileInExecutableDirectory, + getAlternativeObjectIds, } from "./find-achivement-files"; import { parseAchievementFile } from "./parse-achievement-file"; import { mergeAchievements } from "./merge-achievements"; @@ -11,7 +12,7 @@ import { getGameAchievementData } from "./get-game-achievement-data"; import { achievementsLogger } from "../logger"; export const updateAllLocalUnlockedAchievements = async () => { - const gameAchievementFilesMap = await findAllAchievementFiles(); + const gameAchievementFilesMap = findAllAchievementFiles(); const games = await gameRepository.find({ where: { @@ -20,53 +21,54 @@ export const updateAllLocalUnlockedAchievements = async () => { }); for (const game of games) { - const gameAchievementFiles = - gameAchievementFilesMap.get(game.objectID) || []; - const achievementFileInsideDirectory = - findAchievementFileInExecutableDirectory(game); + for (const objectId of getAlternativeObjectIds(game.objectID)) { + const gameAchievementFiles = gameAchievementFilesMap.get(objectId) || []; + const achievementFileInsideDirectory = + findAchievementFileInExecutableDirectory(game); - gameAchievementFiles.push(...achievementFileInsideDirectory); + gameAchievementFiles.push(...achievementFileInsideDirectory); - const localAchievements = await gameAchievementRepository.findOne({ - where: { objectId: game.objectID, shop: "steam" }, - }); + const localAchievements = await gameAchievementRepository.findOne({ + where: { objectId: game.objectID, shop: "steam" }, + }); - if (!localAchievements || !localAchievements.achievements) { - await getGameAchievementData(game.objectID, "steam") - .then((achievements) => { - return gameAchievementRepository.upsert( - { - objectId: game.objectID, - shop: "steam", - achievements: JSON.stringify(achievements), - }, - ["objectId", "shop"] - ); - }) - .catch(() => {}); - } - - const unlockedAchievements: UnlockedAchievement[] = []; - - for (const achievementFile of gameAchievementFiles) { - const parsedAchievements = await parseAchievementFile( - achievementFile.filePath, - achievementFile.type - ); - - if (parsedAchievements.length) { - unlockedAchievements.push(...parsedAchievements); + if (!localAchievements || !localAchievements.achievements) { + await getGameAchievementData(game.objectID, "steam") + .then((achievements) => { + return gameAchievementRepository.upsert( + { + objectId: game.objectID, + shop: "steam", + achievements: JSON.stringify(achievements), + }, + ["objectId", "shop"] + ); + }) + .catch(() => {}); } - achievementsLogger.log( - "Achievement file for", - game.title, - achievementFile.filePath, - parsedAchievements - ); - } + const unlockedAchievements: UnlockedAchievement[] = []; - mergeAchievements(game.objectID, "steam", unlockedAchievements, false); + for (const achievementFile of gameAchievementFiles) { + const parsedAchievements = await parseAchievementFile( + achievementFile.filePath, + achievementFile.type + ); + + if (parsedAchievements.length) { + unlockedAchievements.push(...parsedAchievements); + } + + achievementsLogger.log( + "Achievement file for", + game.title, + achievementFile.filePath, + parsedAchievements + ); + } + + mergeAchievements(game.objectID, "steam", unlockedAchievements, false); + } } };