93 lines
2.3 KiB
TypeScript
93 lines
2.3 KiB
TypeScript
/*
|
|
* Vesktop, a desktop app aiming to give you a snappier Discord Experience
|
|
* Copyright (c) 2025 Vendicated and Vesktop contributors
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
import { app, BrowserWindow, Menu, Tray } from "electron";
|
|
|
|
import { createAboutWindow } from "./about";
|
|
import { AppEvents } from "./events";
|
|
import { Settings } from "./settings";
|
|
import { resolveAssetPath } from "./userAssets";
|
|
import { clearData } from "./utils/clearData";
|
|
import { downloadVencordFiles } from "./utils/vencordLoader";
|
|
|
|
let tray: Tray;
|
|
let trayVariant: "tray" | "trayUnread" = "tray";
|
|
|
|
AppEvents.on("userAssetChanged", async asset => {
|
|
if (tray && (asset === "tray" || asset === "trayUnread")) {
|
|
tray.setImage(await resolveAssetPath(trayVariant));
|
|
}
|
|
});
|
|
|
|
AppEvents.on("setTrayVariant", async variant => {
|
|
if (trayVariant === variant) return;
|
|
|
|
trayVariant = variant;
|
|
if (!tray) return;
|
|
|
|
tray.setImage(await resolveAssetPath(trayVariant));
|
|
});
|
|
|
|
export function destroyTray() {
|
|
tray?.destroy();
|
|
}
|
|
|
|
export async function initTray(win: BrowserWindow, setIsQuitting: (val: boolean) => void) {
|
|
const onTrayClick = () => {
|
|
if (Settings.store.clickTrayToShowHide && win.isVisible()) win.hide();
|
|
else win.show();
|
|
};
|
|
|
|
const trayMenu = Menu.buildFromTemplate([
|
|
{
|
|
label: "Open",
|
|
click() {
|
|
win.show();
|
|
}
|
|
},
|
|
{
|
|
label: "About",
|
|
click: createAboutWindow
|
|
},
|
|
{
|
|
label: "Repair Vencord",
|
|
async click() {
|
|
await downloadVencordFiles();
|
|
app.relaunch();
|
|
app.quit();
|
|
}
|
|
},
|
|
{
|
|
label: "Reset Vesktop",
|
|
async click() {
|
|
await clearData(win);
|
|
}
|
|
},
|
|
{
|
|
type: "separator"
|
|
},
|
|
{
|
|
label: "Restart",
|
|
click() {
|
|
app.relaunch();
|
|
app.quit();
|
|
}
|
|
},
|
|
{
|
|
label: "Quit",
|
|
click() {
|
|
setIsQuitting(true);
|
|
app.quit();
|
|
}
|
|
}
|
|
]);
|
|
|
|
tray = new Tray(await resolveAssetPath(trayVariant));
|
|
tray.setToolTip("Vesktop");
|
|
tray.setContextMenu(trayMenu);
|
|
tray.on("click", onTrayClick);
|
|
}
|