Merge pull request #373 from mag1yar/feature/recently-played-games-in-tray-context-menu

Adding recently played games to tray context menu
This commit is contained in:
Zamitto 2024-05-16 12:24:39 -03:00 committed by GitHub
commit 5e670aab24
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,10 +1,19 @@
import { BrowserWindow, Menu, Tray, app } from "electron"; import {
BrowserWindow,
Menu,
MenuItem,
MenuItemConstructorOptions,
Tray,
app,
shell,
} from "electron";
import { is } from "@electron-toolkit/utils"; import { is } from "@electron-toolkit/utils";
import { t } from "i18next"; import { t } from "i18next";
import path from "node:path"; import path from "node:path";
import icon from "@resources/icon.png?asset"; import icon from "@resources/icon.png?asset";
import trayIcon from "@resources/tray-icon.png?asset"; import trayIcon from "@resources/tray-icon.png?asset";
import { userPreferencesRepository } from "@main/repository"; import { gameRepository, userPreferencesRepository } from "@main/repository";
import { IsNull, Not } from "typeorm";
export class WindowManager { export class WindowManager {
public static mainWindow: Electron.BrowserWindow | null = null; public static mainWindow: Electron.BrowserWindow | null = null;
@ -77,33 +86,66 @@ export class WindowManager {
public static createSystemTray(language: string) { public static createSystemTray(language: string) {
const tray = new Tray(trayIcon); const tray = new Tray(trayIcon);
const contextMenu = Menu.buildFromTemplate([ const updateSystemTray = async () => {
{ const games = await gameRepository.find({
label: t("open", { where: {
ns: "system_tray", isDeleted: false,
lng: language, executablePath: Not(IsNull()),
}), lastTimePlayed: Not(IsNull()),
type: "normal",
click: () => {
if (this.mainWindow) {
this.mainWindow.show();
} else {
this.createMainWindow();
}
}, },
}, take: 5,
{ order: {
label: t("quit", { updatedAt: "DESC",
ns: "system_tray", },
lng: language, });
}),
type: "normal", const recentlyPlayedGames: Array<MenuItemConstructorOptions | MenuItem> =
click: () => app.quit(), games.map(({ title, executablePath }) => ({
}, label: title,
]); type: "normal",
click: async () => {
if (!executablePath) return;
shell.openPath(executablePath);
},
}));
const contextMenu = Menu.buildFromTemplate([
{
label: t("open", {
ns: "system_tray",
lng: language,
}),
type: "normal",
click: () => {
if (this.mainWindow) {
this.mainWindow.show();
} else {
this.createMainWindow();
}
},
},
{
type: "separator",
},
...recentlyPlayedGames,
{
type: "separator",
},
{
label: t("quit", {
ns: "system_tray",
lng: language,
}),
type: "normal",
click: () => app.quit(),
},
]);
return contextMenu;
};
tray.setToolTip("Hydra"); tray.setToolTip("Hydra");
tray.setContextMenu(contextMenu);
if (process.platform === "win32" || process.platform === "linux") { if (process.platform === "win32" || process.platform === "linux") {
tray.addListener("click", () => { tray.addListener("click", () => {
@ -117,6 +159,11 @@ export class WindowManager {
this.createMainWindow(); this.createMainWindow();
}); });
tray.addListener("right-click", async () => {
const contextMenu = await updateSystemTray();
tray.popUpContextMenu(contextMenu);
});
} }
} }
} }