feat: get achievement from game directory on launch

This commit is contained in:
Zamitto 2024-10-05 00:49:52 -03:00
parent 5e313a0374
commit 2a6b757e37

View file

@ -2,6 +2,7 @@ import { gameAchievementRepository, gameRepository } from "@main/repository";
import { import {
findAllAchievementFiles, findAllAchievementFiles,
findAchievementFiles, findAchievementFiles,
findAchievementFileInExecutableDirectory,
} from "./find-achivement-files"; } from "./find-achivement-files";
import { parseAchievementFile } from "./parse-achievement-file"; import { parseAchievementFile } from "./parse-achievement-file";
import { mergeAchievements } from "./merge-achievements"; import { mergeAchievements } from "./merge-achievements";
@ -12,26 +13,30 @@ import { achievementsLogger } from "../logger";
export const updateAllLocalUnlockedAchievements = async () => { export const updateAllLocalUnlockedAchievements = async () => {
const gameAchievementFilesMap = await findAllAchievementFiles(); const gameAchievementFilesMap = await findAllAchievementFiles();
for (const objectId of gameAchievementFilesMap.keys()) { const games = await gameRepository.find({
const gameAchievementFiles = gameAchievementFilesMap.get(objectId)!; where: {
isDeleted: false,
},
});
const [game, localAchievements] = await Promise.all([ for (const game of games) {
gameRepository.findOne({ const gameAchievementFiles =
where: { objectID: objectId, shop: "steam", isDeleted: false }, gameAchievementFilesMap.get(game.objectID) || [];
}), const achievementFileInsideDirectory =
gameAchievementRepository.findOne({ findAchievementFileInExecutableDirectory(game);
where: { objectId, shop: "steam" },
}),
]);
if (!game) continue; gameAchievementFiles.push(...achievementFileInsideDirectory);
const localAchievements = await gameAchievementRepository.findOne({
where: { objectId: game.objectID, shop: "steam" },
});
if (!localAchievements || !localAchievements.achievements) { if (!localAchievements || !localAchievements.achievements) {
await getGameAchievementData(objectId, "steam") await getGameAchievementData(game.objectID, "steam")
.then((achievements) => { .then((achievements) => {
return gameAchievementRepository.upsert( return gameAchievementRepository.upsert(
{ {
objectId, objectId: game.objectID,
shop: "steam", shop: "steam",
achievements: JSON.stringify(achievements), achievements: JSON.stringify(achievements),
}, },
@ -60,7 +65,7 @@ export const updateAllLocalUnlockedAchievements = async () => {
); );
} }
mergeAchievements(objectId, "steam", unlockedAchievements, false); mergeAchievements(game.objectID, "steam", unlockedAchievements, false);
} }
}; };
@ -78,6 +83,11 @@ export const updateLocalUnlockedAchivements = async (objectId: string) => {
const gameAchievementFiles = await findAchievementFiles(game); const gameAchievementFiles = await findAchievementFiles(game);
const achievementFileInsideDirectory =
findAchievementFileInExecutableDirectory(game);
gameAchievementFiles.push(...achievementFileInsideDirectory);
console.log("Achievements files for", game.title, gameAchievementFiles); console.log("Achievements files for", game.title, gameAchievementFiles);
if (!localAchievements || !localAchievements.achievements) { if (!localAchievements || !localAchievements.achievements) {