mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-13 17:56:25 +00:00
117 lines
2.7 KiB
JavaScript
117 lines
2.7 KiB
JavaScript
const electron = require('electron')
|
|
const app = electron.app
|
|
const ipc = electron.ipcMain
|
|
const Menu = electron.Menu
|
|
const globalShortcut = electron.globalShortcut
|
|
const jetpack = require('fs-jetpack')
|
|
const mainWindow = require('./main-window')
|
|
const nodeIpc = require('@rokt33r/node-ipc')
|
|
const _ = require('lodash')
|
|
|
|
const OSX = global.process.platform === 'darwin'
|
|
|
|
const defaultKeymap = {
|
|
toggleFinder: OSX ? 'Cmd + Alt + S' : 'Super + Alt + S',
|
|
toggleMain: OSX ? 'Cmd + Alt + L' : 'Super + Alt + E'
|
|
}
|
|
const keymapFilename = 'keymap.json'
|
|
|
|
var userDataPath = app.getPath('userData')
|
|
|
|
function getKeymap () {
|
|
var userDataPath = app.getPath('userData')
|
|
if (jetpack.cwd(userDataPath).exists(keymapFilename)) {
|
|
try {
|
|
return JSON.parse(jetpack.cwd(userDataPath).read(keymapFilename, 'utf-8'))
|
|
} catch (err) {}
|
|
}
|
|
return {}
|
|
}
|
|
|
|
function saveKeymap () {
|
|
var content
|
|
try {
|
|
content = JSON.stringify(global.keymap)
|
|
} catch (e) {
|
|
global.keymap = {}
|
|
content = JSON.stringify(global.keymap)
|
|
}
|
|
jetpack.cwd(userDataPath).file(keymapFilename, { content })
|
|
}
|
|
|
|
function emitToFinder (type, data) {
|
|
var payload = {
|
|
type: type,
|
|
data: data
|
|
}
|
|
|
|
nodeIpc.server.broadcast('message', payload)
|
|
}
|
|
|
|
function toggleFinder () {
|
|
emitToFinder('open-finder')
|
|
mainWindow.webContents.send('open-finder', {})
|
|
}
|
|
|
|
function toggleMain () {
|
|
if (mainWindow.isFocused()) {
|
|
if (process.platform === 'darwin') {
|
|
Menu.sendActionToFirstResponder('hide:')
|
|
} else {
|
|
mainWindow.minimize()
|
|
}
|
|
} else {
|
|
if (process.platform === 'darwin') {
|
|
mainWindow.show()
|
|
} else {
|
|
mainWindow.minimize()
|
|
mainWindow.restore()
|
|
}
|
|
mainWindow.webContents.send('top-focus-search')
|
|
}
|
|
}
|
|
|
|
// Init
|
|
global.keymap = Object.assign({}, defaultKeymap, getKeymap())
|
|
|
|
function registerKey (name, callback) {
|
|
if (_.isString(global.keymap[name]) && global.keymap[name].trim().length > 0) {
|
|
globalShortcut.register(global.keymap[name], callback)
|
|
}
|
|
}
|
|
|
|
function registerAllKeys (broadcast) {
|
|
if (broadcast == null) broadcast = true
|
|
|
|
var errors = []
|
|
try {
|
|
registerKey('toggleFinder', toggleFinder)
|
|
} catch (err) {
|
|
errors.push('toggleFinder')
|
|
}
|
|
try {
|
|
registerKey('toggleMain', toggleMain)
|
|
} catch (err) {
|
|
errors.push('toggleMain')
|
|
}
|
|
|
|
if (broadcast) {
|
|
if (errors.length === 0) {
|
|
mainWindow.webContents.send('APP_SETTING_DONE', {})
|
|
} else {
|
|
mainWindow.webContents.send('APP_SETTING_ERROR', {
|
|
message: 'Failed to apply hotkey: ' + errors.join(' ')
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
registerAllKeys(false)
|
|
|
|
ipc.on('hotkeyUpdated', function (event, newKeymap) {
|
|
global.keymap = Object.assign({}, defaultKeymap, global.keymap, newKeymap)
|
|
saveKeymap()
|
|
globalShortcut.unregisterAll()
|
|
registerAllKeys()
|
|
})
|