armcord/src/tray.ts

146 lines
5.1 KiB
TypeScript
Raw Normal View History

import * as fs from "fs";
import {Menu, Tray, app, nativeImage} from "electron";
2022-11-22 14:34:24 +00:00
import {createInviteWindow, mainWindow} from "./window";
import {getConfig, getConfigLocation, getDisplayVersion, setWindowState} from "./utils";
2022-03-04 17:53:18 +00:00
import * as path from "path";
import {createSettingsWindow} from "./settings/main";
2022-08-25 12:57:28 +00:00
export let tray: any = null;
2023-06-10 18:06:00 +00:00
let trayIcon = "ac_plug_colored";
2022-04-20 19:50:23 +00:00
app.whenReady().then(async () => {
let finishedSetup = await getConfig("doneSetup");
2023-06-10 18:06:00 +00:00
if ((await getConfig("trayIcon")) != "default") {
trayIcon = await getConfig("trayIcon");
}
2022-07-11 17:13:52 +00:00
let trayPath = nativeImage.createFromPath(path.join(__dirname, "../", `/assets/${trayIcon}.png`));
let trayVerIcon;
trayVerIcon = function () {
if (process.platform == "win32") {
return trayPath.resize({height: 16});
} else if (process.platform == "darwin") {
return trayPath.resize({height: 18});
} else if (process.platform == "linux") {
return trayPath.resize({height: 24});
}
return undefined;
};
2022-10-08 15:43:08 +00:00
if (process.platform == "darwin" && trayPath.getSize().height > 22) trayPath = trayPath.resize({height: 22});
let clientName = (await getConfig("clientName")) ?? "ArmCord";
if ((await getConfig("windowStyle")) == "basic") {
2022-07-11 17:13:52 +00:00
tray = new Tray(trayPath);
function contextMenu(): Electron.Menu {
if (finishedSetup == false) {
return Menu.buildFromTemplate([
{
label: `Finish the setup first!`,
enabled: false
2022-10-08 15:43:08 +00:00
},
{
label: `Quit ${clientName}`,
async click() {
fs.unlink(await getConfigLocation(), (err) => {
2022-10-08 15:43:08 +00:00
if (err) throw err;
console.log('Closed during setup. "settings.json" was deleted');
app.quit();
});
}
}
]);
} else {
return Menu.buildFromTemplate([
{
label: `Open ${clientName}`,
click() {
mainWindow.show();
}
2022-10-08 15:43:08 +00:00
},
{
label: `Quit ${clientName}`,
click() {
let [width, height] = mainWindow.getSize();
setWindowState({
width,
height,
isMaximized: mainWindow.isMaximized(),
x: mainWindow.getPosition()[0],
y: mainWindow.getPosition()[1]
});
app.quit();
}
}
]);
2022-03-04 17:53:18 +00:00
}
}
2022-04-20 19:50:23 +00:00
tray.setToolTip(clientName);
2022-04-20 19:50:23 +00:00
tray.setContextMenu(contextMenu);
} else {
2022-07-11 17:13:52 +00:00
tray = new Tray(trayPath);
if (finishedSetup == false) {
const contextMenu = Menu.buildFromTemplate([
{
label: `Finish the setup first!`,
enabled: false
2022-10-08 15:43:08 +00:00
},
{
label: `Quit ${clientName}`,
async click() {
fs.unlink(await getConfigLocation(), (err) => {
2022-10-08 15:43:08 +00:00
if (err) throw err;
console.log('Closed during setup. "settings.json" was deleted');
app.quit();
});
}
2022-04-20 19:50:23 +00:00
}
]);
tray.setContextMenu(contextMenu);
} else {
const contextMenu = Menu.buildFromTemplate([
{
label: `${clientName} ${getDisplayVersion()}`,
icon: trayVerIcon(),
enabled: false
},
{
type: "separator"
},
{
label: `Open ${clientName}`,
click() {
mainWindow.show();
}
},
{
label: "Open Settings",
click() {
createSettingsWindow();
}
2022-10-08 15:43:08 +00:00
},
{
label: "Support Discord Server",
click() {
2022-11-22 14:34:24 +00:00
createInviteWindow("TnhxcqynZ2");
}
2022-10-08 15:43:08 +00:00
},
{
type: "separator"
2022-10-08 15:43:08 +00:00
},
{
label: `Quit ${clientName}`,
click() {
app.quit();
}
}
]);
tray.setContextMenu(contextMenu);
}
2022-10-08 15:43:08 +00:00
}
tray.setToolTip(clientName);
tray.on("click", function () {
mainWindow.show();
});
});