refacto(storage): new storage system

This commit is contained in:
Toinane
2017-08-02 15:32:04 +02:00
parent 5287b2f0f8
commit 8eaffeb61f
4 changed files with 174 additions and 126 deletions
+60 -59
View File
@@ -1,75 +1,76 @@
'use strict';
const {BrowserWindow} = require('electron');
const config = require('../storage');
let win, dirname, settings;
module.exports = (dirname, storage) => {
/**
* [init]
* @return {void} [new Colorpicker]
*/
let init = folder => {
dirname = folder;
config.getSettings('colorpicker').then(config => {
settings = config;
let win;
/**
* [init]
* @return {void} [new Colorpicker]
*/
let init = () => {
const size = storage.get('size');
if(win === null || win === undefined) {
console.log(config)
createWindow(settings.size.width, settings.size.height, settings.pos.x, settings.pos.y);
createWindow(size.width, size.height, 200, 200);
} else { win.show(); }
});
};
};
/**
* [createWindow - create new Window]
* @param {int} width [width of the window]
* @param {int} height [height of the window]
* @return {void}
*/
let createWindow = (width, height, x, y) => {
win = new BrowserWindow({
frame:false,
'auto-hide-menu-bar': true,
width: width,
height: height,
x: x,
y: y,
minWidth: 438,
minHeight: 139,
icon: `${dirname}/build/logo.png`
});
/**
* [createWindow - create new Window]
* @param {int} width [width of the window]
* @param {int} height [height of the window]
* @return {void}
*/
let createWindow = (width, height, x, y) => {
win = new BrowserWindow({
frame:false,
'auto-hide-menu-bar': true,
width: width,
height: height,
x: x,
y: y,
minWidth: 438,
minHeight: 139,
icon: `${dirname}/build/logo.png`
});
win.loadURL(`file://${dirname}/views/colorpicker.html`);
win.loadURL(`file://${dirname}/views/colorpicker.html`);
win.on('closed', event => {
win = undefined;
});
win.on('closed', event => {
win = undefined;
});
windowEvents(win);
};
windowEvents(win);
};
/**
* [windowEvents - BrowserWindow events]
* @param {BrowserWindow} win [current window]
* @return {void}
*/
let windowEvents = win => {
/**
* [windowEvents - BrowserWindow events]
* @param {BrowserWindow} win [current window]
* @return {void}
*/
let windowEvents = win => {
win.on('resize', event => {
const size = win.getBounds();
settings.size.width = size.width;
settings.size.height = size.height;
config.saveSettings('colorpicker', settings);
});
win.on('resize', event => {
const size = win.getBounds();
storage.add({
size: {
width: size.width,
height: size.height
}
});
});
win.on('move', event => {
const size = win.getBounds();
settings.pos.x = size.x;
settings.pos.y = size.y;
config.saveSettings('colorpicker', settings);
});
};
// win.on('move', event => {
// const size = win.getBounds();
// settings.pos.x = size.x;
// settings.pos.y = size.y;
// config.saveSettings('colorpicker', settings);
// });
};
module.exports = {
init: init
return {
init: init
};
}
+3 -3
View File
@@ -1,7 +1,7 @@
'use strict';
module.exports = {
colorpicker: require('./colorpicker'),
module.exports = (dirname, storage) => ({
colorpicker: require('./colorpicker')(dirname, storage),
hexacolor: require('./hexacolor'),
picker: require('./picker')
}
});
+9 -8
View File
@@ -1,13 +1,11 @@
'use strict';
const {app, Tray, Menu} = require('electron');
const settings = require('./storage');
const {colorpicker, hexacolor, picker} = require('./browsers');
const storage = require('./storage');
const {colorpicker, hexacolor, picker} = require('./browsers')(__dirname, storage);
let tray;
settings.init('colorpicker');
let createTray = () => {
if (tray) return;
tray = new Tray(`${__dirname}/ressources/tray-black@3x.png`);
@@ -42,10 +40,13 @@ let setMenu = () => {
}
app.on('ready', () => {
createTray();
setMenu();
colorpicker.init(__dirname);
//picker.init(__dirname);
storage.init()
.then(() => {
createTray();
setMenu();
colorpicker.init();
//picker.init(__dirname);
});
});
app.on('activate', () => {
+102 -56
View File
@@ -1,67 +1,71 @@
'use strict';
const storage = require('electron-json-storage');
// @TODO utiliser electron-json-storage quand async & await est possible
const electron_storage = require('electron-json-storage');
let settings = {};
let templateWindows = {
'size': { 'width': 484, 'height': 190 },
'pos': { 'x': 300, 'y': 300},
'buttonsPosition': 'right',
'buttonsType': 'window'
};
let templateMacOS = {
'size': { 'width': 484, 'height': 190 },
'pos': { 'x': 300, 'y': 300},
'buttonsPosition': 'left',
'buttonsType': 'osx'
};
let templaceLinux = {
'size': { 'width': 484, 'height': 190 },
'pos': { 'x': 300, 'y': 300},
'buttonsPosition': 'right',
'buttonsType': 'linux'
};
let storage, template, defaultStorage;
/**
* [init - init settings]
* @return {Promise} [promise for save/load settings]
* [init - init storage]
* @return {Promise} [promise when initialized]
*/
let init = name => (
let init = () => (
new Promise((resolve, reject) => (
storage.has(name, (err, exist) => {
electron_storage.has('colorpicker', (err, exist) => {
if (err) throw err;
if (exist) { resolve(getSettings(name)); }
else { resolve(initDefaultSettings(name)); }
if (exist) { resolve(fetch()); }
else {
storage = defaultStorage;
resolve(save());
}
})
))
);
/**
* [getSettings - return settings]
* @return {object} [App settings]
* [fetch - fetch storage]
* @return {Promise} [promise when fetched]
*/
let getSettings = name => (
let fetch = () => (
new Promise((resolve, reject) => {
console.log('get Settings');
storage.get(name, (err, data) => {
electron_storage.get('colorpicker', (err, data) => {
if (err) throw err;
settings = data;
resolve(data);
storage = data;
resolve(true);
});
})
);
/**
* [saveSettings - save settings]
* @param {[type]} name [description]
* @param {[type]} config [description]
* @return {[type]} [description]
* [get - return settings of target browser]
* @param {string} el [element to get]
* @param {string} name [name of the target browser]
* @return {string|Object} [settings string or object]
*/
let saveSettings = (name, config) => (
let get = (el, name) => {
name = name ? name : 'colorpicker';
return storage[name][el];
}
/**
* [add - add object settings to storage]
* @param {Object} payload [object setting to add & save]
* @param {string} name [name of the target browser]
*/
let add = (payload, name) => (
new Promise((resolve, reject) => {
settings = config;
storage.set(name, config, (err, data) => {
name = name ? name : 'colorpicker';
Object.assign(storage[name], payload);
resolve(save());
})
)
/**
* [save - save current storage]
* @return {Promise} [promise when saved]
*/
let save = () => (
new Promise((resolve, reject) => {
electron_storage.set('colorpicker', storage, (err, data) => {
if (err) throw err;
resolve(true);
});
@@ -69,24 +73,66 @@ let saveSettings = (name, config) => (
);
/**
* [initDefaultSettings - save default settings to storage]
* @return {Promise} [promise for save settings]
* [reset - reset storage to default]
*/
let initDefaultSettings = name => {
console.log('Init default settings');
switch(process.platform) {
case 'darwin': settings = templateMacOS; break;
case 'win32': settings = templateWindows; break;
case 'linux': settings = templaceLinux; break;
case 'freebsd': settings = templaceLinux; break;
case 'sunos': settings = templaceLinux; break;
default: settings = templateMacOS; break;
}
return saveSettings(name, settings);
let reset = () => {
electron_storage.remove('colorpicker');
storage = defaultStorage;
save();
}
/**
* [platform - get actual platfom]
* @return {string} [actual platform]
*/
let platform = () => {
switch(process.platform) {
case 'darwin': return 'darwin'; break;
case 'win32': return 'windows'; break;
case 'linux': return 'linux'; break;
case 'freebsd': return 'linux'; break;
case 'sunos': return 'linux'; break;
default: return 'darwin'; break;
}
return save(name, storage);
}
/**
* [template - default settings for each platform]
* @type {Object}
*/
template = {
windows: {
buttonsPosition: 'right',
buttonsType: 'window'
},
darwin: {
buttonsPosition: 'left',
'buttonsType': 'osx'
},
linux: {
buttonsPosition: 'right',
buttonsType: 'linux'
}
};
/**
* [defaultStorage - default storage]
* @type {Object}
*/
defaultStorage = {
colorpicker: {
size: { width: 484, height: 190 },
buttonsPosition: template[platform()]['buttonsPosition'],
buttonsType: template[platform()]['buttonsType']
},
hexacolor: {},
picker: {}
};
module.exports = {
init: init,
getSettings: getSettings,
saveSettings: saveSettings
get: get,
add: add,
reset, reset
}