1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Implement naive notifications for version updates

Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com>

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
Janne Savolainen 2022-05-12 10:59:35 +03:00
parent 52303b170b
commit f939121ebf
No known key found for this signature in database
GPG Key ID: 8C6CFB2FFFE8F68A
8 changed files with 50 additions and 4 deletions

View File

@ -191,7 +191,7 @@ describe("installing update using tray", () => {
});
it("notifies the user that download is happening", () => {
expect(showNotificationMock).toHaveBeenCalledWith("Downloading update some-version...");
expect(showNotificationMock).toHaveBeenCalledWith("Download for version some-version started...");
});
it("user cannot check for updates again yet", () => {

View File

@ -0,0 +1,7 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { createChannel } from "../ipc-channel/create-channel/create-channel";
export const notificationChannel = createChannel<string>("notification:message");

View File

@ -80,6 +80,7 @@ import quitAndInstallUpdateInjectable from "./electron-app/features/quit-and-ins
import electronUpdaterIsActiveInjectable from "./electron-app/features/electron-updater-is-active.injectable";
import publishIsConfiguredInjectable from "./update-app/publish-is-configured.injectable";
import checkForPlatformUpdatesInjectable from "./update-app/check-for-platform-updates.injectable";
import setUpdateOnQuitInjectable from "./electron-app/features/set-update-on-quit.injectable";
export function getDiForUnitTesting(opts: GetDiForUnitTestingOptions = {}) {
const {
@ -222,6 +223,7 @@ const overrideElectronFeatures = (di: DiContainer) => {
di.override(getElectronThemeInjectable, () => () => "dark");
di.override(syncThemeFromOperatingSystemInjectable, () => ({ start: () => {}, stop: () => {} }));
di.override(quitAndInstallUpdateInjectable, () => () => {});
di.override(setUpdateOnQuitInjectable, () => () => {});
di.override(checkForPlatformUpdatesInjectable, () => () => {
throw new Error("Tried to check for platform updates without explicit override.");

View File

@ -3,11 +3,19 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import applicationWindowInjectable from "../start-main-application/lens-window/application-window/application-window.injectable";
import { notificationChannel } from "../../common/notification/notification-channel";
const showNotificationInjectable = getInjectable({
id: "show-notification",
instantiate: (di) => (message: string) => {},
instantiate: (di) => {
const applicationWindow = di.inject(applicationWindowInjectable);
return (message: string) => {
applicationWindow.send({ channel: notificationChannel.name, data: [message] });
};
},
});
export default showNotificationInjectable;

View File

@ -50,7 +50,7 @@ const checkForUpdatesTrayItemInjectable = getInjectable({
const { updateWasDiscovered, version } = await versionUpdate.checkForUpdates();
if (updateWasDiscovered) {
showNotification(`Downloading update ${version}...`);
showNotification(`Download for version ${version} started...`);
// Note: intentional orphan promise to make download happen in the background
versionUpdate.downloadUpdate().then(async () => {

View File

@ -0,0 +1,26 @@
/**
* 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 { ipcChannelListenerInjectionToken } from "../../ipc-channel-listeners/ipc-channel-listener-injection-token";
import { notificationChannel } from "../../../common/notification/notification-channel";
import { Notifications } from "./index";
const notificationListenerInjectable = getInjectable({
id: "notification-listener",
instantiate: () => ({
channel: notificationChannel,
handle: (message: string) => {
Notifications.shortInfo(message);
},
}),
causesSideEffects: true,
injectionToken: ipcChannelListenerInjectionToken,
});
export default notificationListenerInjectable;

View File

@ -44,6 +44,8 @@ import setupOnApiErrorListenersInjectable from "./api/setup-on-api-errors.inject
import { observable } from "mobx";
import defaultShellInjectable from "./components/+preferences/default-shell.injectable";
import themeStoreInjectable from "./themes/store.injectable";
import notificationListenerInjectable from "./components/notifications/notification-listener.injectable";
import { notificationChannel } from "../common/notification/notification-channel";
export const getDiForUnitTesting = (opts: GetDiForUnitTestingOptions = {}) => {
const {
@ -120,6 +122,8 @@ export const getDiForUnitTesting = (opts: GetDiForUnitTestingOptions = {}) => {
di.override(getValueFromRegisteredChannelInjectable, () => () => Promise.resolve(undefined as never));
di.override(registerIpcChannelListenerInjectable, () => () => undefined);
di.override(notificationListenerInjectable, () => ({ channel: notificationChannel, handle: () => {} }));
overrideFsWithFakes(di);
di.override(focusWindowInjectable, () => () => {});

View File

@ -5,7 +5,6 @@
import { getInjectionToken } from "@ogre-tools/injectable";
import type { Channel } from "../../common/ipc-channel/channel";
export interface IpcChannelListener {
channel: Channel<unknown>;
handle: (value: any) => void;