feat: refactor achievement listeners

This commit is contained in:
Zamitto 2024-10-07 20:16:12 -03:00
parent f5445b00f4
commit 63aee44982
6 changed files with 45 additions and 18 deletions

View File

@ -38,8 +38,7 @@ const getAchievements = async (
return { achievementsData, unlockedAchievements };
};
const getGameAchievements = async (
_event: Electron.IpcMainInvokeEvent,
export const getGameAchievements = async (
objectId: string,
shop: GameShop,
userId?: string
@ -78,4 +77,13 @@ const getGameAchievements = async (
});
};
registerEvent("getGameAchievements", getGameAchievements);
const getGameAchievementsEvent = async (
_event: Electron.IpcMainInvokeEvent,
objectId: string,
shop: GameShop,
userId?: string
): Promise<GameAchievement[]> => {
return getGameAchievements(objectId, shop, userId);
};
registerEvent("getGameAchievements", getGameAchievementsEvent);

View File

@ -2,6 +2,7 @@ import { gameAchievementRepository, gameRepository } from "@main/repository";
import type { GameShop, UnlockedAchievement } from "@types";
import { WindowManager } from "../window-manager";
import { HydraApi } from "../hydra-api";
import { getGameAchievements } from "@main/events/catalogue/get-game-achievements";
const saveAchievementsOnLocal = async (
objectId: string,
@ -17,11 +18,10 @@ const saveAchievementsOnLocal = async (
},
["objectId", "shop"]
)
.then(() => {
.then(async () => {
WindowManager.mainWindow?.webContents.send(
"on-achievement-unlocked",
objectId,
shop
`on-update-achievements-${objectId}-${shop}`,
await getGameAchievements(objectId, shop as GameShop)
);
});
};

View File

@ -14,6 +14,7 @@ import type {
} from "@types";
import type { CatalogueCategory } from "@shared";
import type { AxiosProgressEvent } from "axios";
import { GameAchievement } from "@main/entity";
contextBridge.exposeInMainWorld("electron", {
/* Torrenting */
@ -69,6 +70,22 @@ contextBridge.exposeInMainWorld("electron", {
return () =>
ipcRenderer.removeListener("on-achievement-unlocked", listener);
},
onUpdateAchievements: (
objectId: string,
shop: GameShop,
cb: (achievements: GameAchievement[]) => void
) => {
const listener = (
_event: Electron.IpcRendererEvent,
achievements: GameAchievement[]
) => cb(achievements);
ipcRenderer.on(`on-update-achievements-${objectId}-${shop}`, listener);
return () =>
ipcRenderer.removeListener(
`on-update-achievements-${objectId}-${shop}`,
listener
);
},
/* User preferences */
getUserPreferences: () => ipcRenderer.invoke("getUserPreferences"),

View File

@ -132,13 +132,14 @@ export function GameDetailsContextProvider({
setIsLoading(false);
});
window.electron.getGameStats(objectId!, shop as GameShop).then((result) => {
window.electron.getGameStats(objectId, shop as GameShop).then((result) => {
setStats(result);
});
window.electron
.getGameAchievements(objectId!, shop as GameShop)
.getGameAchievements(objectId, shop as GameShop)
.then((achievements) => {
// TODO: race condition
setAchievements(achievements);
})
.catch(() => {
@ -175,14 +176,11 @@ export function GameDetailsContextProvider({
}, [game?.id, isGameRunning, updateGame]);
useEffect(() => {
const unsubscribe = window.electron.onAchievementUnlocked(
(objectId, shop) => {
if (objectId !== objectId || shop !== shop) return;
window.electron
.getGameAchievements(objectId!, shop as GameShop)
.then(setAchievements)
.catch(() => {});
const unsubscribe = window.electron.onUpdateAchievements(
objectId,
shop,
(achievements) => {
setAchievements(achievements);
}
);

View File

@ -76,6 +76,11 @@ declare global {
achievements?: { displayName: string; iconUrl: string }[]
) => void
) => () => Electron.IpcRenderer;
onUpdateAchievements: (
objectId: string,
shop: GameShop,
cb: (achievements: GameAchievement[]) => void
) => () => Electron.IpcRenderer;
/* Library */
addGameToLibrary: (

View File

@ -82,7 +82,6 @@ export function Sidebar() {
>
<span>
<Link to={buildGameAchievementPath()}>Ver todas</Link>
<a></a>
</span>
<div
style={{