diff --git a/src/main/accounts.ts b/src/main/accounts.ts index fbcc08ac..efb905ef 100644 --- a/src/main/accounts.ts +++ b/src/main/accounts.ts @@ -8,7 +8,7 @@ import { } from './account-views' import { initOrUpdateAppMenu } from './menus/app' import config, { ConfigKey } from './config' -import { sendToMainWindow, getMainWindow } from './main-window' +import { sendToMainWindow, showMainWindow } from './main-window' import { initOrUpdateDockMenu } from './menus/dock' import { initOrUpdateTrayMenu } from './menus/tray' import { Account } from '../types' @@ -96,7 +96,7 @@ export function getAccountsMenuItems(withAccelerator?: boolean) { label, click() { selectAccount(id) - getMainWindow().show() + showMainWindow() }, accelerator: withAccelerator ? `CommandOrControl+${index + 1}` : undefined })) diff --git a/src/main/app.ts b/src/main/app.ts index 7367b96c..537c0638 100644 --- a/src/main/app.ts +++ b/src/main/app.ts @@ -1,6 +1,6 @@ import { app } from 'electron' import config, { ConfigKey } from './config' -import { getMainWindow } from './main-window' +import { getMainWindow, showMainWindow } from './main-window' import { sendToSelectedAccountView } from './account-views' import { appId } from '../constants' @@ -36,33 +36,17 @@ export async function initApp() { } app.on('second-instance', () => { - const mainWindow = getMainWindow() - - if (mainWindow) { - if (mainWindow.isMinimized()) { - mainWindow.restore() - } - - mainWindow.show() - } + showMainWindow() }) app.on('open-url', (_event, mailto) => { sendToSelectedAccountView('gmail:compose-mail', mailto.split(':')[1]) - const mainWindow = getMainWindow() - - if (mainWindow) { - mainWindow.show() - } + showMainWindow() }) app.on('activate', () => { - const mainWindow = getMainWindow() - - if (mainWindow) { - mainWindow.show() - } + showMainWindow() }) app.on('before-quit', () => { @@ -70,13 +54,11 @@ export async function initApp() { const mainWindow = getMainWindow() - if (mainWindow) { - config.set(ConfigKey.LastWindowState, { - bounds: mainWindow.getBounds(), - fullscreen: mainWindow.isFullScreen(), - maximized: mainWindow.isMaximized() - }) - } + config.set(ConfigKey.LastWindowState, { + bounds: mainWindow.getBounds(), + fullscreen: mainWindow.isFullScreen(), + maximized: mainWindow.isMaximized() + }) }) await app.whenReady() diff --git a/src/main/gmail.ts b/src/main/gmail.ts index 8abc432c..56a857ef 100644 --- a/src/main/gmail.ts +++ b/src/main/gmail.ts @@ -1,7 +1,7 @@ import { app, ipcMain, Notification } from 'electron' import { getAccountIdByViewId } from './account-views' import { getAccount, selectAccount } from './accounts' -import { getMainWindow, sendToMainWindow } from './main-window' +import { sendToMainWindow, showMainWindow } from './main-window' import config, { ConfigKey } from './config' import { is } from 'electron-util' import { updateTrayUnreadStatus } from './tray' @@ -94,9 +94,9 @@ export function newMailNotification( }) notification.on('click', () => { - accountViewWebContents.send('gmail:open-mail', messageId) + showMainWindow() selectAccount(account.id) - getMainWindow().show() + accountViewWebContents.send('gmail:open-mail', messageId) }) notification.show() diff --git a/src/main/main-window/index.ts b/src/main/main-window/index.ts index c9aeaf9f..e153e000 100644 --- a/src/main/main-window/index.ts +++ b/src/main/main-window/index.ts @@ -27,6 +27,19 @@ export function getMainWindow() { return mainWindow } +export function showMainWindow() { + if (!mainWindow) { + throw new Error('Main window is uninitialized or has been destroyed') + } + + if (mainWindow.isMinimized()) { + mainWindow.restore() + return + } + + mainWindow.show() +} + export function sendToMainWindow(channel: string, ...args: any[]) { if (mainWindow) { mainWindow.webContents.send(channel, ...args) @@ -154,7 +167,7 @@ export function createMainWindow(): void { mainWindow.webContents.on('dom-ready', () => { if (!shouldLaunchMinimized() && mainWindow) { - mainWindow.show() + showMainWindow() } }) diff --git a/src/main/menus/app.ts b/src/main/menus/app.ts index bcabd352..38eb9c19 100644 --- a/src/main/menus/app.ts +++ b/src/main/menus/app.ts @@ -28,7 +28,7 @@ import { isDefaultAccount, removeAccount } from '../accounts' -import { getMainWindow, sendToMainWindow } from '../main-window' +import { getMainWindow, sendToMainWindow, showMainWindow } from '../main-window' import { forEachAccountView, getSelectedAccountView, @@ -460,8 +460,7 @@ export function getAppMenu() { accelerator: 'Command+,', click() { sendToSelectedAccountView('gmail:go-to', 'settings') - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } }, { @@ -500,8 +499,7 @@ export function getAppMenu() { label: 'Compose', click() { sendToSelectedAccountView('gmail:compose-mail') - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } }, { @@ -524,8 +522,7 @@ export function getAppMenu() { click() { sendToMainWindow('add-account-request') hideAccountViews() - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } }, { @@ -535,8 +532,7 @@ export function getAppMenu() { if (selectedAccount) { sendToMainWindow('edit-account-request', selectedAccount) hideAccountViews() - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } } }, @@ -546,8 +542,7 @@ export function getAppMenu() { const selectedAccount = getSelectedAccount() if (selectedAccount) { - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() if (isDefaultAccount(selectedAccount.id)) { dialog.showMessageBox({ @@ -753,32 +748,28 @@ export function getAppMenu() { label: 'Inbox', click() { sendToSelectedAccountView('gmail:go-to', 'inbox') - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } }, { label: 'Important', click() { sendToSelectedAccountView('gmail:go-to', 'imp') - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } }, { label: 'Snoozed', click() { sendToSelectedAccountView('gmail:go-to', 'snoozed') - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } }, { label: 'Starred', click() { sendToSelectedAccountView('gmail:go-to', 'starred') - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } }, { @@ -788,24 +779,21 @@ export function getAppMenu() { label: 'Drafts', click() { sendToSelectedAccountView('gmail:go-to', 'drafts') - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } }, { label: 'Scheduled', click() { sendToSelectedAccountView('gmail:go-to', 'scheduled') - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } }, { label: 'Sent', click() { sendToSelectedAccountView('gmail:go-to', 'sent') - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } }, { @@ -815,8 +803,7 @@ export function getAppMenu() { label: 'All Mail', click() { sendToSelectedAccountView('gmail:go-to', 'all') - const mainWindow = getMainWindow() - mainWindow.show() + showMainWindow() } } ] diff --git a/src/main/menus/dock.ts b/src/main/menus/dock.ts index b9fb4dcb..8af321b8 100644 --- a/src/main/menus/dock.ts +++ b/src/main/menus/dock.ts @@ -1,14 +1,12 @@ import { app, Menu } from 'electron' import { is } from 'electron-util' import config, { ConfigKey } from '../config' -import { getMainWindow } from '../main-window' +import { showMainWindow } from '../main-window' import { sendToSelectedAccountView } from '../account-views' import { getAccountsMenuItems } from '../accounts' export function initOrUpdateDockMenu() { - const mainWindow = getMainWindow() - - if (is.macos && mainWindow) { + if (is.macos) { if (!config.get(ConfigKey.ShowDockIcon)) { app.dock.hide() } @@ -22,7 +20,7 @@ export function initOrUpdateDockMenu() { label: 'Compose', click() { sendToSelectedAccountView('gmail:compose-mail') - mainWindow.show() + showMainWindow() } }, { @@ -32,28 +30,28 @@ export function initOrUpdateDockMenu() { label: 'Inbox', click() { sendToSelectedAccountView('gmail:go-to', 'inbox') - mainWindow.show() + showMainWindow() } }, { label: 'Important', click() { sendToSelectedAccountView('gmail:go-to', 'imp') - mainWindow.show() + showMainWindow() } }, { label: 'Snoozed', click() { sendToSelectedAccountView('gmail:go-to', 'snoozed') - mainWindow.show() + showMainWindow() } }, { label: 'Starred', click() { sendToSelectedAccountView('gmail:go-to', 'starred') - mainWindow.show() + showMainWindow() } }, { @@ -63,21 +61,21 @@ export function initOrUpdateDockMenu() { label: 'Drafts', click() { sendToSelectedAccountView('gmail:go-to', 'drafts') - mainWindow.show() + showMainWindow() } }, { label: 'Scheduled', click() { sendToSelectedAccountView('gmail:go-to', 'scheduled') - mainWindow.show() + showMainWindow() } }, { label: 'Sent', click() { sendToSelectedAccountView('gmail:go-to', 'sent') - mainWindow.show() + showMainWindow() } }, { @@ -87,7 +85,7 @@ export function initOrUpdateDockMenu() { label: 'All Mail', click() { sendToSelectedAccountView('gmail:go-to', 'all') - mainWindow.show() + showMainWindow() } } ]) diff --git a/src/main/menus/tray.ts b/src/main/menus/tray.ts index 57634a3e..3b83bdad 100644 --- a/src/main/menus/tray.ts +++ b/src/main/menus/tray.ts @@ -3,7 +3,7 @@ import { shouldLaunchMinimized } from '../app' import { getAccountsMenuItems } from '../accounts' import { app, Menu, MenuItemConstructorOptions } from 'electron' import { is } from 'electron-util' -import { getMainWindow } from '../main-window' +import { getMainWindow, showMainWindow } from '../main-window' import { getTray } from '../tray' let trayMenu: Menu | undefined @@ -47,7 +47,7 @@ export function getTrayMenuTemplate() { }, { click: () => { - getMainWindow().show() + showMainWindow() }, label: 'Show', visible: shouldLaunchMinimized(), diff --git a/src/main/tray.ts b/src/main/tray.ts index 3bbd9c3d..aee46e98 100644 --- a/src/main/tray.ts +++ b/src/main/tray.ts @@ -2,7 +2,7 @@ import * as path from 'path' import { app, nativeImage, NativeImage, Tray } from 'electron' import { is } from 'electron-util' import config, { ConfigKey } from './config' -import { getMainWindow } from './main-window' +import { showMainWindow } from './main-window' import { getTrayMenu } from './menus/tray' let tray: Tray | undefined @@ -72,9 +72,6 @@ export function initTray() { tray.setToolTip(app.name) tray.on('click', () => { - const mainWindow = getMainWindow() - if (mainWindow) { - mainWindow.show() - } + showMainWindow() }) } diff --git a/src/main/updater.ts b/src/main/updater.ts index cef97079..2c75d5d5 100644 --- a/src/main/updater.ts +++ b/src/main/updater.ts @@ -5,7 +5,7 @@ import { CancellationToken, HttpError } from 'builder-util-runtime' import { is } from 'electron-util' import config, { ConfigKey } from './config' import { initOrUpdateAppMenu } from './menus/app' -import { getMainWindow, sendToMainWindow } from './main-window' +import { sendToMainWindow, showMainWindow } from './main-window' import { hideAccountViews, showAccountViews, @@ -139,8 +139,8 @@ export function initUpdater(): void { autoUpdater.on('update-available', (updateInfo: AppUpdateInfo) => { const skipUpdateVersion = config.get(ConfigKey.SkipUpdateVersion) if (updateInfo.version !== skipUpdateVersion) { + showMainWindow() showUpdateAvailable(updateInfo) - getMainWindow().show() } })