diff --git a/config/index.ts b/config/index.ts index 3746407..c5681b6 100644 --- a/config/index.ts +++ b/config/index.ts @@ -1,3 +1,4 @@ +import { LogLevel } from "logger/common" // 定义主题类型 type ThemeType = "light" | "dark" | "auto" // 定义语言类型 @@ -9,6 +10,7 @@ type LogoType = "logo" | "bg" export interface IDefaultConfig { language: LanguageType "common.theme": ThemeType + "debug": LogLevel, "desktop:wallpaper": string "update.repo"?: string "update.owner"?: string @@ -31,6 +33,7 @@ export default { default_config: { storagePath: "$storagePath$", language: "zh", + debug: LogLevel.INFO, "common.theme": "auto", "desktop:wallpaper": "", "editor.bg": "", diff --git a/packages/logger/main.ts b/packages/logger/main.ts index 12bbbda..dabf881 100644 --- a/packages/logger/main.ts +++ b/packages/logger/main.ts @@ -1,6 +1,7 @@ import { app, ipcMain } from "electron" import fs from "fs" import path from "path" +import setting from "setting/main" import * as rfs from "rotating-file-stream" import { LogLevel, LogLevelColor, LogLevelName } from "./common" @@ -20,7 +21,7 @@ export interface LoggerOptions { // 默认配置 const DEFAULT_OPTIONS: LoggerOptions = { - level: LogLevel.INFO, + level: setting.values("debug"), namespace: "app", console: true, file: true, @@ -155,7 +156,7 @@ export class Logger { * 获取当前日志级别 */ public getLevel(): LogLevel { - return this.options.level || LogLevel.INFO + return this.options.level ?? LogLevel.INFO } /** @@ -259,6 +260,9 @@ export class Logger { // 默认实例 const logger = Logger.getInstance() logger.init() +setting.onChange("debug", function(n){ + logger.setLevel(n.debug) +}) // 应用退出时关闭日志流 if (process.type === "browser" && app) { diff --git a/packages/setting/main.ts b/packages/setting/main.ts index 19c725c..6bd3425 100644 --- a/packages/setting/main.ts +++ b/packages/setting/main.ts @@ -118,7 +118,7 @@ class SettingClass { // this.#config[key] = config[key] || this.#config[key] // } // 删除配置时本地的配置不会改变,想一下哪种方式更好 - this.#config[key] = config[key] || this.#config[key] + this.#config[key] = config[key] ?? this.#config[key] } } init() { diff --git a/src/common/event/PlatForm/index.ts b/src/common/event/PlatForm/index.ts index 17aa522..a85a591 100644 --- a/src/common/event/PlatForm/index.ts +++ b/src/common/event/PlatForm/index.ts @@ -1,5 +1,6 @@ import { _Base } from "common/lib/_Base" import { ApiFactory } from "common/lib/abstract" +import { LogLevel } from "packages/logger/common" class PlatForm extends _Base { constructor() { @@ -10,8 +11,17 @@ class PlatForm extends _Base { return ApiFactory.getApiClient() } + async logSetLevel(level: LogLevel) { + return this.api.call("PlatFormCommand.logSetLevel", level) + } + + async logGetLevel() { + return this.api.call("PlatFormCommand.logGetLevel") + } + async showAbout() { - return this.api.call("BasicService.showAbout") + // return this.api.call("BasicService.showAbout") + return this.api.call("PlatFormCommand.showAbout") } async crash() { diff --git a/src/common/event/PlatForm/main/command.ts b/src/common/event/PlatForm/main/command.ts index f60cd40..5452171 100644 --- a/src/common/event/PlatForm/main/command.ts +++ b/src/common/event/PlatForm/main/command.ts @@ -3,6 +3,10 @@ import { inject } from "inversify" import errorHandler from "logger/main-error" import Tabs from "main/modules/tabs" import WindowManager from "main/modules/window-manager" +import { getFileUrl } from "main/utils" +import icon from "@res/icon.png?asset" +import setting from "setting/main" +import { LogLevel } from "logger/common" export default class PlatFormCommand { constructor( @@ -14,6 +18,14 @@ export default class PlatFormCommand { nativeTheme.themeSource = theme } + logSetLevel(level: LogLevel) { + return setting.set("debug", level) + } + + logGetLevel() { + return setting.values("debug") + } + setTitlBar(options: TitleBarOverlayOptions) { const mainWindow = this._WindowManager.getMainWindow() if (mainWindow) { @@ -22,7 +34,28 @@ export default class PlatFormCommand { } showAbout() { - this._WindowManager.showWindow("about") + this._WindowManager.createWindow("about", { + url: getFileUrl("about.html"), + overideWindowOpts: true, + confrimWindowClose: false, + type: "info", + windowOpts: { + width: 600, + height: 400, + minimizable: false, + darkTheme: true, + modal: true, + show: false, + resizable: false, + icon: icon, + webPreferences: { + devTools: false, + sandbox: false, + nodeIntegration: false, + contextIsolation: true, + }, + }, + }) } toggleDevTools() { diff --git a/src/main/modules/window-manager/index.ts b/src/main/modules/window-manager/index.ts index e84c24a..975d10b 100644 --- a/src/main/modules/window-manager/index.ts +++ b/src/main/modules/window-manager/index.ts @@ -4,8 +4,9 @@ import { defaultConfig, defaultWindowConfig, getWindowsMap, IConfig, Param } fro import { optimizer } from "@electron-toolkit/utils" import BaseClass from "main/base/base" import _debug from "debug" +import _logger from "logger/main" -const debug = _debug("app:window-manager") +const logger = _logger.createNamespace("modlue:window-manager") // _debug("app:window-manager") declare module "electron" { interface BrowserWindow { @@ -36,6 +37,7 @@ export default class WindowManager extends BaseClass { dialog.showErrorBox("错误", "窗口未指定唯一key") return } + logger.debug("创建窗口的参数:", info) const index = this.findIndex(info.name) if (index === -1) { this.#windows.push(this.#add(info)) @@ -63,6 +65,16 @@ export default class WindowManager extends BaseClass { await this.isMainShowReady } + createWindow(name: string, opts?: Partial){ + let info = opts as Param + info.name = name + if (!info.ignoreEmptyUrl && !info.url) { + dialog.showErrorBox("错误", name + "窗口未提供url") + return + } + this.#showWin(info as Param) + } + showWindow(name: string, opts?: Partial) { let have = false for (const key in this.#urlMap) { @@ -245,7 +257,7 @@ export default class WindowManager extends BaseClass { if (curConfig.windowOpts?.show === false) { if (curConfig.url) { browserWin.once("ready-to-show", () => { - debug(`准备展示:`, curConfig.url) + logger.debug(`准备展示:`, curConfig.url) browserWin?.show() }) } else { @@ -257,9 +269,9 @@ export default class WindowManager extends BaseClass { showCurrentWindow() { if (this.#windows.length) { - debug(`current open window: ${this.#windows.map(v => v.$$opts!.name).join(",")}`) + logger.debug(`current open window: ${this.#windows.map(v => v.$$opts!.name).join(",")}`) } else { - debug(`all closed`) + logger.debug(`all closed`) } } diff --git a/src/main/modules/window-manager/windowsMap.ts b/src/main/modules/window-manager/windowsMap.ts index 182b5b2..86dc493 100644 --- a/src/main/modules/window-manager/windowsMap.ts +++ b/src/main/modules/window-manager/windowsMap.ts @@ -1,8 +1,7 @@ import config from "config" import { BrowserWindowConstructorOptions } from "electron" -import { getFileUrl } from "main/utils" +import { getFileUrl, getPreloadUrl } from "main/utils" import icon from "@res/icon.png?asset" -import { join } from "path" export type Param = Partial & Required> @@ -64,7 +63,7 @@ export function getWindowsMap(): Record { ...(process.platform === "linux" ? { icon } : {}), webPreferences: { webviewTag: false, - preload: join(__dirname, "../preload/index.mjs"), + preload: getPreloadUrl("index"), nodeIntegration: true, contextIsolation: true, }, @@ -104,27 +103,5 @@ export function getWindowsMap(): Record { }, }, }, - "^about": { - url: getFileUrl("about.html"), - overideWindowOpts: true, - confrimWindowClose: false, - type: "info", - windowOpts: { - width: 600, - height: 200, - minimizable: false, - darkTheme: true, - modal: true, - show: false, - resizable: false, - icon: icon, - webPreferences: { - devTools: false, - sandbox: false, - nodeIntegration: false, - contextIsolation: true, - }, - }, - }, } } diff --git a/src/main/utils/index.ts b/src/main/utils/index.ts index a91119f..c485860 100644 --- a/src/main/utils/index.ts +++ b/src/main/utils/index.ts @@ -12,6 +12,10 @@ export function getFileUrl(app: string) { return slash(winURL) } +export function getPreloadUrl(file){ + return join(__dirname, `../preload/${file}.mjs`) +} + export function isPromise(value: () => any) { return value && Object.prototype.toString.call(value) === "[object Promise]" } diff --git a/src/renderer/about.html b/src/renderer/about.html index 5f6002e..a458d63 100644 --- a/src/renderer/about.html +++ b/src/renderer/about.html @@ -13,16 +13,18 @@ padding: 0; outline: none; border: 0; - display: flex; - justify-content: center; - align-items: center; + overflow: hidden; + padding: 10px 20px; }
-

您好,亲爱的冒险者!

+

环境

+
    +
  • 111
  • +
diff --git a/src/renderer/src/App.vue b/src/renderer/src/App.vue index 75eb741..dcc8223 100644 --- a/src/renderer/src/App.vue +++ b/src/renderer/src/App.vue @@ -1,14 +1,7 @@ - -