From 5df0755252ec158d895055767157d0044622c94c Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Sun, 10 Jan 2016 04:25:00 +0900 Subject: [PATCH] enhance applying config --- browser/components/CodeEditor.js | 15 ++++---- browser/components/MarkdownPreview.js | 16 ++++----- browser/lib/fetchConfig.js | 10 ++++++ .../main/modal/Preference/AppSettingTab.js | 3 +- lib/config.js | 35 ++++++++++++++----- lib/finder-window.js | 12 ++++--- lib/main-app.js | 3 +- 7 files changed, 62 insertions(+), 32 deletions(-) create mode 100644 browser/lib/fetchConfig.js diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index cf2cff4e..f6d4c353 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -2,6 +2,7 @@ import React, { PropTypes } from 'react' import ReactDOM from 'react-dom' import modes from '../lib/modes' import _ from 'lodash' +import fetchConfig from '../lib/fetchConfig' const electron = require('electron') const remote = electron.remote @@ -9,17 +10,16 @@ const ipc = electron.ipcRenderer const ace = window.ace -function getConfig () { - return Object.assign({}, remote.getGlobal('config')) -} - -let config = getConfig() +let config = fetchConfig() +ipc.on('config-apply', function (e, newConfig) { + config = newConfig +}) export default class CodeEditor extends React.Component { constructor (props) { super(props) - this.configApplyHandler = e => this.handleConfigApply(e) + this.configApplyHandler = (e, config) => this.handleConfigApply(e, config) this.changeHandler = e => this.handleChange(e) this.state = { @@ -111,8 +111,7 @@ export default class CodeEditor extends React.Component { } } - handleConfigApply () { - config = getConfig() + handleConfigApply (e, config) { this.setState({ fontSize: config['editor-font-size'], fontFamily: config['editor-font-family'], diff --git a/browser/components/MarkdownPreview.js b/browser/components/MarkdownPreview.js index eddff52e..cc19d754 100644 --- a/browser/components/MarkdownPreview.js +++ b/browser/components/MarkdownPreview.js @@ -3,10 +3,10 @@ import markdown from '../lib/markdown' import ReactDOM from 'react-dom' import sanitizeHtml from '@rokt33r/sanitize-html' import _ from 'lodash' +import fetchConfig from '../lib/fetchConfig' const electron = require('electron') const shell = electron.shell -const remote = electron.remote const ipc = electron.ipcRenderer const katex = window.katex @@ -66,17 +66,16 @@ function math2Katex (display) { } } -function getConfig () { - return Object.assign({}, remote.getGlobal('config')) -} - -let config = getConfig() +let config = fetchConfig() +ipc.on('config-apply', function (e, newConfig) { + config = newConfig +}) export default class MarkdownPreview extends React.Component { constructor (props) { super(props) - this.configApplyHandler = e => this.handleConfigApply(e) + this.configApplyHandler = (e, config) => this.handleConfigApply(e, config) this.state = { fontSize: config['preview-font-size'], @@ -160,8 +159,7 @@ export default class MarkdownPreview extends React.Component { } } - handleConfigApply () { - config = getConfig() + handleConfigApply (e, config) { this.setState({ fontSize: config['preview-font-size'], fontFamily: config['preview-font-family'] diff --git a/browser/lib/fetchConfig.js b/browser/lib/fetchConfig.js new file mode 100644 index 00000000..a59bbf97 --- /dev/null +++ b/browser/lib/fetchConfig.js @@ -0,0 +1,10 @@ +const electron = require('electron') +const remote = electron.remote +const jetpack = require('fs-jetpack') + +const userDataPath = remote.app.getPath('userData') +const configFile = 'config.json' + +export default function fetchConfig () { + return Object.assign({}, JSON.parse(jetpack.cwd(userDataPath).read(configFile, 'utf-8'))) +} diff --git a/browser/main/modal/Preference/AppSettingTab.js b/browser/main/modal/Preference/AppSettingTab.js index 0cef001a..8b73a6d3 100644 --- a/browser/main/modal/Preference/AppSettingTab.js +++ b/browser/main/modal/Preference/AppSettingTab.js @@ -1,6 +1,7 @@ import React, { PropTypes } from 'react' import linkState from 'browser/lib/linkState' import { updateUser } from '../../actions' +import fetchConfig from 'browser/lib/fetchConfig' const electron = require('electron') const ipc = electron.ipcRenderer @@ -12,7 +13,7 @@ export default class AppSettingTab extends React.Component { constructor (props) { super(props) let keymap = Object.assign({}, remote.getGlobal('keymap')) - let config = Object.assign({}, remote.getGlobal('config')) + let config = Object.assign({}, fetchConfig()) let userName = props.user != null ? props.user.name : null this.state = { diff --git a/lib/config.js b/lib/config.js index d1b8303a..6e4766c0 100644 --- a/lib/config.js +++ b/lib/config.js @@ -2,6 +2,7 @@ const electron = require('electron') const app = electron.app const ipc = electron.ipcMain const jetpack = require('fs-jetpack') +const nodeIpc = require('@rokt33r/node-ipc') const defaultConfig = { 'editor-font-size': '14', @@ -23,35 +24,53 @@ function getConfig () { return JSON.parse(jetpack.cwd(userDataPath).read(configFile, 'utf-8')) } catch (err) {} } - return {} + return null } +var config = null + function saveConfig () { var content try { - content = JSON.stringify(global.config) + content = JSON.stringify(config) } catch (e) { - global.config = {} - content = JSON.stringify(global.config) + config = {} + content = JSON.stringify(config) } jetpack.cwd(userDataPath).file(configFile, { content }) } // Init -global.config = Object.assign({}, defaultConfig, getConfig()) +config = getConfig() +if (config == null) { + config = Object.assign({}, defaultConfig) + saveConfig() +} -if (global.config['disable-direct-write']) { +config = Object.assign({}, defaultConfig, config) + +if (config['disable-direct-write']) { app.commandLine.appendSwitch('disable-direct-write') } +function emitToFinder (type, data) { + var payload = { + type: type, + data: data + } + + nodeIpc.server.broadcast('message', payload) +} + app.on('ready', function () { const mainWindow = require('./main-window') function applyConfig () { - mainWindow.webContents.send('config-apply') + mainWindow.webContents.send('config-apply', config) + emitToFinder('config-apply', config) } ipc.on('configUpdated', function (event, newConfig) { - global.config = Object.assign({}, defaultConfig, global.config, newConfig) + config = Object.assign({}, defaultConfig, config, newConfig) saveConfig() applyConfig() }) diff --git a/lib/finder-window.js b/lib/finder-window.js index 0ff59731..36e8f825 100644 --- a/lib/finder-window.js +++ b/lib/finder-window.js @@ -45,16 +45,20 @@ nodeIpc.connectTo( nodeIpc.of.main.on( 'message', function (payload) { - switch (payload.type) { - case 'open-finder': - if (isFinderLoaded) { + if (isFinderLoaded) { + switch (payload.type) { + case 'open-finder': if (finderWindow.isFocused()) { hideFinder() } else { openFinder() } + break + case 'config-apply': { + finderWindow.webContents.send('config-apply', payload.data) + break } - break + } } } ) diff --git a/lib/main-app.js b/lib/main-app.js index ca8d4cdc..ff43616c 100644 --- a/lib/main-app.js +++ b/lib/main-app.js @@ -157,7 +157,7 @@ updater.on('update-downloaded', (info) => { nodeIpc.config.id = 'node' nodeIpc.config.retry = 1500 -// nodeIpc.config.silent = true +nodeIpc.config.silent = true function spawnFinder() { if (process.platform === 'darwin') { @@ -276,7 +276,6 @@ app.on('ready', function () { }) if (finderProcess == null && process.platform === 'darwin') { - console.log('fired only once ') spawnFinder() } else { finderWindow = require('./finder-window')