Files
envHelper/electron/main.ts
MrSphay 1361ef657d
All checks were successful
Build Windows App / build-windows (push) Successful in 19m20s
Restore custom styled window controls
2026-05-01 18:57:33 +02:00

101 lines
2.3 KiB
TypeScript

import { app, BrowserWindow, Menu, dialog, ipcMain } from "electron";
import { readFile, writeFile } from "node:fs/promises";
import path from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
async function createWindow() {
const win = new BrowserWindow({
width: 1220,
height: 820,
minWidth: 980,
minHeight: 680,
title: "EnvHelper",
frame: false,
autoHideMenuBar: true,
backgroundColor: "#f6f7f4",
webPreferences: {
preload: path.join(__dirname, "preload.js"),
contextIsolation: true,
nodeIntegration: false
}
});
Menu.setApplicationMenu(null);
if (!app.isPackaged) {
await win.loadURL("http://127.0.0.1:5173");
} else {
await win.loadFile(path.join(__dirname, "../dist/index.html"));
}
}
ipcMain.handle("envhelper:open-file", async () => {
const result = await dialog.showOpenDialog({
properties: ["openFile"],
filters: [{ name: "Environment files", extensions: ["env", "txt", "*"] }]
});
if (result.canceled || result.filePaths.length === 0) {
return null;
}
const filePath = result.filePaths[0];
return {
path: filePath,
content: await readFile(filePath, "utf8")
};
});
ipcMain.handle("envhelper:window-minimize", (event) => {
BrowserWindow.fromWebContents(event.sender)?.minimize();
});
ipcMain.handle("envhelper:window-toggle-maximize", (event) => {
const win = BrowserWindow.fromWebContents(event.sender);
if (!win) {
return false;
}
if (win.isMaximized()) {
win.unmaximize();
return false;
}
win.maximize();
return true;
});
ipcMain.handle("envhelper:window-close", (event) => {
BrowserWindow.fromWebContents(event.sender)?.close();
});
ipcMain.handle("envhelper:save-file", async (_event, content: string) => {
const result = await dialog.showSaveDialog({
defaultPath: ".env",
filters: [{ name: "Environment file", extensions: ["env"] }]
});
if (result.canceled || !result.filePath) {
return null;
}
await writeFile(result.filePath, content, "utf8");
return result.filePath;
});
app.whenReady().then(createWindow);
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});
app.on("activate", () => {
if (BrowserWindow.getAllWindows().length === 0) {
void createWindow();
}
});