Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(UI): global settings #25

Merged
merged 14 commits into from
May 18, 2022
6 changes: 3 additions & 3 deletions src/app/electron-main/main.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { app, BrowserWindow, ipcMain, screen } from 'electron';
import { EoUpdater } from './updater';
import * as path from 'path';
import * as os from 'os'
import * as os from 'os';
import ModuleManager from '../../platform/node/extension-manager/lib/manager';
import { ModuleInfo, ModuleManagerInterface } from '../../platform/node/extension-manager';
import { StorageHandleStatus, StorageProcessType } from '../../platform/browser/IndexedDB';
Expand All @@ -18,7 +18,7 @@ export const subView = {
appView: null,
mainView: null,
};
const eoUpdater = new EoUpdater()
const eoUpdater = new EoUpdater();
const moduleManager: ModuleManagerInterface = ModuleManager();
const configuration: ConfigurationInterface = Configuration();
// Remote
Expand Down Expand Up @@ -219,7 +219,7 @@ try {
} else if (arg.action === 'getFeature') {
returnValue = moduleManager.getFeature(arg.data.featureKey);
} else if (arg.action === 'saveSettings') {
returnValue = configuration.saveSettings(arg.data.settings);
returnValue = configuration.saveSettings(arg.data);
} else if (arg.action === 'saveModuleSettings') {
returnValue = configuration.saveModuleSettings(arg.data.moduleID, arg.data.settings);
} else if (arg.action === 'deleteModuleSettings') {
Expand Down
2 changes: 2 additions & 0 deletions src/app/electron-main/updater.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const appVersion = require('../../../package.json').version;
export class EoUpdater {
constructor() {
this.watchLog();
// 是否自动更新
// autoUpdater.autoDownload = window.eo.getModuleSettings('common.app.autoUpdate') !== false;
if (appVersion.includes('beta')) autoUpdater.channel = 'beta';
console.log('appVersion', appVersion, autoUpdater.channel);
}
Expand Down
4 changes: 2 additions & 2 deletions src/platform/electron-browser/preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ window.eo.storageRemote = (args) => {
return output;
};

window.eo.saveSettings = (settings) => {
return ipcRenderer.sendSync('eo-sync', { action: 'saveSettings', data: { settings: settings } });
window.eo.saveSettings = ({ settings, nestedSettings }) => {
return ipcRenderer.sendSync('eo-sync', { action: 'saveSettings', data: { settings, nestedSettings } });
};

window.eo.saveModuleSettings = (moduleID, settings) => {
Expand Down
51 changes: 28 additions & 23 deletions src/platform/node/configuration/lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import * as path from 'path';
import { fileExists, readJson, writeJson } from '../../../../shared/node/file';

export class Configuration implements ConfigurationInterface {

/**
* 配置文件地址
*/
Expand Down Expand Up @@ -36,65 +35,71 @@ export class Configuration implements ConfigurationInterface {
* 保存配置文件
*/
private saveConfig(data: ConfigurationValueInterface): boolean {
return writeJson(this.configPath, data);
return writeJson(this.configPath, data, true);
}

/**
* 保存全局配置
*/
saveSettings(settings: ConfigurationValueInterface): boolean {
saveSettings({ settings = {}, nestedSettings = {} }): boolean {
let data = this.loadConfig();
data.settings = settings;
return this.saveConfig(data);
data.nestedSettings = nestedSettings;
return this.saveConfig(data);
}

/**
* 保存模块配置
* @param moduleID
* @param settings
* @param moduleID
* @param settings
*/
saveModuleSettings(moduleID: string, settings: ConfigurationValueInterface): boolean {
let data = this.loadConfig();
if (!data.settings) {
data.settings = {};
}
data.settings ??= {};
data.nestedSettings ??= {};
data.settings[moduleID] = settings;
const propArr = moduleID.split('.');
const target = propArr.slice(0, -1).reduce((p, k) => p[k], data.nestedSettings);
target[propArr.at(-1)] = settings;
return this.saveConfig(data);
}

/**
* 删除模块配置
* @param moduleID
* @returns
* @param moduleID
* @returns
*/
deleteModuleSettings(moduleID: string): boolean {
let data = this.loadConfig();
if (data.settings && data.settings[moduleID]) {
delete(data.settings[moduleID]);
delete data.settings[moduleID];
return this.saveConfig(data);
}
return false;
}

/**
* 获取全局配置
* 获取全局配置
* @returns
*/
getSettings(): ConfigurationValueInterface {
const data = this.loadConfig();
return data.settings;
return data;
}

/**
* 获取模块配置
* @param moduleID
* @returns
* 获取模块配置, 以小数点分割的属性链,如:common.app.update
* @param section
* @returns
*/
getModuleSettings(moduleID: string): ConfigurationValueInterface {
const settings = this.getSettings();
return settings[moduleID] || {};
}

getModuleSettings(section?: string): ConfigurationValueInterface {
const localSettings = this.getSettings();
localSettings.nestedSettings ??= {};
if (section) {
return section.split('.').reduce((p, k) => p[k], localSettings.nestedSettings);
}
return localSettings.nestedSettings;
}
}

export default () => new Configuration();
12 changes: 6 additions & 6 deletions src/platform/node/extension-manager/lib/manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ export class ModuleManager implements ModuleManagerInterface {

/**
* 获取所有功能点列表
* @returns
* @returns
*/
getFeatures(): Map<string, Map<string, object>> {
return this.features;
Expand All @@ -134,11 +134,11 @@ export class ModuleManager implements ModuleManagerInterface {
}
return this.modules.get(moduleID);
}

/**
* 获取某个功能点的集合
* @param featureKey
* @returns
* @param featureKey
* @returns
*/
getFeature(featureKey: string): Map<string, object> {
return this.features.get(featureKey);
Expand Down Expand Up @@ -181,7 +181,7 @@ export class ModuleManager implements ModuleManagerInterface {

/**
* 清除功能点集合中的模块功能点
* @param moduleInfo
* @param moduleInfo
*/
private deleteFeatures(moduleInfo: ModuleInfo) {
if (moduleInfo.features && typeof moduleInfo.features === 'object' && isNotEmpty(moduleInfo.features)) {
Expand All @@ -200,7 +200,7 @@ export class ModuleManager implements ModuleManagerInterface {
private setup(moduleInfo: ModuleInfo) {
if (isNotEmpty(moduleInfo.moduleID)) {
this.set(moduleInfo);
}
}
}

/**
Expand Down
15 changes: 12 additions & 3 deletions src/platform/node/extension-manager/types/manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { ModuleHandlerResult } from './handler';
export enum ModuleType {
system = 'system',
app = 'app',
feature = 'feature'
feature = 'feature',
}

/**
Expand Down Expand Up @@ -58,11 +58,20 @@ export interface ModuleInfo {
sidePosition?: SidePosition;
// 配置项
configuration?: ModuleConfiguration;
/** 贡献点 */
contributes: ModuleContributes;
// 功能点配置
features?: {
[index: string]: object
[index: string]: object;
};
}
/**
* 贡献点
*/

export type ModuleContributes = {
configuration: ModuleConfiguration;
};

/**
* 模块配置项接口
Expand All @@ -71,7 +80,7 @@ export interface ModuleConfiguration {
title: string;
properties: {
[index: string]: ModuleConfigurationField;
}
};
}

/**
Expand Down
10 changes: 5 additions & 5 deletions src/shared/node/file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ import * as path from 'path';
* @param file
* @param data
*/
export const writeJson = (file: string, data: object): boolean => {
return writeFile(file, JSON.stringify(data));
export const writeJson = (file: string, data: object, formatted = false): boolean => {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

第三个配置建议是 opts 对象,不然后续想拓展配置,又要改调用处/提供方

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👌

return writeFile(file, formatted ? JSON.stringify(data, null, 2) : JSON.stringify(data));
};

/**
* Read json file, then return object.
* @param file
*/
export const readJson = (file: string): (object | null) => {
export const readJson = (file: string): object | null => {
const data: string = readFile(file);
if ('' === data) {
return null;
Expand All @@ -37,7 +37,7 @@ export const readFile = (file: string): string => {
/**
* Delete file.
* @param file string
* @returns
* @returns
*/
export const deleteFile = (file: string): boolean => {
try {
Expand All @@ -46,7 +46,7 @@ export const deleteFile = (file: string): boolean => {
} catch (e) {
return false;
}
}
};

/**
* Write data into file.
Expand Down
92 changes: 46 additions & 46 deletions src/workbench/browser/src/app/core/services/theme/theme.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,52 +6,52 @@ export const THEMES = [
key: '森林',
value: 'classic_forest',
},
{
key: '日出',
value: 'classic_sunrise',
},
{
key: '玩具',
value: 'classic_toy',
},
],
},
{
title: '简洁',
lists: [
{
key: '森林',
value: 'clean_forest',
},
{
key: '日出',
value: 'clean_sunrise',
},
{
key: '云',
value: 'clean_cloud',
},
],
},
{
title: '深色',
lists: [
{
key: '夜晚',
value: 'night_black',
},
{
key: '森林',
value: 'night_forest',
},
{
key: '命令行',
value: 'night_cmd',
},
{
key: '日落',
value: 'night_dusk',
},
// {
// key: '日出',
// value: 'classic_sunrise',
// },
// {
// key: '玩具',
// value: 'classic_toy',
// },
],
},
// {
// title: '简洁',
// lists: [
// {
// key: '森林',
// value: 'clean_forest',
// },
// {
// key: '日出',
// value: 'clean_sunrise',
// },
// {
// key: '云',
// value: 'clean_cloud',
// },
// ],
// },
// {
// title: '深色',
// lists: [
// {
// key: '夜晚',
// value: 'night_black',
// },
// {
// key: '森林',
// value: 'night_forest',
// },
// {
// key: '命令行',
// value: 'night_cmd',
// },
// {
// key: '日落',
// value: 'night_dusk',
// },
// ],
// },
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/**
* 注册配置项
*/
class ConfigurationRegistry {
constructor() {}
}

export const configurationRegistry = new ConfigurationRegistry();
Loading