index.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { app, ipcMain, BrowserWindow, Menu, Tray } from 'electron'
  2. import Autolaunch from 'auto-launch'
  3. import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
  4. import { enableLiveReload } from 'electron-compile'
  5. import { readSettings, writeSettings } from './settings'
  6. import { createServer, restartServer } from './server'
  7. let win
  8. let tray
  9. let settings = readSettings()
  10. // const isDevMode = process.execPath.match(/[\\/]electron/)
  11. const isDevMode = settings.appMode === 'development'
  12. if (isDevMode) {
  13. enableLiveReload()
  14. }
  15. /**
  16. *
  17. */
  18. const createWindow = async () => {
  19. if (win) {
  20. win.show()
  21. return
  22. }
  23. win = new BrowserWindow({
  24. title: settings.appName,
  25. titleBarStyle: 'hidden',
  26. width: 350,
  27. height: 480,
  28. maximizable: isDevMode,
  29. resizable: isDevMode,
  30. center: true,
  31. show: false
  32. })
  33. win.setMenuBarVisibility(false)
  34. win.loadURL(`file://${__dirname}/index.html`)
  35. if (isDevMode) {
  36. await installExtension(VUEJS_DEVTOOLS)
  37. win.webContents.openDevTools()
  38. }
  39. win.once('ready-to-show', () => {
  40. win.show()
  41. })
  42. win.on('show', () => {
  43. tray.setHighlightMode('always')
  44. })
  45. win.on('hide', () => {
  46. tray.setHighlightMode('never')
  47. })
  48. win.on('close', e => {
  49. e.preventDefault()
  50. win.hide()
  51. })
  52. win.on('closed', () => {
  53. win = null
  54. })
  55. }
  56. /**
  57. *
  58. */
  59. const exitApp = async () => {
  60. if (process.platform !== 'darwin') {
  61. app.exit()
  62. }
  63. }
  64. /**
  65. * Create system tray app
  66. */
  67. const createTray = async () => {
  68. tray = new Tray('./res/printer.png')
  69. tray.setToolTip(settings.appName)
  70. const contextMenu = Menu.buildFromTemplate([
  71. {
  72. label: 'Configuración',
  73. click: () => createWindow()
  74. },
  75. {
  76. label: 'Salir',
  77. click: () => exitApp()
  78. }
  79. ])
  80. tray.setContextMenu(contextMenu)
  81. }
  82. app.on('ready', async () => {
  83. await createTray()
  84. await createServer()
  85. });
  86. ipcMain.on('read-port', e => {
  87. settings = readSettings()
  88. e.returnValue = settings.server.port
  89. })
  90. ipcMain.on('save-port', (e, port) => {
  91. settings.server.port = port
  92. writeSettings(settings)
  93. e.returnValue = port
  94. })
  95. ipcMain.on('restart-server', async e => {
  96. await restartServer()
  97. e.sender.send('server-restarted')
  98. })