mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-01-23 21:44:55 +03:00
feat: get achievement data on demand
This commit is contained in:
parent
0bcf005365
commit
d0f42e73ff
@ -5,13 +5,18 @@ import { getGameAchievementData } from "@main/services/achievements/get-game-ach
|
|||||||
|
|
||||||
export const getUnlockedAchievements = async (
|
export const getUnlockedAchievements = async (
|
||||||
objectId: string,
|
objectId: string,
|
||||||
shop: GameShop
|
shop: GameShop,
|
||||||
|
useCachedData: boolean
|
||||||
): Promise<UserAchievement[]> => {
|
): Promise<UserAchievement[]> => {
|
||||||
const cachedAchievements = await gameAchievementRepository.findOne({
|
const cachedAchievements = await gameAchievementRepository.findOne({
|
||||||
where: { objectId, shop },
|
where: { objectId, shop },
|
||||||
});
|
});
|
||||||
|
|
||||||
const achievementsData = await getGameAchievementData(objectId, shop);
|
const achievementsData = await getGameAchievementData(
|
||||||
|
objectId,
|
||||||
|
shop,
|
||||||
|
useCachedData
|
||||||
|
);
|
||||||
|
|
||||||
const unlockedAchievements = JSON.parse(
|
const unlockedAchievements = JSON.parse(
|
||||||
cachedAchievements?.unlockedAchievements || "[]"
|
cachedAchievements?.unlockedAchievements || "[]"
|
||||||
@ -57,12 +62,12 @@ export const getUnlockedAchievements = async (
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const getGameAchievementsEvent = async (
|
const getUnlockedAchievementsEvent = async (
|
||||||
_event: Electron.IpcMainInvokeEvent,
|
_event: Electron.IpcMainInvokeEvent,
|
||||||
objectId: string,
|
objectId: string,
|
||||||
shop: GameShop
|
shop: GameShop
|
||||||
): Promise<UserAchievement[]> => {
|
): Promise<UserAchievement[]> => {
|
||||||
return getUnlockedAchievements(objectId, shop);
|
return getUnlockedAchievements(objectId, shop, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
registerEvent("getUnlockedAchievements", getGameAchievementsEvent);
|
registerEvent("getUnlockedAchievements", getUnlockedAchievementsEvent);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { gameAchievementRepository, gameRepository } from "@main/repository";
|
import { gameRepository } from "@main/repository";
|
||||||
import { parseAchievementFile } from "./parse-achievement-file";
|
import { parseAchievementFile } from "./parse-achievement-file";
|
||||||
import { Game } from "@main/entity";
|
import { Game } from "@main/entity";
|
||||||
import { mergeAchievements } from "./merge-achievements";
|
import { mergeAchievements } from "./merge-achievements";
|
||||||
@ -13,7 +13,6 @@ import type { AchievementFile, UnlockedAchievement } from "@types";
|
|||||||
import { achievementsLogger } from "../logger";
|
import { achievementsLogger } from "../logger";
|
||||||
import { Cracker } from "@shared";
|
import { Cracker } from "@shared";
|
||||||
import { IsNull, Not } from "typeorm";
|
import { IsNull, Not } from "typeorm";
|
||||||
import { getGameAchievementData } from "./get-game-achievement-data";
|
|
||||||
|
|
||||||
const fileStats: Map<string, number> = new Map();
|
const fileStats: Map<string, number> = new Map();
|
||||||
const fltFiles: Map<string, Set<string>> = new Map();
|
const fltFiles: Map<string, Set<string>> = new Map();
|
||||||
@ -196,16 +195,6 @@ export class AchievementWatcherManager {
|
|||||||
|
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
games.map((game) => {
|
games.map((game) => {
|
||||||
gameAchievementRepository
|
|
||||||
.findOne({
|
|
||||||
where: { objectId: game.objectID, shop: game.shop },
|
|
||||||
})
|
|
||||||
.then((localAchievements) => {
|
|
||||||
if (!localAchievements || !localAchievements.achievements) {
|
|
||||||
getGameAchievementData(game.objectID, game.shop);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const gameAchievementFiles: AchievementFile[] = [];
|
const gameAchievementFiles: AchievementFile[] = [];
|
||||||
|
|
||||||
for (const objectId of getAlternativeObjectIds(game.objectID)) {
|
for (const objectId of getAlternativeObjectIds(game.objectID)) {
|
||||||
@ -233,16 +222,6 @@ export class AchievementWatcherManager {
|
|||||||
|
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
games.map((game) => {
|
games.map((game) => {
|
||||||
gameAchievementRepository
|
|
||||||
.findOne({
|
|
||||||
where: { objectId: game.objectID, shop: game.shop },
|
|
||||||
})
|
|
||||||
.then((localAchievements) => {
|
|
||||||
if (!localAchievements || !localAchievements.achievements) {
|
|
||||||
getGameAchievementData(game.objectID, game.shop);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const gameAchievementFiles = findAchievementFiles(game);
|
const gameAchievementFiles = findAchievementFiles(game);
|
||||||
const achievementFileInsideDirectory =
|
const achievementFileInsideDirectory =
|
||||||
findAchievementFileInExecutableDirectory(game);
|
findAchievementFileInExecutableDirectory(game);
|
||||||
|
@ -9,8 +9,19 @@ import { logger } from "../logger";
|
|||||||
|
|
||||||
export const getGameAchievementData = async (
|
export const getGameAchievementData = async (
|
||||||
objectId: string,
|
objectId: string,
|
||||||
shop: GameShop
|
shop: GameShop,
|
||||||
|
useCachedData: boolean
|
||||||
) => {
|
) => {
|
||||||
|
if (useCachedData) {
|
||||||
|
const cachedAchievements = await gameAchievementRepository.findOne({
|
||||||
|
where: { objectId, shop },
|
||||||
|
});
|
||||||
|
|
||||||
|
if (cachedAchievements && cachedAchievements.achievements) {
|
||||||
|
return JSON.parse(cachedAchievements.achievements) as AchievementData[];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const userPreferences = await userPreferencesRepository.findOne({
|
const userPreferences = await userPreferencesRepository.findOne({
|
||||||
where: { id: 1 },
|
where: { id: 1 },
|
||||||
});
|
});
|
||||||
|
@ -26,7 +26,7 @@ const saveAchievementsOnLocal = async (
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
if (!sendUpdateEvent) return;
|
if (!sendUpdateEvent) return;
|
||||||
|
|
||||||
return getUnlockedAchievements(objectId, shop)
|
return getUnlockedAchievements(objectId, shop, true)
|
||||||
.then((achievements) => {
|
.then((achievements) => {
|
||||||
WindowManager.mainWindow?.webContents.send(
|
WindowManager.mainWindow?.webContents.send(
|
||||||
`on-update-achievements-${objectId}-${shop}`,
|
`on-update-achievements-${objectId}-${shop}`,
|
||||||
|
Loading…
Reference in New Issue
Block a user