44 changed files with 696 additions and 904 deletions
@ -1,3 +1,5 @@ |
|||||
|
// @ts-nocheck window.api 不需要检查
|
||||
|
|
||||
import { IApiClient } from "./abstract" |
import { IApiClient } from "./abstract" |
||||
|
|
||||
export class ElectronApiClient implements IApiClient { |
export class ElectronApiClient implements IApiClient { |
@ -1,5 +0,0 @@ |
|||||
import { Snippet } from "." |
|
||||
|
|
||||
export function useSnippet() { |
|
||||
return Snippet.getInstance() |
|
||||
} |
|
@ -1,18 +0,0 @@ |
|||||
import { BaseSingleton } from "base" |
|
||||
import { ApiFactory } from "common/lib/abstract" |
|
||||
|
|
||||
class Snippet extends BaseSingleton { |
|
||||
constructor() { |
|
||||
super() |
|
||||
} |
|
||||
|
|
||||
private get api() { |
|
||||
return ApiFactory.getApiClient() |
|
||||
} |
|
||||
|
|
||||
getTree = async () => { |
|
||||
return this.api.call("SnippetCommand.getTree") |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
export { Snippet } |
|
@ -1,7 +0,0 @@ |
|||||
## event |
|
||||
|
|
||||
通用事件处理模块 |
|
||||
|
|
||||
- main/**/* 处理主进程的模块 |
|
||||
- main/command.ts 会通过ioc收集,进入依赖管理中 |
|
||||
- 其他 处理渲染进程的模块 |
|
@ -1,165 +0,0 @@ |
|||||
import { inject, injectable } from "inversify" |
|
||||
// import Setting from "./modules/setting"
|
|
||||
// import DB from "./modules/db"
|
|
||||
import Api from "./modules/api" |
|
||||
import WindowManager from "./modules/window-manager" |
|
||||
import { app, nativeTheme, protocol, WebContentsView } from "electron" |
|
||||
import { electronApp } from "@electron-toolkit/utils" |
|
||||
// import Tabs from "./modules/tabs/Tabs"
|
|
||||
import { getFileUrl } from "./utils" |
|
||||
import BaseClass from "./base/base" |
|
||||
|
|
||||
protocol.registerSchemesAsPrivileged([ |
|
||||
// {
|
|
||||
// scheme: "http",
|
|
||||
// privileges: { standard: true, bypassCSP: true, allowServiceWorkers: true, supportFetchAPI: true, corsEnabled: true, stream: true },
|
|
||||
// },
|
|
||||
// {
|
|
||||
// scheme: "https",
|
|
||||
// privileges: { standard: true, bypassCSP: true, allowServiceWorkers: true, supportFetchAPI: true, corsEnabled: true, stream: true },
|
|
||||
// },
|
|
||||
// { scheme: "mailto", privileges: { standard: true } },
|
|
||||
{ |
|
||||
scheme: "api", |
|
||||
privileges: { |
|
||||
standard: true, |
|
||||
secure: true, |
|
||||
supportFetchAPI: true, |
|
||||
}, |
|
||||
}, |
|
||||
]) |
|
||||
|
|
||||
@injectable() |
|
||||
class App extends BaseClass { |
|
||||
destroy() { |
|
||||
// destroyAll()
|
|
||||
// 这里是应用正常退出
|
|
||||
} |
|
||||
// private _setting: Setting
|
|
||||
// private _db: DB
|
|
||||
private _Api: Api |
|
||||
private _windowManager: WindowManager |
|
||||
// private _tabs: Tabs
|
|
||||
|
|
||||
constructor( |
|
||||
// @inject(Setting) setting: Setting,
|
|
||||
// @inject(DB) db: DB,
|
|
||||
@inject(Api) Api: Api, |
|
||||
@inject(WindowManager) windowManager: WindowManager, |
|
||||
// @inject(Tabs) tabs: Tabs,
|
|
||||
) { |
|
||||
super() |
|
||||
// this._setting = setting
|
|
||||
// this._db = db
|
|
||||
this._Api = Api |
|
||||
this._windowManager = windowManager |
|
||||
// this._tabs = tabs
|
|
||||
} |
|
||||
|
|
||||
async init() { |
|
||||
this._windowManager.init() |
|
||||
app.whenReady().then(() => { |
|
||||
electronApp.setAppUserModelId("top.xieyaxin") |
|
||||
this.create() |
|
||||
this._Api.init() |
|
||||
}) |
|
||||
app.on("window-all-closed", () => { |
|
||||
if (process.platform !== "darwin") { |
|
||||
app.quit() |
|
||||
} |
|
||||
}) |
|
||||
app.on("will-quit", () => { |
|
||||
this.destroy() |
|
||||
}) |
|
||||
} |
|
||||
|
|
||||
create() { |
|
||||
this._windowManager.showMainWindow() |
|
||||
const mainWindow = this._windowManager.getMainWindow() |
|
||||
if (mainWindow) { |
|
||||
nativeTheme.themeSource = "light" |
|
||||
mainWindow.setTitleBarOverlay({ |
|
||||
height: 29, // the smallest size of the title bar on windows accounting for the border on windows 11
|
|
||||
color: "#F8F8F8", |
|
||||
symbolColor: "#000000", |
|
||||
}) |
|
||||
this._windowManager.showWindow("main-top") |
|
||||
const mainTopWindow = this._windowManager.get("main-top") |
|
||||
setTimeout(() => { |
|
||||
// console.log(mainWindow.getParentWindow());
|
|
||||
setTimeout(() => { |
|
||||
mainWindow.contentView.children.length = 0 |
|
||||
const view = new WebContentsView() |
|
||||
view.addChildView(mainTopWindow!.contentView) |
|
||||
view.webContents.loadURL(getFileUrl("about.html")) |
|
||||
// mainTopWindow!.contentView.setBounds({ x: 0, y: 0, width: 100, height: 30 })
|
|
||||
// view.setBounds({ x: 0, y: 0, width: 100, height: 30 })
|
|
||||
mainWindow.contentView.addChildView(view) |
|
||||
// mainWindow.contentView.children.sort()
|
|
||||
console.log(mainWindow.contentView.children) |
|
||||
}, 5000) |
|
||||
// mainWindow.webContents = mainTopWindow!.webContents
|
|
||||
mainWindow.reload() |
|
||||
console.log(mainWindow.webContents.getURL()) |
|
||||
|
|
||||
// mainTopWindow?.destroy()
|
|
||||
// mainWindow.contentView.addChildView(mainWindow.contentView)
|
|
||||
console.log(`child count: `, mainWindow.contentView.children.length) |
|
||||
}, 2000) |
|
||||
// if (mainTopWindow) {
|
|
||||
// mainTopWindow.setParentWindow(mainWindow)
|
|
||||
// mainTopWindow.setIgnoreMouseEvents(true, { forward: false })
|
|
||||
// const listenMove = () => {
|
|
||||
// if (mainWindow && mainTopWindow) {
|
|
||||
// const pos = mainWindow.getPosition()
|
|
||||
// mainTopWindow.setPosition(pos[0], pos[1])
|
|
||||
// }
|
|
||||
// }
|
|
||||
// mainWindow?.on("move", listenMove)
|
|
||||
// const listenResize = () => {
|
|
||||
// if (mainWindow && mainTopWindow) {
|
|
||||
// const size = mainWindow.getSize()
|
|
||||
// console.log(size)
|
|
||||
// mainTopWindow.setSize(size[0], size[1])
|
|
||||
// const pos = mainWindow.getPosition()
|
|
||||
// mainTopWindow.setPosition(pos[0], pos[1])
|
|
||||
// }
|
|
||||
// }
|
|
||||
// listenResize()
|
|
||||
// mainWindow?.on("resize", listenResize)
|
|
||||
// }
|
|
||||
} |
|
||||
// 考虑双browserwindow模式
|
|
||||
/** |
|
||||
* 因为browserwindow可以设置穿透,考虑将tab放在底层window上,其他组件放在上层window上。 |
|
||||
*/ |
|
||||
// const webContentsView = new WebContentsView({
|
|
||||
// webPreferences: {
|
|
||||
// preload: join(__dirname, "../preload/index.mjs"),
|
|
||||
// transparent: true,
|
|
||||
// nodeIntegration: true,
|
|
||||
// spellcheck: false,
|
|
||||
// contextIsolation: true,
|
|
||||
// },
|
|
||||
// })
|
|
||||
// // mainWindow!.contentView = webContentsView
|
|
||||
// // setTimeout(() => {
|
|
||||
// mainWindow!.contentView.addChildView(webContentsView)
|
|
||||
// // mainWindow?.setIgnoreMouseEvents(true, { forward: true })
|
|
||||
// // }, 2000);
|
|
||||
// webContentsView.webContents.loadURL(getFileUrl("index.html"))
|
|
||||
// const listenResize = () => {
|
|
||||
// const size = mainWindow!.getSize()
|
|
||||
// webContentsView.setBounds({ x: 0, y: 0, width: size[0], height: size[1] })
|
|
||||
// }
|
|
||||
// listenResize()
|
|
||||
// mainWindow!.addListener("resize", listenResize)
|
|
||||
|
|
||||
// this._tabs.add("https://baidu.com", true)
|
|
||||
// this._tabs.add("https://zhihu.com")
|
|
||||
return mainWindow |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
export default App |
|
||||
export { App } |
|
@ -1,4 +1,4 @@ |
|||||
import { ApiFactory } from "common/lib/abstract" |
import { ApiFactory } from "base/api/abstract" |
||||
import { BaseSingleton } from "base" |
import { BaseSingleton } from "base" |
||||
import { LogLevel } from "packages/logger/common" |
import { LogLevel } from "packages/logger/common" |
||||
|
|
@ -1,7 +1,7 @@ |
|||||
import { LogLevel } from "logger/common" |
import { LogLevel } from "logger/common" |
||||
import { PlatForm } from "." |
import { PlatForm } from "./_" |
||||
|
|
||||
export function usePlatForm() { |
export function useApiPlatForm() { |
||||
const plat = PlatForm.getInstance<PlatForm>() |
const plat = PlatForm.getInstance<PlatForm>() |
||||
|
|
||||
// 全屏状态
|
// 全屏状态
|
@ -1,4 +1,4 @@ |
|||||
import { ApiFactory } from "common/lib/abstract" |
import { ApiFactory } from "base/api/abstract" |
||||
import { BaseSingleton } from "base" |
import { BaseSingleton } from "base" |
||||
import { IConfig } from "config" |
import { IConfig } from "config" |
||||
|
|
@ -1,10 +1,10 @@ |
|||||
import { defineStore } from "pinia" |
import { defineStore } from "pinia" |
||||
import { Setting } from "." |
import { Setting } from "./_" |
||||
import type { IConfig } from "config" |
import type { IConfig } from "config" |
||||
|
|
||||
let rawConfig: IConfig = Setting.getInstance().sync() as unknown as IConfig |
let rawConfig: IConfig = Setting.getInstance().sync() as unknown as IConfig |
||||
|
|
||||
export const useSettingStore = defineStore( |
export const useApiSetting = defineStore( |
||||
"Setting", |
"Setting", |
||||
() => { |
() => { |
||||
const config = ref(JSON.parse(JSON.stringify(rawConfig))) |
const config = ref(JSON.parse(JSON.stringify(rawConfig))) |
@ -1,4 +1,4 @@ |
|||||
import { BaseEvent } from "common/lib/abstract" |
import { BaseEvent } from "base/api/abstract" |
||||
|
|
||||
class Updater extends BaseEvent { |
class Updater extends BaseEvent { |
||||
constructor() { |
constructor() { |
@ -1,3 +0,0 @@ |
|||||
export function useTest() { |
|
||||
console.log("test") |
|
||||
} |
|
Loading…
Reference in new issue