mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-13 17:56:25 +00:00
change IPC module(Raw buffer -> Socket) & set window behaviour for Windows
This commit is contained in:
@@ -2,29 +2,32 @@ const electron = require('electron')
|
|||||||
const BrowserWindow = electron.BrowserWindow
|
const BrowserWindow = electron.BrowserWindow
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
|
||||||
var finderWindow = new BrowserWindow({
|
var config = {
|
||||||
width: 640,
|
width: 640,
|
||||||
height: 400,
|
height: 400,
|
||||||
show: false,
|
show: false,
|
||||||
frame: false,
|
frame: false,
|
||||||
resizable: false,
|
resizable: false,
|
||||||
'zoom-factor': 1.0,
|
'zoom-factor': 1.0,
|
||||||
'always-on-top': true,
|
|
||||||
'web-preferences': {
|
'web-preferences': {
|
||||||
'overlay-scrollbars': true,
|
'overlay-scrollbars': true,
|
||||||
'skip-taskbar': true
|
'skip-taskbar': true
|
||||||
},
|
},
|
||||||
'standard-window': false
|
'standard-window': false
|
||||||
})
|
}
|
||||||
|
|
||||||
|
if (process.platform === 'darwin') {
|
||||||
|
config['always-on-top'] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
var finderWindow = new BrowserWindow(config)
|
||||||
|
|
||||||
var url = path.resolve(__dirname, '../browser/finder/index.html')
|
var url = path.resolve(__dirname, '../browser/finder/index.html')
|
||||||
|
|
||||||
finderWindow.loadURL('file://' + url)
|
finderWindow.loadURL('file://' + url)
|
||||||
|
|
||||||
finderWindow.on('blur', function () {
|
if (process.platform === 'darwin') {
|
||||||
finderWindow.hide()
|
finderWindow.setVisibleOnAllWorkspaces(true)
|
||||||
})
|
}
|
||||||
|
|
||||||
finderWindow.setVisibleOnAllWorkspaces(true)
|
|
||||||
|
|
||||||
module.exports = finderWindow
|
module.exports = finderWindow
|
||||||
|
|||||||
@@ -30,7 +30,8 @@
|
|||||||
<script>
|
<script>
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
electron.webFrame.setZoomLevelLimits(1, 1)
|
electron.webFrame.setZoomLevelLimits(1, 1)
|
||||||
var scriptUrl = process.env.BOOST_ENV === 'development'
|
const _ = require('lodash')
|
||||||
|
var scriptUrl = _.find(electron.remote.process.argv, a => a === '--hot')
|
||||||
? 'http://localhost:8080/assets/finder.js'
|
? 'http://localhost:8080/assets/finder.js'
|
||||||
: '../../compiled/finder.js'
|
: '../../compiled/finder.js'
|
||||||
var scriptEl=document.createElement('script')
|
var scriptEl=document.createElement('script')
|
||||||
|
|||||||
@@ -13,7 +13,9 @@ import dataStore from 'boost/dataStore'
|
|||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const { remote, clipboard, ipcRenderer } = electron
|
const { remote, clipboard, ipcRenderer } = electron
|
||||||
|
|
||||||
var hideFinder = remote.getGlobal('hideFinder')
|
function hideFinder () {
|
||||||
|
ipcRenderer.send('hide-finder')
|
||||||
|
}
|
||||||
|
|
||||||
function notify (...args) {
|
function notify (...args) {
|
||||||
return new window.Notification(...args)
|
return new window.Notification(...args)
|
||||||
|
|||||||
@@ -58,10 +58,11 @@
|
|||||||
electron.webFrame.setZoomLevelLimits(1, 1)
|
electron.webFrame.setZoomLevelLimits(1, 1)
|
||||||
var version = electron.remote.app.getVersion()
|
var version = electron.remote.app.getVersion()
|
||||||
document.title = 'Boost' + ((version == null || version.length === 0) ? ' DEV' : '')
|
document.title = 'Boost' + ((version == null || version.length === 0) ? ' DEV' : '')
|
||||||
var scriptUrl = process.env.BOOST_ENV === 'development'
|
const _ = require('lodash')
|
||||||
|
var scriptUrl = _.find(electron.remote.process.argv, a => a === '--hot')
|
||||||
? 'http://localhost:8080/assets/main.js'
|
? 'http://localhost:8080/assets/main.js'
|
||||||
: '../../compiled/main.js'
|
: '../../compiled/main.js'
|
||||||
var scriptEl=document.createElement('script')
|
var scriptEl = document.createElement('script')
|
||||||
scriptEl.setAttribute("type","text/javascript")
|
scriptEl.setAttribute("type","text/javascript")
|
||||||
scriptEl.setAttribute("src", scriptUrl)
|
scriptEl.setAttribute("src", scriptUrl)
|
||||||
document.getElementsByTagName("head")[0].appendChild(scriptEl)
|
document.getElementsByTagName("head")[0].appendChild(scriptEl)
|
||||||
|
|||||||
115
finder.js
115
finder.js
@@ -4,26 +4,84 @@ const Tray = electron.Tray
|
|||||||
const Menu = electron.Menu
|
const Menu = electron.Menu
|
||||||
const MenuItem = electron.MenuItem
|
const MenuItem = electron.MenuItem
|
||||||
const ipcMain = electron.ipcMain
|
const ipcMain = electron.ipcMain
|
||||||
|
const path = require('path')
|
||||||
|
|
||||||
process.stdin.setEncoding('utf8')
|
const nodeIpc = require('node-ipc')
|
||||||
|
|
||||||
console.log = function () {
|
var finderWindow = null
|
||||||
process.stdout.write(JSON.stringify({
|
var isFinderLoaded = false
|
||||||
type: 'log',
|
|
||||||
data: JSON.stringify(Array.prototype.slice.call(arguments).join(' '))
|
function hideFinder () {
|
||||||
}), 'utf-8')
|
if (!isFinderLoaded) return false
|
||||||
|
|
||||||
|
if (process.platform === 'darwin') {
|
||||||
|
Menu.sendActionToFirstResponder('hide:')
|
||||||
|
}
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
finderWindow.minimize()
|
||||||
|
}
|
||||||
|
finderWindow.hide()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showFinder () {
|
||||||
|
if (!isFinderLoaded) return false
|
||||||
|
|
||||||
|
if (!finderWindow.isVisible()) {
|
||||||
|
finderWindow.show()
|
||||||
|
}
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
finderWindow.minimize()
|
||||||
|
finderWindow.restore()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nodeIpc.config.id = 'finder'
|
||||||
|
nodeIpc.config.retry = 1500
|
||||||
|
nodeIpc.config.silent = true
|
||||||
|
|
||||||
|
nodeIpc.connectTo(
|
||||||
|
'main',
|
||||||
|
path.join(app.getPath('userData'), 'boost.service'),
|
||||||
|
function () {
|
||||||
|
nodeIpc.of.main.on(
|
||||||
|
'connect',
|
||||||
|
function () {
|
||||||
|
nodeIpc.log('<< ## connected to world ##'.rainbow, nodeIpc.config.delay)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
nodeIpc.of.main.on(
|
||||||
|
'disconnect',
|
||||||
|
function(){
|
||||||
|
nodeIpc.log('<< disconnected from main'.notice)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
nodeIpc.of.main.on(
|
||||||
|
'message',
|
||||||
|
function (payload) {
|
||||||
|
switch (payload.type) {
|
||||||
|
case 'open-finder':
|
||||||
|
showFinder()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
function emit (type, data) {
|
function emit (type, data) {
|
||||||
process.stdout.write(JSON.stringify({
|
var payload = {
|
||||||
type: type,
|
type: type,
|
||||||
data: JSON.stringify(data)
|
data: data
|
||||||
}), 'utf-8')
|
}
|
||||||
|
nodeIpc.of.main.emit('message', payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
var finderWindow
|
var appQuit = false
|
||||||
app.on('ready', function () {
|
app.on('ready', function () {
|
||||||
|
if (process.platform === 'darwin') {
|
||||||
app.dock.hide()
|
app.dock.hide()
|
||||||
|
}
|
||||||
|
|
||||||
var appIcon = new Tray(__dirname + '/resources/tray-icon.png')
|
var appIcon = new Tray(__dirname + '/resources/tray-icon.png')
|
||||||
appIcon.setToolTip('Boost')
|
appIcon.setToolTip('Boost')
|
||||||
|
|
||||||
@@ -43,7 +101,7 @@ app.on('ready', function () {
|
|||||||
trayMenu.append(new MenuItem({
|
trayMenu.append(new MenuItem({
|
||||||
label: 'Open Finder window',
|
label: 'Open Finder window',
|
||||||
click: function () {
|
click: function () {
|
||||||
finderWindow.show()
|
showFinder()
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
trayMenu.append(new MenuItem({
|
trayMenu.append(new MenuItem({
|
||||||
@@ -53,29 +111,30 @@ app.on('ready', function () {
|
|||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
appIcon.setContextMenu(trayMenu)
|
appIcon.setContextMenu(trayMenu)
|
||||||
|
appIcon.on('click', function (e) {
|
||||||
process.stdin.on('data', function (payload) {
|
e.preventDefault()
|
||||||
try {
|
appIcon.popUpContextMenu(trayMenu)
|
||||||
payload = JSON.parse(payload)
|
|
||||||
} catch (e) {
|
|
||||||
console.log('Not parsable payload : ', payload)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
console.log('from main >> ', payload.type)
|
|
||||||
switch (payload.type) {
|
|
||||||
case 'open-finder':
|
|
||||||
finderWindow.show()
|
|
||||||
break
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcMain.on('copy-finder', function () {
|
ipcMain.on('copy-finder', function () {
|
||||||
emit('copy-finder')
|
emit('copy-finder')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ipcMain.on('hide-finder', function () {
|
||||||
|
hideFinder()
|
||||||
})
|
})
|
||||||
|
|
||||||
global.hideFinder = function () {
|
isFinderLoaded = true
|
||||||
Menu.sendActionToFirstResponder('hide:')
|
})
|
||||||
}
|
|
||||||
|
finderWindow.on('blur', function () {
|
||||||
|
hideFinder()
|
||||||
|
})
|
||||||
|
|
||||||
|
finderWindow.on('close', function (e) {
|
||||||
|
if (appQuit) return true
|
||||||
|
e.preventDefault()
|
||||||
|
hideFinder()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -13,14 +13,22 @@ function getLocalPath () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function forgeInitialRepositories () {
|
function forgeInitialRepositories () {
|
||||||
return [{
|
let defaultRepo = {
|
||||||
key: keygen(),
|
key: keygen(),
|
||||||
name: 'local',
|
name: 'local',
|
||||||
type: 'userData',
|
type: 'userData',
|
||||||
user: {
|
user: {
|
||||||
name: remote.getGlobal('process').env.USER
|
name: 'New user'
|
||||||
}
|
}
|
||||||
}]
|
}
|
||||||
|
|
||||||
|
if (process.platform === 'darwin') {
|
||||||
|
defaultRepo.user.name = remote.process.env.USER
|
||||||
|
} else if (process.platform === 'win32') {
|
||||||
|
defaultRepo.user.name = remote.process.env.USERNAME
|
||||||
|
}
|
||||||
|
|
||||||
|
return [defaultRepo]
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRepositories () {
|
function getRepositories () {
|
||||||
|
|||||||
105
main.js
105
main.js
@@ -7,7 +7,8 @@ const autoUpdater = electron.autoUpdater
|
|||||||
const jetpack = require('fs-jetpack')
|
const jetpack = require('fs-jetpack')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const ChildProcess = require('child_process')
|
const ChildProcess = require('child_process')
|
||||||
electron.crashReporter.start()
|
const _ = require('lodash')
|
||||||
|
// electron.crashReporter.start()
|
||||||
|
|
||||||
var mainWindow = null
|
var mainWindow = null
|
||||||
var finderProcess
|
var finderProcess
|
||||||
@@ -61,6 +62,44 @@ autoUpdater
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const nodeIpc = require('node-ipc')
|
||||||
|
var isNodeIpcReady = false
|
||||||
|
nodeIpc.config.id = 'node'
|
||||||
|
nodeIpc.config.retry= 1500
|
||||||
|
nodeIpc.config.silent = true
|
||||||
|
|
||||||
|
nodeIpc.serve(
|
||||||
|
path.join(app.getPath('userData'), 'boost.service'),
|
||||||
|
function(){
|
||||||
|
isNodeIpcReady = true
|
||||||
|
nodeIpc.server.on(
|
||||||
|
'message',
|
||||||
|
function (data, socket){
|
||||||
|
console.log('>>', data)
|
||||||
|
format(data)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
function format (payload) {
|
||||||
|
switch (payload.type) {
|
||||||
|
case 'show-main-window':
|
||||||
|
mainWindow.minimize()
|
||||||
|
mainWindow.restore()
|
||||||
|
break
|
||||||
|
case 'copy-finder':
|
||||||
|
mainWindow.webContents.send('copy-finder')
|
||||||
|
break
|
||||||
|
case 'quit-app':
|
||||||
|
appQuit = true
|
||||||
|
app.quit()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
app.on('ready', function () {
|
app.on('ready', function () {
|
||||||
app.on('before-quit', function () {
|
app.on('before-quit', function () {
|
||||||
if (finderProcess) finderProcess.kill()
|
if (finderProcess) finderProcess.kill()
|
||||||
@@ -93,14 +132,26 @@ app.on('ready', function () {
|
|||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
mainWindow.hide()
|
mainWindow.hide()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function emitToFinder (type, data) {
|
||||||
|
if (!isNodeIpcReady) {
|
||||||
|
console.log('server is not ready')
|
||||||
|
}
|
||||||
|
var payload = {
|
||||||
|
type: type,
|
||||||
|
data: data
|
||||||
|
}
|
||||||
|
nodeIpc.server.broadcast('message', payload)
|
||||||
|
}
|
||||||
|
|
||||||
mainWindow.webContents.on('did-finish-load', function () {
|
mainWindow.webContents.on('did-finish-load', function () {
|
||||||
if (finderProcess == null) {
|
if (finderProcess == null) {
|
||||||
|
var finderArgv = [path.resolve(__dirname, 'finder.js'), '--finder']
|
||||||
|
if (_.find(process.argv, a => a === '--hot')) finderArgv.push('--hot')
|
||||||
finderProcess = ChildProcess
|
finderProcess = ChildProcess
|
||||||
.execFile(process.execPath, [path.resolve(__dirname, 'finder.js'), '--finder'])
|
.execFile(process.execPath, finderArgv)
|
||||||
finderProcess.stdout.setEncoding('utf8')
|
|
||||||
finderProcess.stderr.setEncoding('utf8')
|
nodeIpc.server.start()
|
||||||
finderProcess.stdout.on('data', format)
|
|
||||||
finderProcess.stderr.on('data', errorFormat)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (update != null) {
|
if (update != null) {
|
||||||
@@ -115,48 +166,6 @@ app.on('ready', function () {
|
|||||||
mainWindow.show()
|
mainWindow.show()
|
||||||
})
|
})
|
||||||
|
|
||||||
function format (payload) {
|
|
||||||
// console.log('from finder >> ', payload)
|
|
||||||
try {
|
|
||||||
payload = JSON.parse(payload)
|
|
||||||
} catch (e) {
|
|
||||||
console.log('Not parsable payload : ', payload)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch (payload.type) {
|
|
||||||
case 'log':
|
|
||||||
console.log('FINDER(stdout): ' + payload.data)
|
|
||||||
break
|
|
||||||
case 'show-main-window':
|
|
||||||
mainWindow.show()
|
|
||||||
break
|
|
||||||
case 'copy-finder':
|
|
||||||
mainWindow.webContents.send('copy-finder')
|
|
||||||
break
|
|
||||||
case 'request-data':
|
|
||||||
mainWindow.webContents.send('request-data')
|
|
||||||
break
|
|
||||||
case 'quit-app':
|
|
||||||
appQuit = true
|
|
||||||
app.quit()
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function errorFormat (output) {
|
|
||||||
console.error('FINDER(stderr):' + output)
|
|
||||||
}
|
|
||||||
|
|
||||||
function emitToFinder (type, data) {
|
|
||||||
if (!finderProcess) {
|
|
||||||
console.log('finder process is not ready')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var payload = {
|
|
||||||
type: type,
|
|
||||||
data: data
|
|
||||||
}
|
|
||||||
finderProcess.stdin.write(JSON.stringify(payload), 'utf-8')
|
|
||||||
}
|
|
||||||
|
|
||||||
var userDataPath = app.getPath('userData')
|
var userDataPath = app.getPath('userData')
|
||||||
if (!jetpack.cwd(userDataPath).exists('keymap.json')) {
|
if (!jetpack.cwd(userDataPath).exists('keymap.json')) {
|
||||||
|
|||||||
@@ -4,9 +4,10 @@
|
|||||||
"description": "Boost App",
|
"description": "Boost App",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "set BOOST_ENV=development&& electron ./main.js",
|
"start": "electron ./index.js",
|
||||||
|
"hot": "electron ./index.js --hot",
|
||||||
"webpack": "webpack-dev-server --hot --inline --config webpack.config.js",
|
"webpack": "webpack-dev-server --hot --inline --config webpack.config.js",
|
||||||
"compile": "NODE_ENV=production webpack --config webpack.config.production.js",
|
"compile": "webpack --config webpack.config.production.js",
|
||||||
"pack:osx": "electron-packager ./ Boost --app-version=$npm_package_version $npm_package_config_platform $npm_package_config_version $npm_package_config_ignore --overwrite --out=\"dist\"",
|
"pack:osx": "electron-packager ./ Boost --app-version=$npm_package_version $npm_package_config_platform $npm_package_config_version $npm_package_config_ignore --overwrite --out=\"dist\"",
|
||||||
"codesign": "codesign --verbose --deep --force --sign \"MAISIN solutions Inc.\" dist/Boost-darwin-x64/Boost.app",
|
"codesign": "codesign --verbose --deep --force --sign \"MAISIN solutions Inc.\" dist/Boost-darwin-x64/Boost.app",
|
||||||
"build:osx": "electron-builder \"dist/Boost-darwin-x64/Boost.app\" --platform=osx --out=\"dist\" --config=\"./builder-config.json\"",
|
"build:osx": "electron-builder \"dist/Boost-darwin-x64/Boost.app\" --platform=osx --out=\"dist\" --config=\"./builder-config.json\"",
|
||||||
@@ -48,6 +49,7 @@
|
|||||||
"markdown-it-emoji": "^1.1.0",
|
"markdown-it-emoji": "^1.1.0",
|
||||||
"md5": "^2.0.0",
|
"md5": "^2.0.0",
|
||||||
"moment": "^2.10.3",
|
"moment": "^2.10.3",
|
||||||
|
"node-ipc": "^5.0.0",
|
||||||
"socket.io-client": "^1.3.6",
|
"socket.io-client": "^1.3.6",
|
||||||
"superagent": "^1.2.0",
|
"superagent": "^1.2.0",
|
||||||
"superagent-promise": "^1.0.3"
|
"superagent-promise": "^1.0.3"
|
||||||
|
|||||||
Reference in New Issue
Block a user