nova-betterchat/electron/index.cjs

155 lines
3.5 KiB
JavaScript
Raw Normal View History

const path = require('path');
const { app, BrowserWindow, Tray, Menu } = require('electron');
const isDev = require('electron-is-dev');
2023-04-01 15:36:37 +02:00
const { autoUpdater } = require('electron-updater');
if (require('electron-squirrel-startup')) app.quit();
const PORT = isDev ? '5173' : '51735';
function createWindow() {
let iconPath = '';
if (isDev) {
iconPath = path.join(__dirname, '../public/icon-rounded.png');
} else {
iconPath = path.join(__dirname, '../dist/icon-rounded.png');
}
2023-04-01 15:36:37 +02:00
autoUpdater.checkForUpdatesAndNotify();
const win = new BrowserWindow({
autoHideMenuBar: true,
show: false,
icon: iconPath,
});
createTray(win);
win.maximize();
win.show();
isDev || createServer();
win.loadURL(`http://localhost:${PORT}`);
if (isDev) {
win.webContents.openDevTools({ mode: 'detach' });
}
return win;
}
const createTray = (window) => {
const tray = new Tray(
path.join(
__dirname,
isDev ? '../public/icon-rounded.png' : '../dist/icon-rounded.png'
)
);
const contextMenu = Menu.buildFromTemplate([
2023-04-23 09:56:58 +02:00
{
label: 'Show',
click: () => {
win.maximize();
window.show();
},
},
{
label: 'Exit',
click: () => {
app.isQuiting = true;
app.quit();
},
},
]);
2023-04-23 09:56:58 +02:00
tray.on('click', () => {
win.maximize();
window.show();
});
tray.setToolTip('Better ChatGPT');
tray.setContextMenu(contextMenu);
return tray;
};
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
const createServer = () => {
// Dependencies
const http = require('http');
const fs = require('fs');
const path = require('path');
// MIME types for different file extensions
const mimeTypes = {
'.html': 'text/html',
'.css': 'text/css',
'.js': 'text/javascript',
'.wasm': 'application/wasm',
'.jpg': 'image/jpeg',
'.jpeg': 'image/jpeg',
'.png': 'image/png',
'.gif': 'image/gif',
'.svg': 'image/svg+xml',
'.json': 'application/json',
};
// Create a http server
const server = http.createServer((request, response) => {
// Get the file path from the URL
let filePath =
2023-04-16 18:34:56 +02:00
request.url === '/'
? `${path.join(__dirname, '../dist/index.html')}`
: `${path.join(__dirname, `../dist/${request.url}`)}`;
// Get the file extension from the filePath
let extname = path.extname(filePath);
// Set the default MIME type to text/plain
let contentType = 'text/plain';
// Check if the file extension is in the MIME types object
if (extname in mimeTypes) {
contentType = mimeTypes[extname];
}
// Read the file from the disk
fs.readFile(filePath, (error, content) => {
if (error) {
// If file read error occurs
if (error.code === 'ENOENT') {
// File not found error
response.writeHead(404);
response.end('File Not Found');
} else {
// Server error
response.writeHead(500);
response.end(`Server Error: ${error.code}`);
}
} else {
// File read successful
response.writeHead(200, { 'Content-Type': contentType });
response.end(content, 'utf-8');
}
});
});
// Listen for request on port ${PORT}
server.listen(PORT, () => {
console.log(`Server listening on http://localhost:${PORT}/`);
});
};