From 0c379d6c49de8f70837ad6831a38c7fe14eeca18 Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Tue, 3 Jun 2025 16:04:29 -0300 Subject: [PATCH] feat: combined notification when add game to library --- .../achievement-watcher-manager.ts | 64 +++++++++++-------- .../game-details/game-details.context.tsx | 11 ++-- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/src/main/services/achievements/achievement-watcher-manager.ts b/src/main/services/achievements/achievement-watcher-manager.ts index f751289d..0a0482b2 100644 --- a/src/main/services/achievements/achievement-watcher-manager.ts +++ b/src/main/services/achievements/achievement-watcher-manager.ts @@ -192,7 +192,15 @@ export class AchievementWatcherManager { this.alreadySyncedGames.set(gameKey, true); - return mergeAchievements(game, unlockedAchievements, false); + const newAchievements = await mergeAchievements( + game, + unlockedAchievements, + false + ); + + if (newAchievements > 0) { + this.notifyCombinedAchievementsUnlocked(1, newAchievements); + } } public static watchAchievements() { @@ -288,6 +296,32 @@ export class AchievementWatcherManager { ); } + private static async notifyCombinedAchievementsUnlocked( + totalNewGamesWithAchievements: number, + totalNewAchievements: number + ) { + const userPreferences = await db.get( + levelKeys.userPreferences, + { + valueEncoding: "json", + } + ); + + if (userPreferences.achievementCustomNotificationsEnabled !== false) { + WindowManager.notificationWindow?.webContents.send( + "on-combined-achievements-unlocked", + totalNewGamesWithAchievements, + totalNewAchievements, + userPreferences.achievementCustomNotificationPosition ?? "top-left" + ); + } else { + publishCombinedNewAchievementNotification( + totalNewAchievements, + totalNewGamesWithAchievements + ); + } + } + public static async preSearchAchievements() { try { const gameAchievementFiles = @@ -311,31 +345,11 @@ export class AchievementWatcherManager { ); if (totalNewAchievements > 0) { - const userPreferences = await db.get( - levelKeys.userPreferences, - { - valueEncoding: "json", - } + await setTimeout(4000); + this.notifyCombinedAchievementsUnlocked( + totalNewGamesWithAchievements, + totalNewAchievements ); - - if (userPreferences.achievementNotificationsEnabled !== false) { - await setTimeout(4000); - - if (userPreferences.achievementCustomNotificationsEnabled !== false) { - WindowManager.notificationWindow?.webContents.send( - "on-combined-achievements-unlocked", - totalNewGamesWithAchievements, - totalNewAchievements, - userPreferences.achievementCustomNotificationPosition ?? - "top-left" - ); - } else { - publishCombinedNewAchievementNotification( - totalNewAchievements, - totalNewGamesWithAchievements - ); - } - } } } catch (err) { achievementsLogger.error("Error on preSearchAchievements", err); diff --git a/src/renderer/src/context/game-details/game-details.context.tsx b/src/renderer/src/context/game-details/game-details.context.tsx index e58ed673..e1774e60 100644 --- a/src/renderer/src/context/game-details/game-details.context.tsx +++ b/src/renderer/src/context/game-details/game-details.context.tsx @@ -183,10 +183,13 @@ export function GameDetailsContextProvider({ .catch(() => {}); } - window.electron.syncGameByObjectId(shop, objectId).then(() => { - if (abortController.signal.aborted) return; - updateGame(); - }); + window.electron + .syncGameByObjectId(shop, objectId) + .then(() => { + if (abortController.signal.aborted) return; + updateGame(); + }) + .catch(() => {}); }, [ updateGame, dispatch,