From bfa831f86fa5991aff47ae3b7c5c1b74cf181fd3 Mon Sep 17 00:00:00 2001 From: Fritz Lin Date: Thu, 28 Jul 2016 23:20:53 +0800 Subject: [PATCH] + tray & hub --- app/main/hub.js | 5 +++++ app/main/index.js | 16 ++++++++++++++-- app/main/tray.js | 32 ++++++++++++++++++++++++++++++++ app/media/caprine/IconTray.png | Bin 0 -> 2811 bytes app/media/caprine/license | 21 +++++++++++++++++++++ 5 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 app/main/hub.js create mode 100644 app/main/tray.js create mode 100644 app/media/caprine/IconTray.png create mode 100644 app/media/caprine/license diff --git a/app/main/hub.js b/app/main/hub.js new file mode 100644 index 0000000..64fff8c --- /dev/null +++ b/app/main/hub.js @@ -0,0 +1,5 @@ +const { EventEmitter } = require('events') + +// @public +const hub = new EventEmitter() +module.exports = hub diff --git a/app/main/index.js b/app/main/index.js index 329445f..05b1381 100644 --- a/app/main/index.js +++ b/app/main/index.js @@ -2,19 +2,31 @@ const { app, Menu, ipcMain, BrowserWindow } = require('electron') const { close, closeAll, openAlert, openConfirm, openLogin, openHome } = require('./desktop') +const { createTray } = require('./tray') +const hub = require('./hub') let currUser const noop = () => {} app.on('will-quit', noop) app.on('window-all-closed', () => { - if (!currUser) app.quit() + if (!currUser) hub.emit('app-quit') }) app.on('ready', () => { Menu.setApplicationMenu(null) // disable menu + createTray() openLogin() }) -// events +// hub events +hub.on('app-show', () => { + if (currUser) openHome() + else openLogin() +}) +hub.on('app-quit', () => { + app.quit() +}) + +// ipcMain events // todo: broadcast // todo: ipc emit ipcMain.on('user-login', (e, data) => { diff --git a/app/main/tray.js b/app/main/tray.js new file mode 100644 index 0000000..69e7972 --- /dev/null +++ b/app/main/tray.js @@ -0,0 +1,32 @@ +const { Tray, Menu } = require('electron') +const { join } = require('path') +const hub = require('./hub') + +const icon = join(__dirname, '../media/caprine/IconTray.png') +let tray + +const menu = Menu.buildFromTemplate([ + { + label: 'Show', + click () { + hub.emit('app-show') + } + }, + { + label: 'Quit', + click () { + hub.emit('app-quit') + } + } +]) + +// @public +// cuz should be placed in app.on('ready') +function createTray () { + tray = new Tray(icon) + tray.setToolTip('TalkApp') + tray.setContextMenu(menu) +} +exports.createTray = createTray + +// todo: updateTray diff --git a/app/media/caprine/IconTray.png b/app/media/caprine/IconTray.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0898c0395fdbf84a0ea3ee83f8e35b29aafc5a GIT binary patch literal 2811 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 Ks+G#N;r{{lE-?TA literal 0 HcmV?d00001 diff --git a/app/media/caprine/license b/app/media/caprine/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/app/media/caprine/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.