converse.rs/modules/menu-service.js
2025-05-16 11:34:46 -07:00

178 lines
6.9 KiB
JavaScript

/**
* Module for Menu functions.
*/
import { app, Menu, MenuItem, dialog } from 'electron';
import path from 'path';
import { fileURLToPath } from 'url';
import settingsService from './settings-service.js';
import { mainWindow } from '../main.js'; // this is bad practice, however i dont have any other good way of doing it
let zoom = 1;
const menuService = {};
menuService.createMenu = (window) => {
let converse;
const application = new Menu();
application.append(new MenuItem({
label: 'RS Desktop',
submenu: (converse = Menu.buildFromTemplate([
{
label: 'Reconnect',
accelerator: 'CmdOrCtrl+R',
click: () => {
window.show();
window.loadFile('index.html').catch((reason) => {
console.log(reason);
app.isQuitting = true;
app.quit();
});
}
},
{ type: 'separator' },
{
label: 'Minimize on close',
type: 'checkbox',
id: 'minimize-on-close',
checked: settingsService.get('minimizeOnClose'),
click: () => {
settingsService.set('minimizeOnClose', converse.getMenuItemById('minimize-on-close').checked);
}
},
{
label: 'Hide Menubar',
type: 'checkbox',
id: 'hide-menubar',
checked: settingsService.get('hideMenubar'),
accelerator: 'alt', // just felt like this would be a good addition in case the user accidentally hides the alt bar
click: () => {
const menuItem = converse.getMenuItemById('hide-menubar');
settingsService.set('hideMenubar', menuItem.checked);
window.setAutoHideMenuBar(menuItem.checked);
}
},
{
label: 'Encrypt by default',
type: 'checkbox',
id: 'encrypt-by-default',
checked: settingsService.get('omemo_default'),
click: () => {
const menuItem = converse.getMenuItemById('encrypt-by-default');
settingsService.set('omemo_default', menuItem.checked);
}
},
{ type: 'separator' },
{
label: 'Help', // migrate this here
submenu: Menu.buildFromTemplate([
{
label: 'Debug info',
accelerator: 'F12',
click: () => {
window.webContents.openDevTools();
}
},
])},
{
label: 'Navigation', // migrate this here
submenu: Menu.buildFromTemplate([
{
label: '<',
accelerator: 'Alt+Left', // for this it was alt left arrow key
click() {
if (mainWindow.webContents.canGoBack()) {
mainWindow.webContents.goBack();
}
}
},
{
label: '>',
accelerator: 'Alt+Right', // shortcut for this was alt and right arrow key i think
click() {
if (mainWindow.webContents.canGoForward()) {
mainWindow.webContents.goForward();
}
}
},
{
label: '🔄',
click() {
mainWindow.reload();
}
},
])},
{ type: 'separator' },
{
label: 'Reset Zoom',
accelerator: 'Ctrl+0', // shortcut like in chrome/firefox
click() {
zoom = 1
mainWindow.webContents.setZoomFactor(zoom)
}
},
{ type: 'separator' },
{
label: 'Quit',
accelerator: 'CmdOrCtrl+Q',
click: () => {
app.isQuitting = true;
app.quit();
},
},
]))
}));
application.append(new MenuItem({
label: 'Edit', // i dont know what the point of this is, we have keyboards and they use the same shortcuts, but i will leave this alone for now
submenu: Menu.buildFromTemplate([
{ label: 'Undo', accelerator: 'CmdOrCtrl+Z', role: 'undo' },
{ label: 'Redo', accelerator: 'Shift+CmdOrCtrl+Z', role: 'redo' },
{ label: 'Cut', accelerator: 'CmdOrCtrl+X', role: 'cut' },
{ label: 'Copy', accelerator: 'CmdOrCtrl+C', role: 'copy' },
{ label: 'Paste', accelerator: 'CmdOrCtrl+V', role: 'paste' },
{ label: 'Select All', accelerator: 'CmdOrCtrl+A', role: 'selectAll' },
])
}));
application.append(new MenuItem({
label: 'Themes',
submenu: Menu.buildFromTemplate([
{
label: 'Coming soon',
click: () => {
window.webContents.openDevTools(); // TODO: theme switching
}
// {
/// label: 'Night',
// click: () => {
// window.webContents.openDevTools(); // TODO: proper dark mode
// }
// },
// {
// label: 'Orange',
// click: () => {
// window.webContents.openDevTools(); // Orange & white theme
// }
// },
// {
//// label: 'Orange + Night',
// click: () => {
// window.webContents.openDevTools(); // Orange & dark theme
// }
// },
// {
// label: 'Fruit Tiger Aero',
// // click: () => {
// window.webContents.openDevTools(); // Blue & green theme
}
])
}));
Menu.setApplicationMenu(application);
};
export default menuService;