Upload files to "modules"
This commit is contained in:
parent
a989a9bc98
commit
a10d10330a
177
modules/menu-service.js
Normal file
177
modules/menu-service.js
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
/**
|
||||||
|
* 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;
|
30
modules/settings-service.js
Normal file
30
modules/settings-service.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/**
|
||||||
|
* Module for getting settings in Main process.
|
||||||
|
*/
|
||||||
|
import electronSettings from 'electron-settings';
|
||||||
|
|
||||||
|
const settingsService = {
|
||||||
|
get(itemKey) {
|
||||||
|
const settingValue = electronSettings.getSync(itemKey);
|
||||||
|
return (typeof settingValue === 'undefined' || settingValue === null) ? false : settingValue;
|
||||||
|
},
|
||||||
|
|
||||||
|
set(itemKey, settingValue) {
|
||||||
|
electronSettings.setSync(itemKey, settingValue);
|
||||||
|
if (settingsService.webContents) {
|
||||||
|
settingsService.webContents.send('settings', 'changed', itemKey, settingValue);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
has(itemKey) {
|
||||||
|
return electronSettings.hasSync(itemKey);
|
||||||
|
},
|
||||||
|
|
||||||
|
unset(itemKey) {
|
||||||
|
electronSettings.unsetSync(itemKey);
|
||||||
|
},
|
||||||
|
|
||||||
|
webContents: null
|
||||||
|
};
|
||||||
|
|
||||||
|
export default settingsService;
|
52
modules/tray-service.js
Normal file
52
modules/tray-service.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/**
|
||||||
|
* Module for Tray functions.
|
||||||
|
*/
|
||||||
|
import { Tray } from 'electron';
|
||||||
|
import path from 'path';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
import { dirname, join } from 'path';
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
|
const __dirname = dirname(__filename);
|
||||||
|
|
||||||
|
let tray = null;
|
||||||
|
|
||||||
|
const trayService = {};
|
||||||
|
|
||||||
|
const getTrayServiceIcon = (withEnvelope = false) => {
|
||||||
|
let size;
|
||||||
|
if (process.platform === 'darwin' || process.platform === 'win32') {
|
||||||
|
size = '16x16';
|
||||||
|
} else {
|
||||||
|
size = '48x48';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (withEnvelope) {
|
||||||
|
return join(__dirname, '..', 'resources', 'images', 'tray', `envelope-${size}.png`);
|
||||||
|
} else {
|
||||||
|
return join(__dirname, '..', 'resources', 'images', `logo-${size}.png`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
trayService.initTray = (window) => {
|
||||||
|
const iconPath = getTrayServiceIcon();
|
||||||
|
tray = new Tray(iconPath);
|
||||||
|
tray.setToolTip('Converse Desktop');
|
||||||
|
tray.on('click', () => {
|
||||||
|
window.webContents.send('open-unread-chat');
|
||||||
|
trayService.hideEnvelope();
|
||||||
|
window.show();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
trayService.showEnvelope = () => {
|
||||||
|
const iconPath = getTrayServiceIcon(true);
|
||||||
|
tray.setImage(iconPath);
|
||||||
|
};
|
||||||
|
|
||||||
|
trayService.hideEnvelope = () => {
|
||||||
|
const iconPath = getTrayServiceIcon();
|
||||||
|
tray.setImage(iconPath);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default trayService;
|
Loading…
x
Reference in New Issue
Block a user