From 94ebf94abce6c7259ca45da02595a509959b1688 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Wed, 12 Nov 2025 07:21:28 -0300 Subject: [PATCH] fix: use local achievement cache for unlocked achievement count --- src/main/events/library/get-library.ts | 12 +++++++++- src/renderer/src/pages/library/library.tsx | 27 +++++++--------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/main/events/library/get-library.ts b/src/main/events/library/get-library.ts index c434f6d3..9fb3416b 100644 --- a/src/main/events/library/get-library.ts +++ b/src/main/events/library/get-library.ts @@ -2,6 +2,7 @@ import type { LibraryGame } from "@types"; import { registerEvent } from "../register-event"; import { downloadsSublevel, + gameAchievementsSublevel, gamesShopAssetsSublevel, gamesSublevel, } from "@main/level"; @@ -18,11 +19,20 @@ const getLibrary = async (): Promise => { const download = await downloadsSublevel.get(key); const gameAssets = await gamesShopAssetsSublevel.get(key); + let unlockedAchievementCount = game.unlockedAchievementCount ?? 0; + + if (!game.unlockedAchievementCount) { + const achievements = await gameAchievementsSublevel.get(key); + + unlockedAchievementCount = + achievements?.unlockedAchievements.length ?? 0; + } + return { id: key, ...game, download: download ?? null, - unlockedAchievementCount: game.unlockedAchievementCount ?? 0, + unlockedAchievementCount, achievementCount: game.achievementCount ?? 0, // Spread gameAssets last to ensure all image URLs are properly set ...gameAssets, diff --git a/src/renderer/src/pages/library/library.tsx b/src/renderer/src/pages/library/library.tsx index 8b377f63..0efe8fb2 100644 --- a/src/renderer/src/pages/library/library.tsx +++ b/src/renderer/src/pages/library/library.tsx @@ -14,10 +14,6 @@ import "./library.scss"; export default function Library() { const { library, updateLibrary } = useLibrary(); - type ElectronAPI = { - refreshLibraryAssets?: () => Promise; - onLibraryBatchComplete?: (cb: () => void) => () => void; - }; const [viewMode, setViewMode] = useState(() => { const savedViewMode = localStorage.getItem("library-view-mode"); @@ -41,22 +37,15 @@ export default function Library() { useEffect(() => { dispatch(setHeaderTitle(t("library"))); - const electron = (globalThis as unknown as { electron?: ElectronAPI }) - .electron; - let unsubscribe: () => void = () => undefined; - if (electron?.refreshLibraryAssets) { - electron - .refreshLibraryAssets() - .then(() => updateLibrary()) - .catch(() => updateLibrary()); - if (electron.onLibraryBatchComplete) { - unsubscribe = electron.onLibraryBatchComplete(() => { - updateLibrary(); - }); - } - } else { + + const unsubscribe = window.electron.onLibraryBatchComplete(() => { updateLibrary(); - } + }); + + window.electron + .refreshLibraryAssets() + .then(() => updateLibrary()) + .catch(() => updateLibrary()); return () => { unsubscribe();