DawnLauncher/electron/main/search/index.ts
2023-11-21 14:23:26 +08:00

132 lines
3.5 KiB
TypeScript

import { BrowserWindow, shell } from "electron";
import { join } from "node:path";
import { getMainBackgorunColor, sendToWebContent } from "../commons";
import cacheData from "../commons/cacheData";
// 窗口
let quickSearchWindow: BrowserWindow | null = null;
/**
* 快速搜索窗口
*/
function createQuickSearchWindow() {
// 创建窗口
global.quickSearchWindowInit = false;
quickSearchWindow = global.quickSearchWindow = new BrowserWindow({
title: "Dawn Launcher",
width: 600,
height: 44,
type: "toolbar",
frame: false,
show: false,
maximizable: false,
minimizable: false,
fullscreenable: false,
resizable: false,
alwaysOnTop: true,
backgroundColor: getMainBackgorunColor(),
webPreferences: {
spellcheck: false,
backgroundThrottling: false,
preload: join(__dirname, "../preload/index.js"),
devTools: process.env.NODE_ENV === "development",
},
});
if (process.env.VITE_DEV_SERVER_URL) {
quickSearchWindow.loadURL(
process.env.VITE_DEV_SERVER_URL + "Search/QuickSearch"
);
} else {
quickSearchWindow.loadFile(join(process.env.DIST, "index.html"), {
hash: "/Search/QuickSearch",
});
}
quickSearchWindow.webContents.on("did-finish-load", function () {
// 恢复上一次的位置
let bounds = cacheData.cacheStore.get("quickSearchWindowBounds");
if (bounds) {
quickSearchWindow.setBounds(bounds);
}
// 设置可以显示
global.searchWindowShow = true;
});
quickSearchWindow.webContents.setWindowOpenHandler(({ url }) => {
if (url.startsWith("https:")) shell.openExternal(url);
return { action: "deny" };
});
// 失去焦点
quickSearchWindow.on("blur", () => {
// 失去焦点后隐藏
if (global.setting.quickSearch.hideLoseFocus) {
hideQuickSearchWindow();
}
});
// 显示窗口
quickSearchWindow.on("show", () => {
// 背景色
quickSearchWindow.setBackgroundColor(
global.setting.appearance.theme.mainBackgroundColor
);
// 显示窗口时将输入法切换为英文模式
if (global.setting.general.switchEnglish) {
global.addon.switchEnglish(
quickSearchWindow.getNativeWindowHandle().readInt32LE(0)
);
}
});
// 窗口移动完毕
quickSearchWindow.on("moved", () => {
// 记录位置
cacheData.cacheStore.set(
"quickSearchWindowBounds",
quickSearchWindow.getBounds()
);
});
// 隐藏窗口
quickSearchWindow.on("hide", () => {
// 设置默认高度
quickSearchWindow.setBounds({ height: 44 });
// 发送消息清空数据
quickSearchWindow.webContents.send("onQuickSearchClearData");
});
// 禁用标题栏右键
quickSearchWindow.hookWindowMessage(278, function (e) {
// 窗口禁用
quickSearchWindow.setEnabled(false);
// 延时太快会立刻启动,太慢会妨碍窗口其他操作,可自行测试最佳时间
setTimeout(() => {
quickSearchWindow.setEnabled(true);
}, 100);
return true;
});
}
/**
* 显示快速搜索窗口之前
*/
function showQuickSearchWindowBefore() {
// 向主窗口发送通知
sendToWebContent("quickSearchWindow", "onShowQuickSearchWindowBefore", null);
}
/**
* 显示快速搜索窗口
*/
function showQuickSearchWindow() {
quickSearchWindow.show();
}
/**
* 隐藏快速搜索窗口
*/
function hideQuickSearchWindow() {
quickSearchWindow.hide();
}
export {
createQuickSearchWindow,
showQuickSearchWindow,
hideQuickSearchWindow,
showQuickSearchWindowBefore,
};