From bb65d77fc6db10db57469b47d89439b9662c87e1 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Mon, 21 Oct 2024 01:07:46 -0300 Subject: [PATCH] feat: adjustments on achievements --- src/main/entity/game-achievements.entity.ts | 4 +- .../achievements/achievement-watcher.ts | 21 +++-- .../achievements/find-achivement-files.ts | 9 +- .../update-local-unlocked-achivements.ts | 88 ++++++++++--------- 4 files changed, 66 insertions(+), 56 deletions(-) diff --git a/src/main/entity/game-achievements.entity.ts b/src/main/entity/game-achievements.entity.ts index 29cca558..0cb15f6e 100644 --- a/src/main/entity/game-achievements.entity.ts +++ b/src/main/entity/game-achievements.entity.ts @@ -12,8 +12,8 @@ export class GameAchievement { shop: string; @Column("text", { nullable: true }) - unlockedAchievements: string; + unlockedAchievements: string | null; @Column("text", { nullable: true }) - achievements: string; + achievements: string | null; } diff --git a/src/main/services/achievements/achievement-watcher.ts b/src/main/services/achievements/achievement-watcher.ts index 4558e20d..0986f8be 100644 --- a/src/main/services/achievements/achievement-watcher.ts +++ b/src/main/services/achievements/achievement-watcher.ts @@ -25,21 +25,24 @@ const watchAchievementsWindows = async () => { }); if (games.length === 0) return; + const achievementFiles = findAllAchievementFiles(); for (const game of games) { + const gameAchievementFiles: AchievementFile[] = []; + for (const objectId of getAlternativeObjectIds(game.objectID)) { - const gameAchievementFiles = achievementFiles.get(objectId) || []; - const achievementFileInsideDirectory = - findAchievementFileInExecutableDirectory(game); + gameAchievementFiles.push(...(achievementFiles.get(objectId) || [])); - gameAchievementFiles.push(...achievementFileInsideDirectory); + gameAchievementFiles.push( + ...findAchievementFileInExecutableDirectory(game) + ); + } - if (!gameAchievementFiles.length) continue; + if (!gameAchievementFiles.length) continue; - for (const file of gameAchievementFiles) { - compareFile(game, file); - } + for (const file of gameAchievementFiles) { + await compareFile(game, file); } } }; @@ -64,7 +67,7 @@ const watchAchievementsWithWine = async () => { if (!gameAchievementFiles.length) continue; for (const file of gameAchievementFiles) { - compareFile(game, file); + await compareFile(game, file); } } }; diff --git a/src/main/services/achievements/find-achivement-files.ts b/src/main/services/achievements/find-achivement-files.ts index a48e5dd6..84984b58 100644 --- a/src/main/services/achievements/find-achivement-files.ts +++ b/src/main/services/achievements/find-achivement-files.ts @@ -13,12 +13,12 @@ const getAppDataPath = () => { const user = app.getPath("home").split("/").pop(); - return path.join("drive_c", "users", user || "", "AppData", "Roaming"); + return path.join("drive_c", "Users", user || "", "AppData", "Roaming"); }; const getDocumentsPath = () => { if (process.platform === "win32") { - return app.getPath("appData"); + return app.getPath("documents"); } const user = app.getPath("home").split("/").pop(); @@ -28,11 +28,10 @@ const getDocumentsPath = () => { const getPublicDocumentsPath = () => { if (process.platform === "win32") { - return app.getPath("appData"); + return path.join("C:", "Users", "Public", "Documents"); } - // /media/jackenx/JED2/.newprefix/dosdevices/c:/users/Public/Documents/Steam/CODEX/489830 - return path.join("drive_c", "users", "Public", "Documents"); + return path.join("drive_c", "Users", "Public", "Documents"); }; const getLocalAppDataPath = () => { diff --git a/src/main/services/achievements/update-local-unlocked-achivements.ts b/src/main/services/achievements/update-local-unlocked-achivements.ts index 38c1fa2d..177808d8 100644 --- a/src/main/services/achievements/update-local-unlocked-achivements.ts +++ b/src/main/services/achievements/update-local-unlocked-achivements.ts @@ -7,59 +7,69 @@ import { } from "./find-achivement-files"; import { parseAchievementFile } from "./parse-achievement-file"; import { mergeAchievements } from "./merge-achievements"; -import type { UnlockedAchievement } from "@types"; +import type { AchievementFile, UnlockedAchievement } from "@types"; import { getGameAchievementData } from "./get-game-achievement-data"; import { achievementsLogger } from "../logger"; import { Game } from "@main/entity"; export const updateAllLocalUnlockedAchievements = async () => { - const gameAchievementFilesMap = findAllAchievementFiles(); - const games = await gameRepository.find({ where: { isDeleted: false, }, }); + if (games.length === 0) return; + + const gameAchievementFilesMap = findAllAchievementFiles(); + for (const game of games) { - for (const objectId of getAlternativeObjectIds(game.objectID)) { - const gameAchievementFiles = gameAchievementFilesMap.get(objectId) || []; - const achievementFileInsideDirectory = - findAchievementFileInExecutableDirectory(game); - - gameAchievementFiles.push(...achievementFileInsideDirectory); - - gameAchievementRepository - .findOne({ - where: { objectId: game.objectID, shop: "steam" }, - }) - .then((localAchievements) => { - if (!localAchievements || !localAchievements.achievements) { - getGameAchievementData(game.objectID, "steam"); - } - }); - - const unlockedAchievements: UnlockedAchievement[] = []; - - for (const achievementFile of gameAchievementFiles) { - const parsedAchievements = parseAchievementFile( - achievementFile.filePath, - achievementFile.type - ); - - if (parsedAchievements.length) { - unlockedAchievements.push(...parsedAchievements); - - achievementsLogger.log( - "Achievement file for", - game.title, - achievementFile.filePath, - parsedAchievements - ); + gameAchievementRepository + .findOne({ + where: { objectId: game.objectID, shop: "steam" }, + }) + .then((localAchievements) => { + if (!localAchievements || !localAchievements.achievements) { + getGameAchievementData(game.objectID, "steam"); } + }); + + const gameAchievementFiles: AchievementFile[] = []; + const unlockedAchievements: UnlockedAchievement[] = []; + + for (const objectId of getAlternativeObjectIds(game.objectID)) { + gameAchievementFiles.push( + ...(gameAchievementFilesMap.get(objectId) || []) + ); + + gameAchievementFiles.push( + ...findAchievementFileInExecutableDirectory(game) + ); + } + + for (const achievementFile of gameAchievementFiles) { + const parsedAchievements = 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); + await mergeAchievements( + game.objectID, + "steam", + unlockedAchievements, + false + ); } } }; @@ -72,8 +82,6 @@ export const updateLocalUnlockedAchivements = async (game: Game) => { gameAchievementFiles.push(...achievementFileInsideDirectory); - // console.log("Achievements files for", game.title, gameAchievementFiles); - const unlockedAchievements: UnlockedAchievement[] = []; for (const achievementFile of gameAchievementFiles) {