diff --git a/src/common/__tests__/base-store.test.ts b/src/common/__tests__/base-store.test.ts index 07cea7039e..92097f4976 100644 --- a/src/common/__tests__/base-store.test.ts +++ b/src/common/__tests__/base-store.test.ts @@ -14,7 +14,7 @@ import { getDiForUnitTesting } from "../../main/getDiForUnitTesting"; import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable"; import appVersionInjectable - from "../get-configuration-file-model/app-version/app-version.injectable"; + from "../vars/app-version.injectable"; jest.mock("electron", () => ({ ipcMain: { diff --git a/src/common/__tests__/cluster-store.test.ts b/src/common/__tests__/cluster-store.test.ts index ccc2d897b9..4ad3ef0481 100644 --- a/src/common/__tests__/cluster-store.test.ts +++ b/src/common/__tests__/cluster-store.test.ts @@ -23,7 +23,7 @@ import { createClusterInjectionToken } from "../cluster/create-cluster-injection import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; import { getDiForUnitTesting } from "../../main/getDiForUnitTesting"; import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable"; -import appVersionInjectable from "../get-configuration-file-model/app-version/app-version.injectable"; +import appVersionInjectable from "../vars/app-version.injectable"; console = new Console(stdout, stderr); diff --git a/src/common/__tests__/hotbar-store.test.ts b/src/common/__tests__/hotbar-store.test.ts index 9bc12d103d..b05495c0a5 100644 --- a/src/common/__tests__/hotbar-store.test.ts +++ b/src/common/__tests__/hotbar-store.test.ts @@ -9,7 +9,7 @@ import logger from "../../main/logger"; import type { CatalogEntity, CatalogEntityData, CatalogEntityKindData } from "../catalog"; import { getDiForUnitTesting } from "../../main/getDiForUnitTesting"; import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable"; -import appVersionInjectable from "../get-configuration-file-model/app-version/app-version.injectable"; +import appVersionInjectable from "../vars/app-version.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; import hotbarStoreInjectable from "../hotbar-store.injectable"; import { HotbarStore } from "../hotbar-store"; diff --git a/src/common/__tests__/user-store.test.ts b/src/common/__tests__/user-store.test.ts index 9fb3713be1..22e550a925 100644 --- a/src/common/__tests__/user-store.test.ts +++ b/src/common/__tests__/user-store.test.ts @@ -36,7 +36,7 @@ import { getDiForUnitTesting } from "../../main/getDiForUnitTesting"; import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable"; import appVersionInjectable - from "../get-configuration-file-model/app-version/app-version.injectable"; + from "../vars/app-version.injectable"; console = new Console(stdout, stderr); diff --git a/src/common/app-paths/app-paths.test.ts b/src/common/app-paths/app-paths.test.ts index b436426e2e..1665fa689c 100644 --- a/src/common/app-paths/app-paths.test.ts +++ b/src/common/app-paths/app-paths.test.ts @@ -9,7 +9,7 @@ import getElectronAppPathInjectable from "../../main/app-paths/get-electron-app- import { getDisForUnitTesting } from "../../test-utils/get-dis-for-unit-testing"; import type { PathName } from "./app-path-names"; import setElectronAppPathInjectable from "../../main/app-paths/set-electron-app-path/set-electron-app-path.injectable"; -import appNameInjectable from "../../main/app-paths/app-name/app-name.injectable"; +import appNameInjectable from "../../main/vars/app-name.injectable"; import directoryForIntegrationTestingInjectable from "../../main/app-paths/directory-for-integration-testing/directory-for-integration-testing.injectable"; describe("app-paths", () => { diff --git a/src/common/get-configuration-file-model/get-configuration-file-model.injectable.ts b/src/common/get-configuration-file-model/get-configuration-file-model.injectable.ts index 41eeca1ce7..f38a721b96 100644 --- a/src/common/get-configuration-file-model/get-configuration-file-model.injectable.ts +++ b/src/common/get-configuration-file-model/get-configuration-file-model.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import Config from "conf"; import type { BaseStoreParams } from "../base-store"; -import appVersionInjectable from "./app-version/app-version.injectable"; +import appVersionInjectable from "../vars/app-version.injectable"; import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; const getConfigurationFileModelInjectable = getInjectable({ diff --git a/src/common/get-configuration-file-model/app-version/app-version.injectable.ts b/src/common/vars/app-version.injectable.ts similarity index 87% rename from src/common/get-configuration-file-model/app-version/app-version.injectable.ts rename to src/common/vars/app-version.injectable.ts index 0fe3142332..3109528823 100644 --- a/src/common/get-configuration-file-model/app-version/app-version.injectable.ts +++ b/src/common/vars/app-version.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import packageInfo from "../../../../package.json"; +import packageInfo from "../../../package.json"; const appVersionInjectable = getInjectable({ id: "app-version", diff --git a/src/common/vars/chrome-version.injectable.ts b/src/common/vars/chrome-version.injectable.ts new file mode 100644 index 0000000000..dc2c29c2fd --- /dev/null +++ b/src/common/vars/chrome-version.injectable.ts @@ -0,0 +1,13 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; + +const chromeVersionInjectable = getInjectable({ + id: "chrome-version", + instantiate: () => process.versions.chrome, + causesSideEffects: true, +}); + +export default chromeVersionInjectable; diff --git a/src/common/vars/copyright-declaration.injectable.ts b/src/common/vars/copyright-declaration.injectable.ts new file mode 100644 index 0000000000..f461da5bbb --- /dev/null +++ b/src/common/vars/copyright-declaration.injectable.ts @@ -0,0 +1,14 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import packageInfo from "../../../package.json"; + +const copyrightDeclarationInjectable = getInjectable({ + id: "copyright-declaration", + instantiate: () => packageInfo.copyright, + causesSideEffects: true, +}); + +export default copyrightDeclarationInjectable; diff --git a/src/common/vars/electron-version.injectable.ts b/src/common/vars/electron-version.injectable.ts new file mode 100644 index 0000000000..0a9e26dc8e --- /dev/null +++ b/src/common/vars/electron-version.injectable.ts @@ -0,0 +1,13 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; + +const electronVersionInjectable = getInjectable({ + id: "electron-version", + instantiate: () => process.versions.electron, + causesSideEffects: true, +}); + +export default electronVersionInjectable; diff --git a/src/common/vars/node-version.injectable.ts b/src/common/vars/node-version.injectable.ts new file mode 100644 index 0000000000..654578c25e --- /dev/null +++ b/src/common/vars/node-version.injectable.ts @@ -0,0 +1,13 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; + +const nodeVersionInjectable = getInjectable({ + id: "node-version", + instantiate: () => process.versions.node, + causesSideEffects: true, +}); + +export default nodeVersionInjectable; diff --git a/src/main/__test__/kube-auth-proxy.test.ts b/src/main/__test__/kube-auth-proxy.test.ts index 36af031ecf..a690e9eda4 100644 --- a/src/main/__test__/kube-auth-proxy.test.ts +++ b/src/main/__test__/kube-auth-proxy.test.ts @@ -56,7 +56,7 @@ import { createClusterInjectionToken } from "../../common/cluster/create-cluster import path from "path"; import spawnInjectable from "../child-process/spawn.injectable"; import getConfigurationFileModelInjectable from "../../common/get-configuration-file-model/get-configuration-file-model.injectable"; -import appVersionInjectable from "../../common/get-configuration-file-model/app-version/app-version.injectable"; +import appVersionInjectable from "../../common/vars/app-version.injectable"; console = new Console(stdout, stderr); diff --git a/src/main/app-paths/app-paths.injectable.ts b/src/main/app-paths/app-paths.injectable.ts index 342c32252d..cb2792bd3f 100644 --- a/src/main/app-paths/app-paths.injectable.ts +++ b/src/main/app-paths/app-paths.injectable.ts @@ -17,7 +17,7 @@ import registerChannelInjectable from "./register-channel/register-channel.injec import { getAppPaths } from "./get-app-paths"; import getElectronAppPathInjectable from "./get-electron-app-path/get-electron-app-path.injectable"; import setElectronAppPathInjectable from "./set-electron-app-path/set-electron-app-path.injectable"; -import appNameInjectable from "./app-name/app-name.injectable"; +import appNameInjectable from "../vars/app-name.injectable"; import directoryForIntegrationTestingInjectable from "./directory-for-integration-testing/directory-for-integration-testing.injectable"; import joinPathsInjectable from "../../common/path/join-paths.injectable"; diff --git a/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts b/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts index 782c6e5950..c60012005a 100644 --- a/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts +++ b/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts @@ -19,7 +19,7 @@ import { ClusterStore } from "../../../common/cluster-store/cluster-store"; import getConfigurationFileModelInjectable from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable"; import appVersionInjectable - from "../../../common/get-configuration-file-model/app-version/app-version.injectable"; + from "../../../common/vars/app-version.injectable"; jest.mock("electron", () => ({ app: { diff --git a/src/main/electron/show-message-box.injectable.ts b/src/main/electron/show-message-box.injectable.ts new file mode 100644 index 0000000000..6ee6a18e4d --- /dev/null +++ b/src/main/electron/show-message-box.injectable.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { BrowserWindow, dialog, MessageBoxOptions, MessageBoxReturnValue } from "electron"; + +export type ShowMessageBox = (browserWindow: BrowserWindow, options: MessageBoxOptions) => Promise; + +const showMessageBoxInjectable = getInjectable({ + id: "show-message-box", + instantiate: (): ShowMessageBox => (bw, opts) => dialog.showMessageBox(bw, opts), + causesSideEffects: true, +}); + +export default showMessageBoxInjectable; diff --git a/src/main/electron/write-text-to-clipboard.injectable.ts b/src/main/electron/write-text-to-clipboard.injectable.ts new file mode 100644 index 0000000000..581114b637 --- /dev/null +++ b/src/main/electron/write-text-to-clipboard.injectable.ts @@ -0,0 +1,16 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { clipboard } from "electron"; + +export type WriteTextToClipboard = (contents: string) => void; + +const writeTextToClipboardInjectable = getInjectable({ + id: "write-text-to-clipboard", + instantiate: (): WriteTextToClipboard => contents => clipboard.writeText(contents), + causesSideEffects: true, +}); + +export default writeTextToClipboardInjectable; diff --git a/src/main/getDiForUnitTesting.ts b/src/main/getDiForUnitTesting.ts index b1306457c5..fbfb2eb0bd 100644 --- a/src/main/getDiForUnitTesting.ts +++ b/src/main/getDiForUnitTesting.ts @@ -10,7 +10,7 @@ import { createContainer } from "@ogre-tools/injectable"; import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import getElectronAppPathInjectable from "./app-paths/get-electron-app-path/get-electron-app-path.injectable"; import setElectronAppPathInjectable from "./app-paths/set-electron-app-path/set-electron-app-path.injectable"; -import appNameInjectable from "./app-paths/app-name/app-name.injectable"; +import appNameInjectable from "./vars/app-name.injectable"; import registerChannelInjectable from "./app-paths/register-channel/register-channel.injectable"; import writeJsonFileInjectable from "../common/fs/write-json-file.injectable"; import readJsonFileInjectable from "../common/fs/read-json-file.injectable"; diff --git a/src/main/menu/application-menu-items.injectable.ts b/src/main/menu/application-menu-items.injectable.ts index 83d2d9536a..ba839f7b87 100644 --- a/src/main/menu/application-menu-items.injectable.ts +++ b/src/main/menu/application-menu-items.injectable.ts @@ -8,7 +8,6 @@ import { docsUrl, productName, supportUrl } from "../../common/vars"; import { exitApp } from "../exit-app"; import { broadcastMessage } from "../../common/ipc"; import { openBrowser } from "../../common/utils"; -import { showAbout } from "./menu"; import windowManagerInjectable from "../window-manager.injectable"; import type { BrowserWindow, @@ -18,7 +17,7 @@ import { webContents, } from "electron"; import loggerInjectable from "../../common/logger.injectable"; -import appNameInjectable from "../app-paths/app-name/app-name.injectable"; +import appNameInjectable from "../vars/app-name.injectable"; import electronMenuItemsInjectable from "./electron-menu-items.injectable"; import isAutoUpdateEnabledInjectable from "../is-auto-update-enabled.injectable"; import navigateToPreferencesInjectable from "../../common/front-end-routing/routes/preferences/navigate-to-preferences.injectable"; @@ -28,6 +27,7 @@ import navigateToWelcomeInjectable from "../../common/front-end-routing/routes/w import navigateToAddClusterInjectable from "../../common/front-end-routing/routes/add-cluster/navigate-to-add-cluster.injectable"; import isMacInjectable from "../../common/vars/is-mac.injectable"; import { computed } from "mobx"; +import showAboutInjectable from "./show-about.injectable"; function ignoreIf(check: boolean, menuItems: MenuItemConstructorOptions[]) { return check ? [] : menuItems; @@ -46,6 +46,7 @@ const applicationMenuItemsInjectable = getInjectable({ const isMac = di.inject(isMacInjectable); const isAutoUpdateEnabled = di.inject(isAutoUpdateEnabledInjectable); const electronMenuItems = di.inject(electronMenuItemsInjectable); + const showAbout = di.inject(showAboutInjectable); return computed((): MenuItemOpts[] => { @@ -70,8 +71,7 @@ const applicationMenuItemsInjectable = getInjectable({ label: `About ${productName}`, id: "about", click(menuItem: MenuItem, browserWindow: BrowserWindow) { - showAbout(browserWindow) - .catch(error => logger.error(`[MENU]: Failed to show Lens About view`, { error })); + showAbout(browserWindow); }, }, ...ignoreIf(autoUpdateDisabled, [ @@ -288,8 +288,7 @@ const applicationMenuItemsInjectable = getInjectable({ label: `About ${productName}`, id: "about", click(menuItem: MenuItem, browserWindow: BrowserWindow) { - showAbout(browserWindow) - .catch(error => logger.error(`[MENU]: Failed to show Lens About view`, { error })); + showAbout(browserWindow); }, }, ...ignoreIf(autoUpdateDisabled, [ diff --git a/src/main/menu/menu.ts b/src/main/menu/menu.ts index 5342633aab..47e39fd5d8 100644 --- a/src/main/menu/menu.ts +++ b/src/main/menu/menu.ts @@ -2,12 +2,9 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { BrowserWindow } from "electron"; -import { app, clipboard, dialog, Menu } from "electron"; +import { Menu } from "electron"; import type { IComputedValue } from "mobx"; import { autorun } from "mobx"; -import { appName, isWindows, productName } from "../../common/vars"; -import packageJson from "../../../package.json"; import type { MenuItemOpts } from "./application-menu-items.injectable"; export type MenuTopId = "mac" | "file" | "edit" | "view" | "help"; @@ -20,30 +17,6 @@ export function initMenu( }); } -export async function showAbout(browserWindow: BrowserWindow) { - const appInfo = [ - `${appName}: ${app.getVersion()}`, - `Electron: ${process.versions.electron}`, - `Chrome: ${process.versions.chrome}`, - `Node: ${process.versions.node}`, - packageJson.copyright, - ].join("\n"); - - const result = await dialog.showMessageBox(browserWindow, { - title: `${isWindows ? " ".repeat(2) : ""}${appName}`, - type: "info", - buttons: ["Close", "Copy"], - message: productName, - detail: appInfo, - cancelId: 0, - defaultId: 0, - }); - - if (result.response === 0) { - clipboard.writeText(appInfo); - } -} - export function buildMenu( applicationMenuItems: MenuItemOpts[], ) { diff --git a/src/main/menu/show-about.injectable.ts b/src/main/menu/show-about.injectable.ts new file mode 100644 index 0000000000..ad9f9fb26b --- /dev/null +++ b/src/main/menu/show-about.injectable.ts @@ -0,0 +1,92 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import type { BrowserWindow } from "electron"; +import type { Logger } from "../../common/logger"; +import loggerInjectable from "../../common/logger.injectable"; +import appVersionInjectable from "../../common/vars/app-version.injectable"; +import chromeVersionInjectable from "../../common/vars/chrome-version.injectable"; +import copyrightDeclarationInjectable from "../../common/vars/copyright-declaration.injectable"; +import electronVersionInjectable from "../../common/vars/electron-version.injectable"; +import isWindowsInjectable from "../../common/vars/is-windows.injectable"; +import nodeVersionInjectable from "../../common/vars/node-version.injectable"; +import showMessageBoxInjectable, { ShowMessageBox } from "../electron/show-message-box.injectable"; +import writeTextToClipboardInjectable, { WriteTextToClipboard } from "../electron/write-text-to-clipboard.injectable"; +import appNameInjectable from "../vars/app-name.injectable"; + +export type ShowAbout = (browserWindow: BrowserWindow) => void; + +interface Dependencies { + showMessageBox: ShowMessageBox; + writeTextToClipboard: WriteTextToClipboard; + appName: string; + appVersion: string; + copyrightDeclaration: string; + electronVersion: string; + chromeVersion: string; + nodeVersion: string; + isWindows: boolean; + logger: Logger; +} + +const showAboutFactory = ({ + showMessageBox, + writeTextToClipboard, + appName, + appVersion, + copyrightDeclaration, + electronVersion, + chromeVersion, + nodeVersion, + isWindows, + logger, +}: Dependencies): ShowAbout => ( + function showAbout(browserWindow) { + const appInfo = [ + `${appName}: ${appVersion}`, + `Electron: ${electronVersion}`, + `Chrome: ${chromeVersion}`, + `Node: ${nodeVersion}`, + copyrightDeclaration, + ].join("\n"); + + showMessageBox(browserWindow, { + title: `${isWindows ? " ".repeat(2) : ""}${appName}`, + type: "info", + buttons: ["Close", "Copy"], + message: appName, + detail: appInfo, + cancelId: 0, + defaultId: 0, + }) + .then(({ response }) => { + /** + * response is the index into the `buttons` array provided to `dialog.showMessageBox` + */ + if (response === 0) { + writeTextToClipboard(appInfo); + } + }) + .catch(error => logger.error("[SHOW-ABOUT]: failed to show about message", error)); + } +); + +const showAboutInjectable = getInjectable({ + id: "show-about", + instantiate: (di) => showAboutFactory({ + showMessageBox: di.inject(showMessageBoxInjectable), + writeTextToClipboard: di.inject(writeTextToClipboardInjectable), + appName: di.inject(appNameInjectable), + appVersion: di.inject(appVersionInjectable), + copyrightDeclaration: di.inject(copyrightDeclarationInjectable), + chromeVersion: di.inject(chromeVersionInjectable), + electronVersion: di.inject(electronVersionInjectable), + isWindows: di.inject(isWindowsInjectable), + logger: di.inject(loggerInjectable), + nodeVersion: di.inject(nodeVersionInjectable), + }), +}); + +export default showAboutInjectable; diff --git a/src/main/menu/show-about.test.ts b/src/main/menu/show-about.test.ts new file mode 100644 index 0000000000..f10483256f --- /dev/null +++ b/src/main/menu/show-about.test.ts @@ -0,0 +1,55 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { waitFor } from "@testing-library/react"; +import appVersionInjectable from "../../common/vars/app-version.injectable"; +import chromeVersionInjectable from "../../common/vars/chrome-version.injectable"; +import copyrightDeclarationInjectable from "../../common/vars/copyright-declaration.injectable"; +import electronVersionInjectable from "../../common/vars/electron-version.injectable"; +import nodeVersionInjectable from "../../common/vars/node-version.injectable"; +import type { ShowMessageBox } from "../electron/show-message-box.injectable"; +import showMessageBoxInjectable from "../electron/show-message-box.injectable"; +import type { WriteTextToClipboard } from "../electron/write-text-to-clipboard.injectable"; +import writeTextToClipboardInjectable from "../electron/write-text-to-clipboard.injectable"; +import { getDiForUnitTesting } from "../getDiForUnitTesting"; +import appNameInjectable from "../vars/app-name.injectable"; +import type { ShowAbout } from "./show-about.injectable"; +import showAboutInjectable from "./show-about.injectable"; + +describe("showAbout tests", () => { + let showAbout: ShowAbout; + let showMessageBox: jest.MockedFunction; + let writeTextToClipboard: jest.MockedFunction; + + beforeEach(() => { + const di = getDiForUnitTesting({ doGeneralOverrides: true }); + + showMessageBox = jest.fn(); + writeTextToClipboard = jest.fn(); + + di.override(showMessageBoxInjectable, () => showMessageBox); + di.override(writeTextToClipboardInjectable, () => writeTextToClipboard); + di.override(appNameInjectable, () => "lens"); + di.override(appVersionInjectable, () => "some-app-version"); + di.override(copyrightDeclarationInjectable, () => "some copyright declaration"); + di.override(electronVersionInjectable, () => "some-electron-version"); + di.override(chromeVersionInjectable, () => "some-chrome-version"); + di.override(nodeVersionInjectable, () => "some-node-version"); + + showAbout = di.inject(showAboutInjectable); + }); + + it("should write the contents to the clipboard when the copy button is clicked", async () => { + showMessageBox.mockImplementationOnce(() => Promise.resolve({ response: 0, checkboxChecked: false })); + showAbout(null); + await waitFor(() => expect(writeTextToClipboard).toBeCalledWith([ + "lens: some-app-version", + "Electron: some-electron-version", + "Chrome: some-chrome-version", + "Node: some-node-version", + "some copyright declaration", + ].join("\n"))); + }); +}); diff --git a/src/main/protocol-handler/__test__/router.test.ts b/src/main/protocol-handler/__test__/router.test.ts index d8c88f7f22..7d2ed0c305 100644 --- a/src/main/protocol-handler/__test__/router.test.ts +++ b/src/main/protocol-handler/__test__/router.test.ts @@ -17,7 +17,7 @@ import extensionLoaderInjectable from "../../../extensions/extension-loader/exte import lensProtocolRouterMainInjectable from "../lens-protocol-router-main/lens-protocol-router-main.injectable"; import extensionsStoreInjectable from "../../../extensions/extensions-store/extensions-store.injectable"; import getConfigurationFileModelInjectable from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable"; -import appVersionInjectable from "../../../common/get-configuration-file-model/app-version/app-version.injectable"; +import appVersionInjectable from "../../../common/vars/app-version.injectable"; jest.mock("../../../common/ipc"); diff --git a/src/main/tray/tray.ts b/src/main/tray/tray.ts index af129ac27a..8515354dc3 100644 --- a/src/main/tray/tray.ts +++ b/src/main/tray/tray.ts @@ -8,7 +8,6 @@ import type { NativeImage } from "electron"; import { Menu, nativeImage, nativeTheme, Tray } from "electron"; import type { IComputedValue } from "mobx"; import { autorun } from "mobx"; -import { showAbout } from "../menu/menu"; import { checkForUpdates, isAutoUpdateEnabled } from "../app-updater"; import type { WindowManager } from "../window-manager"; import logger from "../logger"; @@ -21,6 +20,7 @@ import sharp from "sharp"; import LogoLens from "../../renderer/components/icon/logo-lens.svg"; import { JSDOM } from "jsdom"; +import type { ShowAbout } from "../menu/show-about.injectable"; const TRAY_LOG_PREFIX = "[TRAY]"; @@ -80,6 +80,7 @@ export async function initTray( windowManager: WindowManager, trayMenuItems: IComputedValue, navigateToPreferences: () => void, + showAbout: ShowAbout, ): Promise { const icon = await createCurrentTrayIcon(); const dispose = disposer(); @@ -101,7 +102,12 @@ export async function initTray( dispose.push( autorun(() => { try { - const menu = createTrayMenu(windowManager, toJS(trayMenuItems.get()), navigateToPreferences); + const menu = createTrayMenu( + windowManager, + toJS(trayMenuItems.get()), + navigateToPreferences, + showAbout, + ); tray.setContextMenu(menu); } catch (error) { @@ -131,6 +137,7 @@ function createTrayMenu( windowManager: WindowManager, extensionTrayItems: TrayMenuRegistration[], navigateToPreferences: () => void, + showAbout: ShowAbout, ): Menu { let template: Electron.MenuItemConstructorOptions[] = [ { diff --git a/src/main/app-paths/app-name/app-name.injectable.ts b/src/main/vars/app-name.injectable.ts similarity index 77% rename from src/main/app-paths/app-name/app-name.injectable.ts rename to src/main/vars/app-name.injectable.ts index 4ba900d410..4d9135e787 100644 --- a/src/main/app-paths/app-name/app-name.injectable.ts +++ b/src/main/vars/app-name.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import electronAppInjectable from "../get-electron-app-path/electron-app/electron-app.injectable"; +import electronAppInjectable from "../app-paths/get-electron-app-path/electron-app/electron-app.injectable"; const appNameInjectable = getInjectable({ id: "app-name", diff --git a/src/renderer/components/+catalog/catalog.test.tsx b/src/renderer/components/+catalog/catalog.test.tsx index 9a481d9535..e96f37f346 100644 --- a/src/renderer/components/+catalog/catalog.test.tsx +++ b/src/renderer/components/+catalog/catalog.test.tsx @@ -24,7 +24,7 @@ import { UserStore } from "../../../common/user-store"; import mockFs from "mock-fs"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import getConfigurationFileModelInjectable from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable"; -import appVersionInjectable from "../../../common/get-configuration-file-model/app-version/app-version.injectable"; +import appVersionInjectable from "../../../common/vars/app-version.injectable"; import type { AppEvent } from "../../../common/app-event-bus/event-bus"; import appEventBusInjectable from "../../../common/app-event-bus/app-event-bus.injectable"; diff --git a/src/renderer/components/+extensions/__tests__/extensions.test.tsx b/src/renderer/components/+extensions/__tests__/extensions.test.tsx index a29e9bb004..1874c6fc00 100644 --- a/src/renderer/components/+extensions/__tests__/extensions.test.tsx +++ b/src/renderer/components/+extensions/__tests__/extensions.test.tsx @@ -24,7 +24,7 @@ import directoryForDownloadsInjectable from "../../../../common/app-paths/direct import getConfigurationFileModelInjectable from "../../../../common/get-configuration-file-model/get-configuration-file-model.injectable"; import appVersionInjectable - from "../../../../common/get-configuration-file-model/app-version/app-version.injectable"; + from "../../../../common/vars/app-version.injectable"; mockWindow(); diff --git a/src/renderer/components/dock/__test__/dock-tabs.test.tsx b/src/renderer/components/dock/__test__/dock-tabs.test.tsx index 6408b4d352..2edd45c3a1 100644 --- a/src/renderer/components/dock/__test__/dock-tabs.test.tsx +++ b/src/renderer/components/dock/__test__/dock-tabs.test.tsx @@ -22,7 +22,7 @@ import directoryForUserDataInjectable import getConfigurationFileModelInjectable from "../../../../common/get-configuration-file-model/get-configuration-file-model.injectable"; import appVersionInjectable - from "../../../../common/get-configuration-file-model/app-version/app-version.injectable"; + from "../../../../common/vars/app-version.injectable"; jest.mock("electron", () => ({ app: { diff --git a/src/renderer/components/dock/logs/__test__/log-resource-selector.test.tsx b/src/renderer/components/dock/logs/__test__/log-resource-selector.test.tsx index fcbd1f1382..a014e8b5fd 100644 --- a/src/renderer/components/dock/logs/__test__/log-resource-selector.test.tsx +++ b/src/renderer/components/dock/logs/__test__/log-resource-selector.test.tsx @@ -25,7 +25,7 @@ import { SearchStore } from "../../../../search-store/search-store"; import getConfigurationFileModelInjectable from "../../../../../common/get-configuration-file-model/get-configuration-file-model.injectable"; import appVersionInjectable - from "../../../../../common/get-configuration-file-model/app-version/app-version.injectable"; + from "../../../../../common/vars/app-version.injectable"; jest.mock("electron", () => ({ app: { diff --git a/src/renderer/components/hotbar/__tests__/hotbar-remove-command.test.tsx b/src/renderer/components/hotbar/__tests__/hotbar-remove-command.test.tsx index 0d4c6491b1..f836dbdc90 100644 --- a/src/renderer/components/hotbar/__tests__/hotbar-remove-command.test.tsx +++ b/src/renderer/components/hotbar/__tests__/hotbar-remove-command.test.tsx @@ -18,7 +18,7 @@ import { UserStore } from "../../../../common/user-store"; import mockFs from "mock-fs"; import directoryForUserDataInjectable from "../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import getConfigurationFileModelInjectable from "../../../../common/get-configuration-file-model/get-configuration-file-model.injectable"; -import appVersionInjectable from "../../../../common/get-configuration-file-model/app-version/app-version.injectable"; +import appVersionInjectable from "../../../../common/vars/app-version.injectable"; import type { HotbarStore } from "../../../../common/hotbar-store"; const mockHotbars: { [id: string]: any } = { diff --git a/src/renderer/components/select/select.test.tsx b/src/renderer/components/select/select.test.tsx index ee5252e8d9..387c7ec290 100644 --- a/src/renderer/components/select/select.test.tsx +++ b/src/renderer/components/select/select.test.tsx @@ -17,7 +17,7 @@ import rendererExtensionsInjectable from "../../../extensions/renderer-extension import { computed } from "mobx"; import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; import getConfigurationFileModelInjectable from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable"; -import appVersionInjectable from "../../../common/get-configuration-file-model/app-version/app-version.injectable"; +import appVersionInjectable from "../../../common/vars/app-version.injectable"; jest.mock("electron", () => ({ ipcRenderer: {