wip: get alternate objectIds

This commit is contained in:
Zamitto 2024-10-06 02:48:46 -03:00
parent 456e7ed809
commit 5d21adcbb1
3 changed files with 66 additions and 65 deletions

View File

@ -6,6 +6,7 @@ import fs, { readdirSync } from "node:fs";
import { import {
findAchievementFileInExecutableDirectory, findAchievementFileInExecutableDirectory,
findAllAchievementFiles, findAllAchievementFiles,
getAlternativeObjectIds,
} from "./find-achivement-files"; } from "./find-achivement-files";
import type { AchievementFile } from "@types"; import type { AchievementFile } from "@types";
import { achievementsLogger, logger } from "../logger"; import { achievementsLogger, logger } from "../logger";
@ -23,25 +24,27 @@ export const watchAchievements = async () => {
if (games.length === 0) return; if (games.length === 0) return;
const achievementFiles = await findAllAchievementFiles(); const achievementFiles = findAllAchievementFiles();
for (const game of games) { for (const game of games) {
const gameAchievementFiles = achievementFiles.get(game.objectID) || []; for (const objectId of getAlternativeObjectIds(game.objectID)) {
const achievementFileInsideDirectory = const gameAchievementFiles = achievementFiles.get(objectId) || [];
findAchievementFileInExecutableDirectory(game); const achievementFileInsideDirectory =
findAchievementFileInExecutableDirectory(game);
gameAchievementFiles.push(...achievementFileInsideDirectory); gameAchievementFiles.push(...achievementFileInsideDirectory);
if (!gameAchievementFiles.length) continue; if (!gameAchievementFiles.length) continue;
console.log( console.log(
"Achievements files to observe for:", "Achievements files to observe for:",
game.title, game.title,
gameAchievementFiles gameAchievementFiles
); );
for (const file of gameAchievementFiles) { for (const file of gameAchievementFiles) {
compareFile(game, file); compareFile(game, file);
}
} }
} }
}; };

View File

@ -27,7 +27,7 @@ const crackers = [
Cracker.flt, Cracker.flt,
]; ];
const getPathFromCracker = async (cracker: Cracker) => { const getPathFromCracker = (cracker: Cracker) => {
if (cracker === Cracker.codex) { if (cracker === Cracker.codex) {
return [ return [
{ {
@ -167,7 +167,7 @@ const getPathFromCracker = async (cracker: Cracker) => {
throw new Error(`Cracker ${cracker} not implemented`); throw new Error(`Cracker ${cracker} not implemented`);
}; };
const getAlternativeObjectIds = (objectId: string) => { export const getAlternativeObjectIds = (objectId: string) => {
if (objectId === "205100") { if (objectId === "205100") {
return ["205100", "217980", "31292"]; return ["205100", "217980", "31292"];
} }
@ -175,13 +175,11 @@ const getAlternativeObjectIds = (objectId: string) => {
return [objectId]; return [objectId];
}; };
export const findAchievementFiles = async (game: Game) => { export const findAchievementFiles = (game: Game) => {
const achievementFiles: AchievementFile[] = []; const achievementFiles: AchievementFile[] = [];
for (const cracker of crackers) { for (const cracker of crackers) {
for (const { folderPath, fileLocation } of await getPathFromCracker( for (const { folderPath, fileLocation } of getPathFromCracker(cracker)) {
cracker
)) {
for (const objectId of getAlternativeObjectIds(game.objectID)) { for (const objectId of getAlternativeObjectIds(game.objectID)) {
const filePath = path.join(folderPath, objectId, ...fileLocation); 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<string, AchievementFile[]>(); const gameAchievementFiles = new Map<string, AchievementFile[]>();
for (const cracker of crackers) { for (const cracker of crackers) {
for (const { folderPath, fileLocation } of await getPathFromCracker( for (const { folderPath, fileLocation } of getPathFromCracker(cracker)) {
cracker
)) {
if (!fs.existsSync(folderPath)) { if (!fs.existsSync(folderPath)) {
continue; continue;
} }

View File

@ -3,6 +3,7 @@ import {
findAllAchievementFiles, findAllAchievementFiles,
findAchievementFiles, findAchievementFiles,
findAchievementFileInExecutableDirectory, findAchievementFileInExecutableDirectory,
getAlternativeObjectIds,
} 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";
@ -11,7 +12,7 @@ import { getGameAchievementData } from "./get-game-achievement-data";
import { achievementsLogger } from "../logger"; import { achievementsLogger } from "../logger";
export const updateAllLocalUnlockedAchievements = async () => { export const updateAllLocalUnlockedAchievements = async () => {
const gameAchievementFilesMap = await findAllAchievementFiles(); const gameAchievementFilesMap = findAllAchievementFiles();
const games = await gameRepository.find({ const games = await gameRepository.find({
where: { where: {
@ -20,53 +21,54 @@ export const updateAllLocalUnlockedAchievements = async () => {
}); });
for (const game of games) { for (const game of games) {
const gameAchievementFiles = for (const objectId of getAlternativeObjectIds(game.objectID)) {
gameAchievementFilesMap.get(game.objectID) || []; const gameAchievementFiles = gameAchievementFilesMap.get(objectId) || [];
const achievementFileInsideDirectory = const achievementFileInsideDirectory =
findAchievementFileInExecutableDirectory(game); findAchievementFileInExecutableDirectory(game);
gameAchievementFiles.push(...achievementFileInsideDirectory); gameAchievementFiles.push(...achievementFileInsideDirectory);
const localAchievements = await gameAchievementRepository.findOne({ const localAchievements = await gameAchievementRepository.findOne({
where: { objectId: game.objectID, shop: "steam" }, where: { objectId: game.objectID, shop: "steam" },
}); });
if (!localAchievements || !localAchievements.achievements) { if (!localAchievements || !localAchievements.achievements) {
await getGameAchievementData(game.objectID, "steam") await getGameAchievementData(game.objectID, "steam")
.then((achievements) => { .then((achievements) => {
return gameAchievementRepository.upsert( return gameAchievementRepository.upsert(
{ {
objectId: game.objectID, objectId: game.objectID,
shop: "steam", shop: "steam",
achievements: JSON.stringify(achievements), achievements: JSON.stringify(achievements),
}, },
["objectId", "shop"] ["objectId", "shop"]
); );
}) })
.catch(() => {}); .catch(() => {});
}
const unlockedAchievements: UnlockedAchievement[] = [];
for (const achievementFile of gameAchievementFiles) {
const parsedAchievements = await parseAchievementFile(
achievementFile.filePath,
achievementFile.type
);
if (parsedAchievements.length) {
unlockedAchievements.push(...parsedAchievements);
} }
achievementsLogger.log( const unlockedAchievements: UnlockedAchievement[] = [];
"Achievement file for",
game.title,
achievementFile.filePath,
parsedAchievements
);
}
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);
}
} }
}; };