mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Track service start and stop events
Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>
This commit is contained in:
parent
d4c51e9986
commit
e15649b5a5
19
src/main/exit-app.ts
Normal file
19
src/main/exit-app.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { app } from "electron";
|
||||||
|
import { WindowManager } from "./window-manager";
|
||||||
|
import { appEventBus } from "../common/event-bus";
|
||||||
|
import { ClusterManager } from "./cluster-manager";
|
||||||
|
import logger from "./logger";
|
||||||
|
import { closingURL } from "../renderer/components/+closing-page/closing-page.route";
|
||||||
|
|
||||||
|
|
||||||
|
export function exitApp() {
|
||||||
|
const windowManager = WindowManager.getInstance<WindowManager>()
|
||||||
|
const clusterManager = ClusterManager.getInstance<ClusterManager>()
|
||||||
|
appEventBus.emit({ name: "service", action: "close" })
|
||||||
|
windowManager.navigate(closingURL());
|
||||||
|
clusterManager?.stop();
|
||||||
|
logger.info('SERVICE:QUIT');
|
||||||
|
setTimeout(() => {
|
||||||
|
app.exit()
|
||||||
|
}, 1000)
|
||||||
|
}
|
||||||
@ -67,7 +67,7 @@ app.on("ready", async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create cluster manager
|
// create cluster manager
|
||||||
clusterManager = new ClusterManager(proxyPort);
|
clusterManager = ClusterManager.getInstance<ClusterManager>(proxyPort);
|
||||||
|
|
||||||
// run proxy
|
// run proxy
|
||||||
try {
|
try {
|
||||||
@ -82,7 +82,7 @@ app.on("ready", async () => {
|
|||||||
extensionLoader.init(await extensionManager.load()); // call after windowManager to see splash earlier
|
extensionLoader.init(await extensionManager.load()); // call after windowManager to see splash earlier
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
appEventBus.emit({ name: "app", action: "start" })
|
appEventBus.emit({ name: "service", action: "start" })
|
||||||
}, 1000)
|
}, 1000)
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -96,6 +96,7 @@ app.on("activate", (event, hasVisibleWindows) => {
|
|||||||
// Quit app on Cmd+Q (MacOS)
|
// Quit app on Cmd+Q (MacOS)
|
||||||
app.on("will-quit", (event) => {
|
app.on("will-quit", (event) => {
|
||||||
logger.info('APP:QUIT');
|
logger.info('APP:QUIT');
|
||||||
|
appEventBus.emit({name: "app", action: "close"})
|
||||||
event.preventDefault(); // prevent app's default shutdown (e.g. required for telemetry, etc.)
|
event.preventDefault(); // prevent app's default shutdown (e.g. required for telemetry, etc.)
|
||||||
clusterManager?.stop(); // close cluster connections
|
clusterManager?.stop(); // close cluster connections
|
||||||
return; // skip exit to make tray work, to quit go to app's global menu or tray's menu
|
return; // skip exit to make tray work, to quit go to app's global menu or tray's menu
|
||||||
|
|||||||
@ -9,6 +9,8 @@ import { clusterSettingsURL } from "../renderer/components/+cluster-settings/clu
|
|||||||
import { extensionsURL } from "../renderer/components/+extensions/extensions.route";
|
import { extensionsURL } from "../renderer/components/+extensions/extensions.route";
|
||||||
import { menuRegistry } from "../extensions/registries/menu-registry";
|
import { menuRegistry } from "../extensions/registries/menu-registry";
|
||||||
import logger from "./logger";
|
import logger from "./logger";
|
||||||
|
import { appEventBus } from "../common/event-bus";
|
||||||
|
import { exitApp } from "./exit-app";
|
||||||
|
|
||||||
export type MenuTopId = "mac" | "file" | "edit" | "view" | "help"
|
export type MenuTopId = "mac" | "file" | "edit" | "view" | "help"
|
||||||
|
|
||||||
@ -89,7 +91,7 @@ export function buildMenu(windowManager: WindowManager) {
|
|||||||
label: 'Quit',
|
label: 'Quit',
|
||||||
accelerator: 'Cmd+Q',
|
accelerator: 'Cmd+Q',
|
||||||
click() {
|
click() {
|
||||||
app.exit(); // force quit since might be blocked within app.on("will-quit")
|
exitApp()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -135,7 +137,13 @@ export function buildMenu(windowManager: WindowManager) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
{ role: 'quit' }
|
{
|
||||||
|
label: 'Quit',
|
||||||
|
accelerator: 'Alt+F4',
|
||||||
|
click() {
|
||||||
|
exitApp()
|
||||||
|
}
|
||||||
|
}
|
||||||
]),
|
]),
|
||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
{ role: 'close' } // close current window
|
{ role: 'close' } // close current window
|
||||||
@ -259,7 +267,7 @@ export function buildMenu(windowManager: WindowManager) {
|
|||||||
}
|
}
|
||||||
menu = menuItem.submenu;
|
menu = menuItem.submenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
const menuPath: string = parentLabels.join(" -> ")
|
const menuPath: string = parentLabels.join(" -> ")
|
||||||
if (!menuItem) {
|
if (!menuItem) {
|
||||||
logger.info(`[MENU:test-menu-item-click] Cannot find menu item ${menuPath}`);
|
logger.info(`[MENU:test-menu-item-click] Cannot find menu item ${menuPath}`);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import path from "path"
|
import path from "path"
|
||||||
import packageInfo from "../../package.json"
|
import packageInfo from "../../package.json"
|
||||||
import { app, dialog, Menu, NativeImage, nativeTheme, Tray } from "electron"
|
import { dialog, Menu, NativeImage, nativeTheme, Tray } from "electron"
|
||||||
import { autorun } from "mobx";
|
import { autorun } from "mobx";
|
||||||
import { showAbout } from "./menu";
|
import { showAbout } from "./menu";
|
||||||
import { AppUpdater } from "./app-updater";
|
import { AppUpdater } from "./app-updater";
|
||||||
@ -11,6 +11,7 @@ import { preferencesURL } from "../renderer/components/+preferences/preferences.
|
|||||||
import { clusterViewURL } from "../renderer/components/cluster-manager/cluster-view.route";
|
import { clusterViewURL } from "../renderer/components/cluster-manager/cluster-view.route";
|
||||||
import logger from "./logger";
|
import logger from "./logger";
|
||||||
import { isDevelopment } from "../common/vars";
|
import { isDevelopment } from "../common/vars";
|
||||||
|
import { exitApp } from "./exit-app";
|
||||||
|
|
||||||
// note: instance of Tray should be saved somewhere, otherwise it disappears
|
// note: instance of Tray should be saved somewhere, otherwise it disappears
|
||||||
export let tray: Tray;
|
export let tray: Tray;
|
||||||
@ -119,7 +120,7 @@ export function createTrayMenu(windowManager: WindowManager): Menu {
|
|||||||
{
|
{
|
||||||
label: 'Quit App',
|
label: 'Quit App',
|
||||||
click() {
|
click() {
|
||||||
app.exit();
|
exitApp()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|||||||
@ -85,6 +85,7 @@ export class WindowManager extends Singleton {
|
|||||||
await this.mainWindow.loadURL(this.mainUrl);
|
await this.mainWindow.loadURL(this.mainUrl);
|
||||||
this.mainWindow.show();
|
this.mainWindow.show();
|
||||||
this.splashWindow?.close();
|
this.splashWindow?.close();
|
||||||
|
appEventBus.emit({ name: "app", action: "start" })
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
dialog.showErrorBox("ERROR!", err.toString())
|
dialog.showErrorBox("ERROR!", err.toString())
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,8 @@
|
|||||||
|
import type { RouteProps } from "react-router";
|
||||||
|
import { buildURL } from "../../../common/utils/buildUrl";
|
||||||
|
|
||||||
|
export const closingRoute: RouteProps = {
|
||||||
|
path: "/closing"
|
||||||
|
}
|
||||||
|
|
||||||
|
export const closingURL = buildURL(closingRoute.path)
|
||||||
6
src/renderer/components/+closing-page/closing-page.scss
Normal file
6
src/renderer/components/+closing-page/closing-page.scss
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
.ClosingPage {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
text-align: center;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
24
src/renderer/components/+closing-page/closing-page.tsx
Normal file
24
src/renderer/components/+closing-page/closing-page.tsx
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import "./closing-page.scss"
|
||||||
|
import React from "react";
|
||||||
|
import { observer } from "mobx-react";
|
||||||
|
import { Trans } from "@lingui/macro";
|
||||||
|
import { Icon } from "../icon"
|
||||||
|
|
||||||
|
@observer
|
||||||
|
export class ClosingPage extends React.Component {
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div className="ClosingPage flex">
|
||||||
|
{(
|
||||||
|
<div className="no-clusters flex column gaps box center">
|
||||||
|
<Icon size={72} material="emoji_people" />
|
||||||
|
<h1>
|
||||||
|
<Trans>Bye bye, see you soon!</Trans>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
2
src/renderer/components/+closing-page/index.tsx
Normal file
2
src/renderer/components/+closing-page/index.tsx
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export * from "./closing-page.route"
|
||||||
|
export * from "./closing-page"
|
||||||
@ -18,6 +18,7 @@ import { hasLoadedView, initView, lensViews, refreshViews } from "./lens-views";
|
|||||||
import { globalPageRegistry } from "../../../extensions/registries/page-registry";
|
import { globalPageRegistry } from "../../../extensions/registries/page-registry";
|
||||||
import { Extensions, extensionsRoute } from "../+extensions";
|
import { Extensions, extensionsRoute } from "../+extensions";
|
||||||
import { getMatchedClusterId } from "../../navigation";
|
import { getMatchedClusterId } from "../../navigation";
|
||||||
|
import { ClosingPage, closingRoute } from "../+closing-page";
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
export class ClusterManager extends React.Component {
|
export class ClusterManager extends React.Component {
|
||||||
@ -63,6 +64,7 @@ export class ClusterManager extends React.Component {
|
|||||||
<div id="lens-views"/>
|
<div id="lens-views"/>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route component={LandingPage} {...landingRoute} />
|
<Route component={LandingPage} {...landingRoute} />
|
||||||
|
<Route component={ClosingPage} {...closingRoute} />
|
||||||
<Route component={Preferences} {...preferencesRoute} />
|
<Route component={Preferences} {...preferencesRoute} />
|
||||||
<Route component={Extensions} {...extensionsRoute} />
|
<Route component={Extensions} {...extensionsRoute} />
|
||||||
<Route component={Workspaces} {...workspacesRoute} />
|
<Route component={Workspaces} {...workspacesRoute} />
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user