Fix download percentages not updating in tray (#5697)

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

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
Janne SavolainenandMikko Aspiala authored and GitHub committed 2022-06-22 15:37:13 +03:00
1 parent 666d90dd3c
commit fa23b5cd3f
5 files changed
+66 -40

No files matched your search

@@ -9,15 +9,24 @@ import showApplicationWindowInjectable from "../../start-main-application/lens-w
import isWindowsInjectable from "../../../common/vars/is-windows.injectable";
import loggerInjectable from "../../../common/logger.injectable";
import trayIconPathsInjectable from "../tray-icon-path.injectable";
import type { TrayMenuItem } from "../tray-menu-item/tray-menu-item-injection-token";
import { convertToElectronMenuTemplate } from "../reactive-tray-menu-items/converters";
const TRAY_LOG_PREFIX = "[TRAY]";
export interface MinimalTrayMenuItem {
id: string;
parentId: string | null;
enabled: boolean;
label?: string;
click?: () => Promise<void> | void;
tooltip?: string;
separator?: boolean;
}
export interface ElectronTray {
start(): void;
stop(): void;
setMenuItems(menuItems: TrayMenuItem[]): void;
setMenuItems(menuItems: MinimalTrayMenuItem[]): void;
setIconPath(iconPath: string): void;
}
@@ -2,13 +2,13 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import type { TrayMenuItem } from "../tray-menu-item/tray-menu-item-injection-token";
import type { MinimalTrayMenuItem } from "../electron-tray/electron-tray.injectable";
export function convertToElectronMenuTemplate(trayMenuItems: TrayMenuItem[]): Electron.MenuItemConstructorOptions[] {
export function convertToElectronMenuTemplate(trayMenuItems: MinimalTrayMenuItem[]): Electron.MenuItemConstructorOptions[] {
const toTrayMenuOptions = (parentId: string | null) => (
trayMenuItems
.filter((item) => item.parentId === parentId)
.map((trayMenuItem: TrayMenuItem): Electron.MenuItemConstructorOptions => {
.map((trayMenuItem): Electron.MenuItemConstructorOptions => {
if (trayMenuItem.separator) {
return { id: trayMenuItem.id, type: "separator" };
}
@@ -17,8 +17,8 @@ export function convertToElectronMenuTemplate(trayMenuItems: TrayMenuItem[]): El
return {
id: trayMenuItem.id,
label: trayMenuItem.label?.get(),
enabled: trayMenuItem.enabled.get(),
label: trayMenuItem.label,
enabled: trayMenuItem.enabled,
toolTip: trayMenuItem.tooltip,
...(childItems.length === 0
@@ -5,26 +5,40 @@
import { getInjectable } from "@ogre-tools/injectable";
import { getStartableStoppable } from "../../../common/utils/get-startable-stoppable";
import { reaction } from "mobx";
import type { MinimalTrayMenuItem } from "../electron-tray/electron-tray.injectable";
import electronTrayInjectable from "../electron-tray/electron-tray.injectable";
import trayMenuItemsInjectable from "../tray-menu-item/tray-menu-items.injectable";
import type { TrayMenuItem } from "../tray-menu-item/tray-menu-item-injection-token";
const reactiveTrayMenuItemsInjectable = getInjectable({
id: "reactive-tray-menu-items",
instantiate: (di) => {
const electronTray = di.inject(electronTrayInjectable);
const trayMenuItems = di.inject(trayMenuItemsInjectable);
const reactiveItems = di.inject(trayMenuItemsInjectable);
return getStartableStoppable("reactive-tray-menu-items", () => (
return getStartableStoppable("reactive-tray-menu-items", () =>
reaction(
() => trayMenuItems.get(),
electronTray.setMenuItems,
(): MinimalTrayMenuItem[] => reactiveItems.get().map(toNonReactiveItem),
(nonReactiveItems) => electronTray.setMenuItems(nonReactiveItems),
{
fireImmediately: true,
},
)
));
),
);
},
});
export default reactiveTrayMenuItemsInjectable;
const toNonReactiveItem = (item: TrayMenuItem): MinimalTrayMenuItem => ({
id: item.id,
parentId: item.parentId,
click: item.click,
tooltip: item.tooltip,
separator: item.separator,
enabled: item.enabled.get(),
label: item.label?.get(),
});