Add core settings storage
This commit is contained in:
parent
0eddaf86eb
commit
4dfe349802
|
@ -21,4 +21,5 @@ Installers/**/*/obj
|
|||
Installers/**/*/packages
|
||||
.vs
|
||||
dist/
|
||||
user.config.json
|
||||
user.config.json
|
||||
tests/data
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
import { DOM, BdUI } from 'ui';
|
||||
import BdCss from './styles/index.scss';
|
||||
import { Events, CssEditor, Globals, PluginManager, ThemeManager, ModuleManager, WebpackModules } from 'modules';
|
||||
import { Events, CssEditor, Globals, PluginManager, ThemeManager, ModuleManager, WebpackModules, Settings } from 'modules';
|
||||
import { ClientLogger as Logger, ClientIPC } from 'common';
|
||||
|
||||
class BetterDiscord {
|
||||
|
@ -21,11 +21,13 @@ class BetterDiscord {
|
|||
window.pm = PluginManager;
|
||||
window.events = Events;
|
||||
window.wpm = WebpackModules;
|
||||
window.bdsettings = Settings;
|
||||
DOM.injectStyle(BdCss, 'bdmain');
|
||||
Events.on('global-ready', this.globalReady.bind(this));
|
||||
}
|
||||
|
||||
async init() {
|
||||
await Settings.loadSettings();
|
||||
await ModuleManager.initModules();
|
||||
await PluginManager.loadAllPlugins();
|
||||
await ThemeManager.loadAllThemes();
|
||||
|
|
|
@ -9,9 +9,69 @@
|
|||
*/
|
||||
|
||||
import defaultSettings from '../data/user.settings.default';
|
||||
import { default as Globals } from './globals';
|
||||
import { FileUtils, ClientLogger as Logger } from 'common';
|
||||
import path from 'path';
|
||||
|
||||
export default class {
|
||||
static async loadSettings() {
|
||||
try {
|
||||
await FileUtils.ensureDirectory(this.dataPath);
|
||||
|
||||
const settingsPath = path.resolve(this.dataPath, 'user.settings.json');
|
||||
const user_config = await FileUtils.readJsonFromFile(settingsPath);
|
||||
const { settings } = user_config;
|
||||
|
||||
this.settings = defaultSettings;
|
||||
|
||||
for (let newCategory of settings) {
|
||||
let category = this.settings.find(c => c.id === newCategory.id);
|
||||
if (!category) continue;
|
||||
|
||||
for (let newSetting of newCategory.settings) {
|
||||
let setting = category.settings.find(s => s.id === newSetting.id);
|
||||
if (!setting) continue;
|
||||
|
||||
setting.enabled = newSetting.enabled;
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
// There was an error loading settings
|
||||
// This probably means that the user doesn't have any settings yet
|
||||
Logger.err('Settings', err);
|
||||
}
|
||||
}
|
||||
|
||||
static async saveSettings() {
|
||||
try {
|
||||
await FileUtils.ensureDirectory(this.dataPath);
|
||||
|
||||
const settingsPath = path.resolve(this.dataPath, 'user.settings.json');
|
||||
await FileUtils.writeJsonToFile(settingsPath, {
|
||||
settings: this.getSettings.map(category => {
|
||||
return {
|
||||
id: category.id,
|
||||
settings: category.settings.map(setting => {
|
||||
return {
|
||||
id: setting.id,
|
||||
enabled: setting.enabled
|
||||
};
|
||||
})
|
||||
};
|
||||
})
|
||||
});
|
||||
} catch (err) {
|
||||
// There was an error loading settings
|
||||
// This probably means that the user doesn't have any settings yet
|
||||
Logger.err('Settings', err);
|
||||
}
|
||||
}
|
||||
|
||||
static get getSettings() {
|
||||
return defaultSettings;
|
||||
return this.settings ? this.settings : defaultSettings;
|
||||
}
|
||||
|
||||
static get dataPath() {
|
||||
return this._dataPath ? this._dataPath : (this._dataPath = Globals.getObject('paths').find(p => p.id === 'data').path);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,14 +126,18 @@
|
|||
enableSetting(cat, id) {
|
||||
switch (cat) {
|
||||
case 'core':
|
||||
return this.coreSettings.find(setting => setting.id === id).enabled = true;
|
||||
this.coreSettings.find(setting => setting.id === id).enabled = true; break;
|
||||
}
|
||||
|
||||
Settings.saveSettings();
|
||||
},
|
||||
disableSetting(cat, id) {
|
||||
switch (cat) {
|
||||
case 'core':
|
||||
return this.coreSettings.find(setting => setting.id === id).enabled = false;
|
||||
this.coreSettings.find(setting => setting.id === id).enabled = false; break;
|
||||
}
|
||||
|
||||
Settings.saveSettings();
|
||||
},
|
||||
openGithub() {
|
||||
console.log('open github?');
|
||||
|
|
|
@ -21,6 +21,7 @@ const __DEV = {
|
|||
clientScriptPath: `${clientScriptPath}/betterdiscord.client.js`
|
||||
}
|
||||
|
||||
const __dataPath = path.resolve(__dirname, '..', '..', 'tests', 'data');
|
||||
const __pluginPath = path.resolve(__dirname, '..', '..', 'tests', 'plugins');
|
||||
const __themePath = path.resolve(__dirname, '..', '..', 'tests', 'themes');
|
||||
|
||||
|
@ -33,6 +34,7 @@ const dummyArgs = {
|
|||
'version': '0.3.1',
|
||||
'paths': [
|
||||
{ 'id': 'base', 'path': 'basePath' },
|
||||
{ 'id': 'data', 'path': __dataPath },
|
||||
{ 'id': 'plugins', 'path': __pluginPath },
|
||||
{ 'id': 'themes', 'path': __themePath }
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue