| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- const {app, BrowserWindow, BrowserView, Menu} = require('electron')
- const path = require('path')
- const eggLauncher = require('./electron/lib/lanucher')
- const setup = require('./electron/setup')
- const electronConfig = require('./electron/config')
- const storage = require('./electron/lib/storage')
- const preferences = require('./electron/preferences')
- const pkg = require('./package.json');
- const helper = require('./electron/lib/helper');
- // main window
- global.MAIN_WINDOW = null
- global.APP_TRAY = null;
- global.CAN_QUIT = false;
- // Initialize
- setup()
- // argv
- let ENV = 'prod'
- for (let i = 0; i < process.argv.length; i++) {
- const tmpArgv = process.argv[i]
- if (tmpArgv.indexOf('--env=') !== -1) {
- ENV = tmpArgv.substr(6)
- }
- }
- const eggConfig = electronConfig.get('egg', ENV)
- eggConfig.env = ENV
- // eLogger
- const eLogger = require('./electron/lib/eLogger').get()
- // loading html
- const loadingHtml = path.join('file://', __dirname, '/asset/loading.html')
- if (process.mas) {
- app.setName(pkg.softName)
- }
- async function initialize () {
- app.whenReady().then(() => {
- createWindow()
- app.on('activate', function () {
- if (BrowserWindow.getAllWindows().length === 0) {
- createWindow()
- }
- })
- })
-
- app.on('window-all-closed', function () {
- if (process.platform !== 'darwin') {
- eLogger.info('[main] [initialize] window-all-closed quit')
- helper.appQuit()
- }
- })
- }
- async function createWindow () {
- const winOptions = electronConfig.get('windowsOption')
- MAIN_WINDOW = new BrowserWindow(winOptions)
- // loading html
- loadingView(winOptions)
- if (eggConfig.env === 'prod') {
- // hidden menu
- Menu.setApplicationMenu(null)
- // dynamic port
- await storage.setDynamicPort()
- eggConfig.port = electronConfig.get('egg', eggConfig.env).port
- }
- // options register
- preferences()
- // egg server
- await startServer(eggConfig)
- return MAIN_WINDOW
- }
- async function startServer (options) {
- eLogger.info('[main] [startServer] options', options)
- const protocol = 'http://'
- let startRes = null
- let url = null
- const remoteConfig = electronConfig.get('remoteUrl');
- if (remoteConfig.enable) {
- url = remoteConfig.url
- loadMainUrl(url)
- return true
- }
-
- if (ENV === 'prod') {
- url = protocol + options.hostname + ':' + options.port
- } else {
- const developmentModeConfig = electronConfig.get('developmentMode', ENV)
- const selectMode = developmentModeConfig.default
- const modeInfo = developmentModeConfig.mode[selectMode]
- switch (selectMode) {
- case 'vue' :
- url = protocol + modeInfo.hostname + ':' + modeInfo.port
- break
- case 'react' :
- url = protocol + modeInfo.hostname + ':' + modeInfo.port
- break
- case 'ejs' :
- url = protocol + modeInfo.hostname + ':' + modeInfo.port
- break
- }
- }
- eLogger.info('[main] [url]:', url)
- startRes = await eggLauncher.start(options).then((res) => res, (err) => err)
- eLogger.info('[main] [startServer] startRes:', startRes)
- if (startRes === 'success') {
- loadMainUrl(url)
- return true
- }
-
- app.relaunch()
- }
- /**
- * White screen optimization
- */
- function loadingView (winOptions) {
- const loadingBrowserView = new BrowserView()
- MAIN_WINDOW.setBrowserView(loadingBrowserView)
- loadingBrowserView.setBounds({
- x: 0,
- y: 0,
- width: winOptions.width,
- height: winOptions.height
- });
- loadingBrowserView.webContents.loadURL(loadingHtml);
-
- MAIN_WINDOW.webContents.on('dom-ready', async (event) => {
- MAIN_WINDOW.removeBrowserView(loadingBrowserView);
- });
- }
- function loadMainUrl (url) {
- MAIN_WINDOW.loadURL(url)
- }
- initialize()
|