diff --git a/browser/main/lib/ConfigManager.js b/browser/main/lib/ConfigManager.js new file mode 100644 index 00000000..71153544 --- /dev/null +++ b/browser/main/lib/ConfigManager.js @@ -0,0 +1,45 @@ +import _ from 'lodash' + +const defaultConfig = { + zoom: 1, + isSideNavFolded: false +} + +function _validate (config) { + if (!_.isObject(config)) return false + if (!_.isNumber(config.zoom) || config.zoom < 0) return false + if (!_.isBoolean(config.isSideNavFolded)) return false + + return true +} + +function _save (config) { + window.localStorage.setItem('config', JSON.stringify(config)) +} + +function get () { + let config = window.localStorage.getItem('config') + + try { + config = JSON.parse(config) + if (!_validate(config)) throw new Error('INVALID CONFIG') + } catch (err) { + console.warn('Boostnote resets the malformed configuration.') + config = defaultConfig + _save(config) + } + + return config +} + +function set (updates) { + let currentConfig = get() + let newConfig = Object.assign({}, defaultConfig, currentConfig, updates) + if (!_validate(newConfig)) throw new Error('INVALID CONFIG') + _save(newConfig) +} + +export default { + get, + set +} diff --git a/browser/main/lib/ZoomManager.js b/browser/main/lib/ZoomManager.js new file mode 100644 index 00000000..463df222 --- /dev/null +++ b/browser/main/lib/ZoomManager.js @@ -0,0 +1,30 @@ +import ConfigManager from './ConfigManager' + +const electron = require('electron') +const { remote } = electron + +_init() + +function _init () { + setZoom(getZoom(), true) +} + +function _saveZoom (zoomFactor) { + ConfigManager.set({zoom: zoomFactor}) +} + +function setZoom (zoomFactor, noSave = false) { + if (!noSave) _saveZoom(zoomFactor) + remote.getCurrentWebContents().setZoomFactor(zoomFactor) +} + +function getZoom () { + let config = ConfigManager.get() + + return config.zoom +} + +export default { + setZoom, + getZoom +}