From 08fbd4c8d8365e056411a6f5f2395d05e7d603fc Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Thu, 26 Sep 2024 16:09:36 -0300 Subject: [PATCH] feat: fix notification icons --- .../events/library/add-game-to-library.ts | 5 ++++ .../save-all-local-steam-achivements.ts | 10 +++++-- src/main/services/notifications.ts | 27 +++++++++++++------ 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/main/events/library/add-game-to-library.ts b/src/main/events/library/add-game-to-library.ts index 13a7e5e0..8e9d0886 100644 --- a/src/main/events/library/add-game-to-library.ts +++ b/src/main/events/library/add-game-to-library.ts @@ -8,6 +8,7 @@ import { getFileBase64 } from "@main/helpers"; import { steamGamesWorker } from "@main/workers"; import { createGame } from "@main/services/library-sync"; import { steamUrlBuilder } from "@shared"; +import { saveAllLocalSteamAchivements } from "@main/services/achievements/save-all-local-steam-achivements"; const addGameToLibrary = async ( _event: Electron.IpcMainInvokeEvent, @@ -52,6 +53,10 @@ const addGameToLibrary = async ( }); } + // TODO: search for achievements only from this game + console.log("Searching for achievements", title); + saveAllLocalSteamAchivements(); + const game = await gameRepository.findOne({ where: { objectID } }); createGame(game!).catch(() => {}); diff --git a/src/main/services/achievements/save-all-local-steam-achivements.ts b/src/main/services/achievements/save-all-local-steam-achivements.ts index b736bc4c..154c3f79 100644 --- a/src/main/services/achievements/save-all-local-steam-achivements.ts +++ b/src/main/services/achievements/save-all-local-steam-achivements.ts @@ -17,7 +17,7 @@ export const saveAllLocalSteamAchivements = async () => { const gameAchievementFiles = findSteamGameAchievementFiles(); - for (const objectId of Object.keys(gameAchievementFiles)) { + for (const objectId of gameAchievementFiles.keys()) { const [game, localAchievements] = await Promise.all([ gameRepository.findOne({ where: { objectID: objectId, shop: "steam", isDeleted: false }, @@ -29,6 +29,12 @@ export const saveAllLocalSteamAchivements = async () => { if (!game) continue; + console.log( + "Achievements files for", + game.title, + gameAchievementFiles.get(objectId) + ); + if (!localAchievements || !localAchievements.achievements) { await HydraApi.get( "/games/achievements", @@ -54,7 +60,7 @@ export const saveAllLocalSteamAchivements = async () => { const unlockedAchievements: UnlockedAchievement[] = []; - for (const achievementFile of gameAchievementFiles[objectId]) { + for (const achievementFile of gameAchievementFiles.get(objectId)!) { const localAchievementFile = await parseAchievementFile( achievementFile.filePath ); diff --git a/src/main/services/notifications.ts b/src/main/services/notifications.ts index 114fb5a2..92c9545c 100644 --- a/src/main/services/notifications.ts +++ b/src/main/services/notifications.ts @@ -85,17 +85,28 @@ export const publishNotificationUpdateReadyToInstall = async ( }).show(); }; +const downloadImage = async (url: string, iconPath: string) => { + const response = await axios.get(url, { responseType: "stream" }); + const writer = fs.createWriteStream(iconPath); + response.data.pipe(writer); + + return new Promise((resolve, reject) => { + writer.on("finish", resolve); + writer.on("error", reject); + }); +}; + export const publishNewAchievementNotification = async ( game: string, name: string, - icon: string + iconUrl: string ) => { - const iconName = icon.split("/").pop() || "icon.png"; - await axios.get(icon, { responseType: "stream" }).then((response) => { - return response.data.pipe( - fs.createWriteStream(path.join(app.getPath("temp"), iconName)) - ); - }); + const iconPath = path.join( + app.getPath("temp"), + iconUrl.split("/").pop() || "image.jpg" + ); + + await downloadImage(iconUrl, iconPath); new Notification({ title: t("game_achievement_unlocked", { @@ -103,7 +114,7 @@ export const publishNewAchievementNotification = async ( game, }), body: name, - icon: path.join(app.getPath("temp"), iconName), + icon: iconPath, }).show(); };