♻️ 修改系统设置存储方式

This commit is contained in:
muwoo
2023-08-22 17:41:51 +08:00
parent d2d94c13b7
commit f4f91e1639
24 changed files with 202 additions and 110 deletions

View File

@@ -1,4 +1,5 @@
import { BrowserWindow, ipcMain, nativeTheme } from 'electron';
import localConfig from '../common/initLocalConfig';
import path from 'path';
export default () => {
let win: any;
@@ -28,7 +29,6 @@ export default () => {
y: viewInfo.y,
webPreferences: {
webSecurity: false,
enableRemoteModule: true,
backgroundThrottling: false,
contextIsolation: false,
webviewTag: true,
@@ -49,8 +49,9 @@ export default () => {
win = undefined;
});
win.once('ready-to-show', () => {
const darkMode = global.OP_CONFIG.get().perf.common.darkMode;
win.once('ready-to-show', async () => {
const config = await localConfig.getConfig();
const darkMode = config.perf.common.darkMode;
darkMode &&
win.webContents.executeJavaScript(
`document.body.classList.add("dark");window.rubick.theme="dark"`

View File

@@ -43,7 +43,6 @@ export default () => {
height: 600,
webPreferences: {
webSecurity: false,
enableRemoteModule: true,
backgroundThrottling: false,
contextIsolation: false,
webviewTag: true,

View File

@@ -2,6 +2,7 @@ import { app, BrowserWindow, protocol, nativeTheme } from 'electron';
import path from 'path';
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib';
import versonHandler from '../common/versionHandler';
import localConfig from '@/main/common/initLocalConfig';
// eslint-disable-next-line @typescript-eslint/no-var-requires
require('@electron/remote/main').initialize();
@@ -65,8 +66,8 @@ export default () => {
});
// 判断失焦是否隐藏
win.on('blur', () => {
const config = { ...global.OP_CONFIG.get() };
win.on('blur', async () => {
const config = await localConfig.getConfig();
if (config.perf.common.hideOnBlur) {
win.hide();
}

View File

@@ -2,6 +2,7 @@ import { BrowserView, BrowserWindow, session } from 'electron';
import path from 'path';
import commonConst from '../../common/utils/commonConst';
import { PLUGIN_INSTALL_DIR as baseDir } from '@/common/constans/main';
import localConfig from '@/main/common/initLocalConfig';
const getRelativePath = (indexPath) => {
return commonConst.windows()
@@ -78,7 +79,7 @@ export default () => {
});
window.setBrowserView(view);
view.webContents.loadURL(pluginIndexPath);
view.webContents.once('dom-ready', () => {
view.webContents.once('dom-ready', async () => {
if (!view) return;
const height = pluginSetting && pluginSetting.height;
window.setSize(800, height || 660);
@@ -86,7 +87,8 @@ export default () => {
view.setAutoResize({ width: true });
executeHooks('PluginEnter', plugin.ext);
executeHooks('PluginReady', plugin.ext);
darkMode = global.OP_CONFIG.get().perf.common.darkMode;
const config = await localConfig.getConfig();
const darkMode = config.perf.common.darkMode;
darkMode &&
view.webContents.executeJavaScript(
`document.body.classList.add("dark");window.rubick.theme="dark"`

View File

@@ -10,8 +10,9 @@ import {
shell,
} from 'electron';
import { runner, detach } from '../browsers';
import DBInstance from './db';
import fs from 'fs';
import { LocalDb, screenCapture } from '@/core';
import { screenCapture } from '@/core';
import plist from 'plist';
import ks from 'node-key-sender';
@@ -21,14 +22,9 @@ import getCopyFiles from '@/common/utils/getCopyFiles';
import mainInstance from '../index';
const runnerInstance = runner();
const detachInstance = detach();
const dbInstance = new LocalDb(app.getPath('userData'));
dbInstance.init();
class API {
class API extends DBInstance {
public currentPlugin: null | any = null;
private DBKEY = 'RUBICK_DB_DEFAULT';
init(mainWindow: BrowserWindow) {
// 响应 preload.js 事件
ipcMain.on('msg-trigger', async (event, arg) => {
@@ -196,26 +192,6 @@ class API {
return false;
}
public dbPut({ data }) {
return dbInstance.put(this.DBKEY, data.data);
}
public dbGet({ data }) {
return dbInstance.get(this.DBKEY, data.id);
}
public dbRemove({ data }) {
return dbInstance.remove(this.DBKEY, data.doc);
}
public dbBulkDocs({ data }) {
return dbInstance.bulkDocs(this.DBKEY, data.docs);
}
public dbAllDocs({ data }) {
return dbInstance.allDocs(this.DBKEY, data.key);
}
public getFeatures() {
return this.currentPlugin.features;
}

28
src/main/common/db.ts Normal file
View File

@@ -0,0 +1,28 @@
import { LocalDb } from '@/core';
import { app } from 'electron';
const dbInstance = new LocalDb(app.getPath('userData'));
dbInstance.init();
export default class DBInstance {
private DBKEY = 'RUBICK_DB_DEFAULT';
public dbPut({ data }) {
return dbInstance.put(this.DBKEY, data.data);
}
public dbGet({ data }) {
return dbInstance.get(this.DBKEY, data.id);
}
public dbRemove({ data }) {
return dbInstance.remove(this.DBKEY, data.doc);
}
public dbBulkDocs({ data }) {
return dbInstance.bulkDocs(this.DBKEY, data.docs);
}
public dbAllDocs({ data }) {
return dbInstance.allDocs(this.DBKEY, data.key);
}
}

View File

@@ -0,0 +1,51 @@
import defaultConfig from '@/common/constans/defaultConfig';
import DBInstance from './db';
const LOCAL_CONFIG_KEY = 'rubick-local-config';
const db = new DBInstance();
const localConfig = {
async init(): Promise<any> {
const localConfig = await db.dbGet({ data: { id: LOCAL_CONFIG_KEY } });
if (
!localConfig ||
!localConfig.data ||
localConfig.data.version !== defaultConfig.version
) {
const data: any = {
_id: LOCAL_CONFIG_KEY,
data: defaultConfig,
};
if (localConfig && localConfig.data) {
data._rev = localConfig.data._rev;
}
await db.dbPut({
data: { data },
});
}
},
async getConfig(): Promise<any> {
const data: any =
(await db.dbGet({ data: { id: LOCAL_CONFIG_KEY } })) || {};
return data.data;
},
async setConfig(data) {
const localConfig: any =
(await db.dbGet({ data: { id: LOCAL_CONFIG_KEY } })) || {};
await db.dbPut({
data: {
data: {
_id: LOCAL_CONFIG_KEY,
_rev: localConfig._rev,
data: {
...localConfig.data,
...data,
},
},
},
});
},
};
export default localConfig;

View File

@@ -9,19 +9,20 @@ import {
Notification,
} from 'electron';
import screenCapture from '@/core/screen-capture';
import localConfig from '@/main/common/initLocalConfig';
const registerHotKey = (mainWindow: BrowserWindow): void => {
// 设置开机启动
const setAutoLogin = () => {
const config = global.OP_CONFIG.get();
const setAutoLogin = async () => {
const config = await localConfig.getConfig();
app.setLoginItemSettings({
openAtLogin: config.perf.common.start,
openAsHidden: true,
});
};
// 设置暗黑模式
const setDarkMode = () => {
const config = global.OP_CONFIG.get();
const setDarkMode = async () => {
const config = await localConfig.getConfig();
const isDark = config.perf.common.darkMode;
if (isDark) {
nativeTheme.themeSource = 'dark';
@@ -46,10 +47,10 @@ const registerHotKey = (mainWindow: BrowserWindow): void => {
}
};
const init = () => {
setAutoLogin();
setDarkMode();
const config = global.OP_CONFIG.get();
const init = async () => {
await setAutoLogin();
await setDarkMode();
const config = await localConfig.getConfig();
globalShortcut.unregisterAll();
// 注册偏好快捷键
globalShortcut.register(config.perf.shortCut.showAndHidden, () => {

View File

@@ -2,7 +2,6 @@ import { dialog, Menu, Tray, app, shell, BrowserWindow } from 'electron';
import path from 'path';
import pkg from '../../../package.json';
import os from 'os';
import API from '../common/api';
import commonConst from '@/common/utils/commonConst';
import { guide } from '../browsers';
@@ -21,11 +20,6 @@ function createTray(window: BrowserWindow): Promise<Tray> {
}
const appIcon = new Tray(path.join(__static, icon));
const getShowAndHiddenHotKey = (): string => {
const config = global.OP_CONFIG.get();
return config.perf.shortCut.showAndHidden;
};
const openSettings = () => {
window.webContents.executeJavaScript(
`window.rubick && window.rubick.openMenu && window.rubick.openMenu({ code: "settings" })`
@@ -59,8 +53,7 @@ function createTray(window: BrowserWindow): Promise<Tray> {
},
{ type: 'separator' },
{
label: '显示窗口',
accelerator: getShowAndHiddenHotKey(),
label: '显示',
click() {
window.show();
},

View File

@@ -12,9 +12,9 @@ import commonConst from '../common/utils/commonConst';
import API from './common/api';
import createTray from './common/tray';
import registerHotKey from './common/registerHotKey';
import localConfig from './common/initLocalConfig';
import '../common/utils/localPlugin';
import '../common/utils/localConfig';
import registerySystemPlugin from './common/registerySystemPlugin';
@@ -55,12 +55,13 @@ class App {
this.windowCreator.init();
}
onReady() {
const readyFunction = () => {
const config = global.OP_CONFIG.get();
const readyFunction = async () => {
await localConfig.init();
const config = await localConfig.getConfig();
if (!config.perf.common.guide) {
guide().init();
config.perf.common.guide = true;
global.OP_CONFIG.set(config);
localConfig.setConfig(config);
}
this.createWindow();
const mainWindow = this.windowCreator.getWindow();