settings store

This commit is contained in:
Antelle 2015-12-05 16:57:43 +03:00
parent db062cec27
commit 6aa32b1dc0
7 changed files with 69 additions and 37 deletions

View File

@ -0,0 +1,41 @@
'use strict';
var Launcher = require('./launcher'),
StringUtil = require('../util/string-util');
var SettingsStore = {
fileName: function(key) {
return key + '.json';
},
load: function(key) {
try {
if (Launcher) {
var settingsFile = Launcher.getUserDataPath(this.fileName(key));
if (Launcher.fileExists(settingsFile)) {
return JSON.parse(Launcher.readFile(settingsFile, 'utf8'));
}
} else {
var data = localStorage[StringUtil.camelCase(key)];
return JSON.parse(data);
}
} catch (e) {
console.error('Error loading ' + key, e);
}
return null;
},
save: function(key, data) {
try {
if (Launcher) {
Launcher.writeFile(Launcher.getUserDataPath(this.fileName(key)), JSON.stringify(data));
} else if (typeof localStorage !== 'undefined') {
localStorage[StringUtil.camelCase(key)] = JSON.stringify(data);
}
} catch (e) {
console.error('Error saving ' + key, e);
}
}
};
module.exports = SettingsStore;

View File

@ -1,13 +1,11 @@
'use strict';
var Backbone = require('backbone'),
Launcher = require('../comp/launcher');
var FileName = 'app-settings.json';
SettingsStore = require('../comp/settings-store');
var AppSettingsModel = Backbone.Model.extend({
defaults: {
theme: 'd',
theme: 'fb',
expandGroups: true,
listViewWidth: null,
menuViewWidth: null,
@ -27,34 +25,15 @@ var AppSettingsModel = Backbone.Model.extend({
},
load: function() {
try {
var data;
if (Launcher) {
var settingsFile = Launcher.getUserDataPath(FileName);
if (Launcher.fileExists(settingsFile)) {
data = JSON.parse(Launcher.readFile(settingsFile, 'utf8'));
}
} else if (typeof localStorage !== 'undefined' && localStorage.appSettings) {
data = JSON.parse(localStorage.appSettings);
}
if (data) {
this.set(data, {silent: true});
}
} catch (e) {
console.error('Error loading settings', e);
var data = SettingsStore.load('app-settings');
if (data) {
if (data.theme === 'd') { data.theme = 'db'; } // TODO: remove in v0.6
this.set(data, {silent: true});
}
},
save: function() {
try {
if (Launcher) {
Launcher.writeFile(Launcher.getUserDataPath(FileName), JSON.stringify(this.attributes));
} else if (typeof localStorage !== 'undefined') {
localStorage.appSettings = JSON.stringify(this.attributes);
}
} catch (e) {
console.error('Error saving settings', e);
}
SettingsStore.save('app-settings', this.attributes);
}
});

View File

@ -1,6 +1,7 @@
'use strict';
var Backbone = require('backbone');
var Backbone = require('backbone'),
SettingsStore = require('../comp/settings-store');
var UpdateModel = Backbone.Model.extend({
defaults: {
@ -19,9 +20,9 @@ var UpdateModel = Backbone.Model.extend({
},
load: function() {
if (localStorage.updateInfo) {
var data = SettingsStore.load('update-info');
if (data) {
try {
var data = JSON.parse(localStorage.updateInfo);
_.each(data, function(val, key) {
if (/Date$/.test(key)) {
data[key] = val ? new Date(val) : null;
@ -39,7 +40,7 @@ var UpdateModel = Backbone.Model.extend({
delete attr[key];
}
});
localStorage.updateInfo = JSON.stringify(attr);
SettingsStore.save('update-info', attr);
}
});

View File

@ -0,0 +1,11 @@
'use strict';
var StringUtil = {
camelCaseRegex: /\-./g,
camelCase: function(str) {
return str.replace(this.camelCaseRegex, function(match) { return match[1].toUpperCase(); });
}
};
module.exports = StringUtil;

View File

@ -32,9 +32,9 @@ var SettingsGeneralView = Backbone.View.extend({
},
allThemes: {
d: 'default',
fb: 'flat blue',
wh: 'white'
fb: 'Flat blue',
db: 'Dark brown',
wh: 'White'
},
initialize: function() {

View File

@ -1,5 +1,5 @@
$themes: ();
@import "default";
@import "dark-brown";
@import "flat-blue";
@import "white";

View File

@ -1,5 +1,5 @@
$themes: map-merge($themes, (
d: (
db: (
background-color: #342F2E,
medium-color: #FED9D8,
text-color: #FFEAE9,