mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-02-09 03:37:45 +03:00
wip: get alternate objectIds
This commit is contained in:
parent
456e7ed809
commit
5d21adcbb1
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user