2024-06-05 22:15:59 +03:00
|
|
|
import { Notification, nativeImage } from "electron";
|
2024-06-05 16:18:40 +03:00
|
|
|
import { t } from "i18next";
|
2024-06-05 22:15:59 +03:00
|
|
|
import { parseICO } from "icojs";
|
|
|
|
|
2024-06-05 16:18:40 +03:00
|
|
|
import { Game } from "@main/entity";
|
2024-06-05 22:15:59 +03:00
|
|
|
import { gameRepository, userPreferencesRepository } from "@main/repository";
|
|
|
|
|
|
|
|
const getGameIconNativeImage = async (gameId: number) => {
|
|
|
|
try {
|
|
|
|
const game = await gameRepository.findOne({
|
|
|
|
where: {
|
|
|
|
id: gameId,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
if (!game?.iconUrl) return undefined;
|
|
|
|
|
|
|
|
const images = await parseICO(
|
|
|
|
Buffer.from(game.iconUrl.split("base64,")[1], "base64")
|
|
|
|
);
|
|
|
|
|
|
|
|
const highResIcon = images.find((image) => image.width >= 128);
|
|
|
|
if (!highResIcon) return undefined;
|
|
|
|
|
|
|
|
return nativeImage.createFromBuffer(Buffer.from(highResIcon.buffer));
|
|
|
|
} catch (err) {
|
|
|
|
return undefined;
|
|
|
|
}
|
|
|
|
};
|
2024-06-05 16:18:40 +03:00
|
|
|
|
|
|
|
export const publishDownloadCompleteNotification = async (game: Game) => {
|
|
|
|
const userPreferences = await userPreferencesRepository.findOne({
|
|
|
|
where: { id: 1 },
|
|
|
|
});
|
|
|
|
|
2024-06-05 22:15:59 +03:00
|
|
|
const icon = await getGameIconNativeImage(game.id);
|
|
|
|
|
2024-06-05 16:18:40 +03:00
|
|
|
if (userPreferences?.downloadNotificationsEnabled) {
|
|
|
|
new Notification({
|
|
|
|
title: t("download_complete", {
|
|
|
|
ns: "notifications",
|
|
|
|
lng: userPreferences.language,
|
|
|
|
}),
|
|
|
|
body: t("game_ready_to_install", {
|
|
|
|
ns: "notifications",
|
|
|
|
lng: userPreferences.language,
|
|
|
|
title: game.title,
|
|
|
|
}),
|
2024-06-05 22:15:59 +03:00
|
|
|
icon,
|
2024-06-05 16:18:40 +03:00
|
|
|
}).show();
|
|
|
|
}
|
|
|
|
};
|
2024-06-05 16:20:32 +03:00
|
|
|
|
|
|
|
export const publishNewRepacksNotifications = async (count: number) => {
|
|
|
|
const userPreferences = await userPreferencesRepository.findOne({
|
|
|
|
where: { id: 1 },
|
|
|
|
});
|
|
|
|
|
2024-06-05 22:15:59 +03:00
|
|
|
if (userPreferences?.repackUpdatesNotificationsEnabled) {
|
2024-06-05 16:20:32 +03:00
|
|
|
new Notification({
|
|
|
|
title: t("repack_list_updated", {
|
|
|
|
ns: "notifications",
|
|
|
|
lng: userPreferences?.language || "en",
|
|
|
|
}),
|
|
|
|
body: t("repack_count", {
|
|
|
|
ns: "notifications",
|
|
|
|
lng: userPreferences?.language || "en",
|
|
|
|
count: count,
|
|
|
|
}),
|
|
|
|
}).show();
|
|
|
|
}
|
|
|
|
};
|