mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Tray icon #833 -- part 1 Signed-off-by: Roman <ixrock@gmail.com> * Tray icon #833 -- part 2 Signed-off-by: Roman <ixrock@gmail.com> * Tray icon #833 -- part 3 Signed-off-by: Roman <ixrock@gmail.com> * Tray icon #833 -- part 4 Signed-off-by: Roman <ixrock@gmail.com> * fix: lint / linux build failed Signed-off-by: Roman <ixrock@gmail.com> * allow to disable tray from preferences Signed-off-by: Roman <ixrock@gmail.com> * allow to tweak svg-icon before applying as tray-icon Signed-off-by: Roman <ixrock@gmail.com> * add checkbox indication, setActive workspace on cluster select Signed-off-by: Roman <ixrock@gmail.com> * fix build version (cannon find module 'react') Signed-off-by: Roman <ixrock@gmail.com> * - switching dark/light icon depending on os-x theme settings - optimization: don't re-create tray icon on menu udpates (avoid blinking) Signed-off-by: Roman <ixrock@gmail.com> * fix: refresh icon after turning on/off + switching dark-mode Signed-off-by: Roman <ixrock@gmail.com> * allow to close main window and re-open from dock or tray icon Signed-off-by: Roman <ixrock@gmail.com> * small fix Signed-off-by: Roman <ixrock@gmail.com> * fix: ensure main-window from global menu Signed-off-by: Roman <ixrock@gmail.com> * chore Signed-off-by: Roman <ixrock@gmail.com> * fix: hide traffic-light buttons for tray window Signed-off-by: Roman <ixrock@gmail.com> * removed redundant tray window Signed-off-by: Roman <ixrock@gmail.com> * removed delay from base-store Signed-off-by: Roman <ixrock@gmail.com> * adding cluster fix (reverted changes from master) Signed-off-by: Roman <ixrock@gmail.com> * - hide icon in dock when main-window closed (mac-os only) - added preferences checkbox to open app at system start-up Signed-off-by: Roman <ixrock@gmail.com> * handle quit app action from tray menu Signed-off-by: Roman <ixrock@gmail.com> * moved generating tray icons to build step Signed-off-by: Roman <ixrock@gmail.com> * Fix integration tests (#1080) * Fix integration tests Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com> * Update integration/helpers/utils.ts Co-authored-by: Sebastian Malton <sebastian@malton.name> Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com> Co-authored-by: Sebastian Malton <sebastian@malton.name> * fix-build: invisible app icon when there are more files within "build/icons/*.png" Signed-off-by: Roman <ixrock@gmail.com> * chore Signed-off-by: Roman <ixrock@gmail.com> * yarn i18n.extract Signed-off-by: Roman <ixrock@gmail.com> * clean-up Signed-off-by: Roman <ixrock@gmail.com> * navigation refactoring, move out `buildUrl` to common/utils so `react` and `react-router` not required as package.json dependecies in runtime (main) Signed-off-by: Roman <ixrock@gmail.com> * Ignore namespace query param on integration tests (#1109) Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com> * merge-conflicts fixes Signed-off-by: Roman <ixrock@gmail.com> * support page fixes Signed-off-by: Roman <ixrock@gmail.com> * make eslint happy again Signed-off-by: Roman <ixrock@gmail.com> Co-authored-by: Lauri Nevala <lauri.nevala@gmail.com> Co-authored-by: Sebastian Malton <sebastian@malton.name>
115 lines
3.4 KiB
TypeScript
115 lines
3.4 KiB
TypeScript
// Main process
|
|
|
|
import "../common/system-ca"
|
|
import "../common/prometheus-providers"
|
|
import * as Mobx from "mobx"
|
|
import * as LensExtensions from "../extensions/core-api";
|
|
import { app, dialog } from "electron"
|
|
import { appName } from "../common/vars";
|
|
import path from "path"
|
|
import { LensProxy } from "./lens-proxy"
|
|
import { WindowManager } from "./window-manager";
|
|
import { ClusterManager } from "./cluster-manager";
|
|
import { AppUpdater } from "./app-updater"
|
|
import { shellSync } from "./shell-sync"
|
|
import { getFreePort } from "./port"
|
|
import { mangleProxyEnv } from "./proxy-env"
|
|
import { registerFileProtocol } from "../common/register-protocol";
|
|
import { clusterStore } from "../common/cluster-store"
|
|
import { userStore } from "../common/user-store";
|
|
import { workspaceStore } from "../common/workspace-store";
|
|
import { appEventBus } from "../common/event-bus"
|
|
import { extensionManager } from "../extensions/extension-manager";
|
|
import { extensionLoader } from "../extensions/extension-loader";
|
|
import logger from "./logger"
|
|
|
|
const workingDir = path.join(app.getPath("appData"), appName);
|
|
let proxyPort: number;
|
|
let proxyServer: LensProxy;
|
|
let clusterManager: ClusterManager;
|
|
let windowManager: WindowManager;
|
|
|
|
app.setName(appName);
|
|
if (!process.env.CICD) {
|
|
app.setPath("userData", workingDir);
|
|
}
|
|
|
|
mangleProxyEnv()
|
|
if (app.commandLine.getSwitchValue("proxy-server") !== "") {
|
|
process.env.HTTPS_PROXY = app.commandLine.getSwitchValue("proxy-server")
|
|
}
|
|
|
|
app.on("ready", async () => {
|
|
logger.info(`🚀 Starting Lens from "${workingDir}"`)
|
|
await shellSync();
|
|
|
|
const updater = new AppUpdater()
|
|
updater.start();
|
|
|
|
registerFileProtocol("static", __static);
|
|
|
|
// preload isomorphic stores
|
|
await Promise.all([
|
|
userStore.load(),
|
|
clusterStore.load(),
|
|
workspaceStore.load(),
|
|
]);
|
|
|
|
// find free port
|
|
try {
|
|
proxyPort = await getFreePort()
|
|
} catch (error) {
|
|
logger.error(error)
|
|
dialog.showErrorBox("Lens Error", "Could not find a free port for the cluster proxy")
|
|
app.exit();
|
|
}
|
|
|
|
// create cluster manager
|
|
clusterManager = new ClusterManager(proxyPort);
|
|
|
|
// run proxy
|
|
try {
|
|
proxyServer = LensProxy.create(proxyPort, clusterManager);
|
|
} catch (error) {
|
|
logger.error(`Could not start proxy (127.0.0:${proxyPort}): ${error.message}`)
|
|
dialog.showErrorBox("Lens Error", `Could not start proxy (127.0.0:${proxyPort}): ${error.message || "unknown error"}`)
|
|
app.exit();
|
|
}
|
|
|
|
windowManager = new WindowManager(proxyPort);
|
|
|
|
LensExtensionsApi.windowManager = windowManager; // expose to extensions
|
|
extensionLoader.loadOnMain()
|
|
extensionLoader.extensions.replace(await extensionManager.load())
|
|
extensionLoader.broadcastExtensions()
|
|
|
|
setTimeout(() => {
|
|
appEventBus.emit({ name: "app", action: "start" })
|
|
}, 1000)
|
|
});
|
|
|
|
app.on("activate", (event, hasVisibleWindows) => {
|
|
logger.info('APP:ACTIVATE', { hasVisibleWindows })
|
|
if (!hasVisibleWindows) {
|
|
windowManager.initMainWindow();
|
|
}
|
|
});
|
|
|
|
// Quit app on Cmd+Q (MacOS)
|
|
app.on("will-quit", (event) => {
|
|
logger.info('APP:QUIT');
|
|
event.preventDefault(); // prevent app's default shutdown (e.g. required for telemetry, etc.)
|
|
clusterManager?.stop(); // close cluster connections
|
|
return; // skip exit to make tray work, to quit go to app's global menu or tray's menu
|
|
})
|
|
|
|
// Extensions-api runtime exports
|
|
export const LensExtensionsApi = {
|
|
...LensExtensions,
|
|
};
|
|
|
|
export {
|
|
Mobx,
|
|
LensExtensionsApi as LensExtensions,
|
|
}
|