mirror of
https://github.com/rubickCenter/rubick
synced 2025-06-27 23:52:50 +08:00
Merge pull request #160 from rubickCenter/fix/apiclass
🐛 fix apiclass & add some feature
This commit is contained in:
commit
9f21823792
@ -3,6 +3,9 @@ import path from "path";
|
||||
|
||||
const appPath = app.getPath("cache");
|
||||
|
||||
console.log(appPath);
|
||||
|
||||
|
||||
const PLUGIN_INSTALL_DIR = path.join(appPath, "./rubick-plugins");
|
||||
|
||||
const DECODE_KEY = {
|
||||
|
@ -3,7 +3,7 @@ import fs from "fs";
|
||||
import getLocalDataFile from "./getLocalDataFile";
|
||||
import { PluginHandler } from "@/core";
|
||||
import { PLUGIN_INSTALL_DIR as baseDir } from "@/common/constans/main";
|
||||
import { API } from "@/main/common/api";
|
||||
import API from "@/main/common/api";
|
||||
|
||||
const configPath = path.join(getLocalDataFile(), "./rubick-local-plugin.json");
|
||||
|
||||
@ -16,12 +16,12 @@ let pluginInstance;
|
||||
console.log(registry);
|
||||
pluginInstance = new PluginHandler({
|
||||
baseDir,
|
||||
registry,
|
||||
registry
|
||||
});
|
||||
} catch (e) {
|
||||
pluginInstance = new PluginHandler({
|
||||
baseDir,
|
||||
registry,
|
||||
registry
|
||||
});
|
||||
}
|
||||
})();
|
||||
@ -38,7 +38,7 @@ global.LOCAL_PLUGINS = {
|
||||
);
|
||||
plugin = {
|
||||
...plugin,
|
||||
...pluginInfo,
|
||||
...pluginInfo
|
||||
};
|
||||
}
|
||||
global.LOCAL_PLUGINS.addPlugin(plugin);
|
||||
@ -52,12 +52,12 @@ global.LOCAL_PLUGINS = {
|
||||
);
|
||||
plugin = {
|
||||
...plugin,
|
||||
...pluginInfo,
|
||||
...pluginInfo
|
||||
};
|
||||
// 刷新
|
||||
let currentPlugins = global.LOCAL_PLUGINS.getLocalPlugins();
|
||||
|
||||
currentPlugins = currentPlugins.map((p) => {
|
||||
currentPlugins = currentPlugins.map(p => {
|
||||
if (p.name === plugin.name) {
|
||||
return plugin;
|
||||
}
|
||||
@ -85,7 +85,7 @@ global.LOCAL_PLUGINS = {
|
||||
addPlugin(plugin) {
|
||||
let has = false;
|
||||
const currentPlugins = global.LOCAL_PLUGINS.getLocalPlugins();
|
||||
currentPlugins.some((p) => {
|
||||
currentPlugins.some(p => {
|
||||
has = p.name === plugin.name;
|
||||
return has;
|
||||
});
|
||||
@ -96,22 +96,20 @@ global.LOCAL_PLUGINS = {
|
||||
}
|
||||
},
|
||||
updatePlugin(plugin) {
|
||||
global.LOCAL_PLUGINS.PLUGINS = global.LOCAL_PLUGINS.PLUGINS.map(
|
||||
(origin) => {
|
||||
if (origin.name === plugin.name) {
|
||||
return plugin;
|
||||
}
|
||||
return origin;
|
||||
global.LOCAL_PLUGINS.PLUGINS = global.LOCAL_PLUGINS.PLUGINS.map(origin => {
|
||||
if (origin.name === plugin.name) {
|
||||
return plugin;
|
||||
}
|
||||
);
|
||||
return origin;
|
||||
});
|
||||
fs.writeFileSync(configPath, JSON.stringify(global.LOCAL_PLUGINS.PLUGINS));
|
||||
},
|
||||
async deletePlugin(plugin) {
|
||||
await pluginInstance.uninstall([plugin.name], { isDev: plugin.isDev });
|
||||
global.LOCAL_PLUGINS.PLUGINS = global.LOCAL_PLUGINS.PLUGINS.filter(
|
||||
(p) => plugin.name !== p.name
|
||||
p => plugin.name !== p.name
|
||||
);
|
||||
fs.writeFileSync(configPath, JSON.stringify(global.LOCAL_PLUGINS.PLUGINS));
|
||||
return global.LOCAL_PLUGINS.PLUGINS;
|
||||
},
|
||||
}
|
||||
};
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { app, BrowserWindow, protocol } from "electron";
|
||||
import path from "path";
|
||||
import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
|
||||
export default () => {
|
||||
let win: any;
|
||||
@ -24,7 +25,8 @@ export default () => {
|
||||
contextIsolation: false,
|
||||
webviewTag: true,
|
||||
nodeIntegration: true,
|
||||
},
|
||||
preload: path.join(__static, "preload.js")
|
||||
}
|
||||
});
|
||||
if (process.env.WEBPACK_DEV_SERVER_URL) {
|
||||
// Load the url of the dev server if in development mode
|
||||
@ -42,6 +44,19 @@ export default () => {
|
||||
win = undefined;
|
||||
});
|
||||
|
||||
win.on("show", () => {
|
||||
win.webContents.executeJavaScript(
|
||||
`window.rubick && window.rubick.hooks && typeof window.rubick.hooks.onShow === "function" && window.rubick.hooks.onShow()`
|
||||
);
|
||||
// win.webContents.openDevTools();
|
||||
});
|
||||
|
||||
win.on("hide", () => {
|
||||
win.webContents.executeJavaScript(
|
||||
`window.rubick && window.rubick.hooks && typeof window.rubick.hooks.onHide === "function" && window.rubick.hooks.onHide()`
|
||||
);
|
||||
});
|
||||
|
||||
// 判断失焦是否隐藏
|
||||
win.on("blur", () => {
|
||||
const config = { ...global.OP_CONFIG.get() };
|
||||
@ -55,6 +70,6 @@ export default () => {
|
||||
|
||||
return {
|
||||
init,
|
||||
getWindow,
|
||||
getWindow
|
||||
};
|
||||
};
|
||||
|
@ -6,7 +6,7 @@ import {
|
||||
Notification,
|
||||
nativeImage,
|
||||
clipboard,
|
||||
shell,
|
||||
shell
|
||||
} from "electron";
|
||||
import { runner, detach } from "../browsers";
|
||||
import fs from "fs";
|
||||
@ -21,145 +21,155 @@ const dbInstance = new LocalDb(app.getPath("userData"));
|
||||
dbInstance.init();
|
||||
|
||||
class API {
|
||||
static currentPlugin: null | any = null;
|
||||
static DBKEY = "RUBICK_DB_DEFAULT";
|
||||
public currentPlugin: null | any = null;
|
||||
private DBKEY = "RUBICK_DB_DEFAULT";
|
||||
|
||||
static getCurrentWindow = (window, e) => {
|
||||
init(mainWindow: BrowserWindow) {
|
||||
// 响应 preload.js 事件
|
||||
ipcMain.on("msg-trigger", async (event, arg) => {
|
||||
const window = arg.winId ? BrowserWindow.fromId(arg.winId) : mainWindow;
|
||||
const data = await this[arg.type](arg, window, event);
|
||||
event.returnValue = data;
|
||||
// event.sender.send(`msg-back-${arg.type}`, data);
|
||||
});
|
||||
}
|
||||
|
||||
public getCurrentWindow = (window, e) => {
|
||||
let originWindow = BrowserWindow.fromWebContents(e.sender);
|
||||
if (originWindow !== window) originWindow = detachInstance.getWindow();
|
||||
return originWindow;
|
||||
};
|
||||
|
||||
static __EscapeKeyDown = (event, input, window) => {
|
||||
public __EscapeKeyDown = (event, input, window) => {
|
||||
if (input.type !== "keyDown") return;
|
||||
if (!(input.meta || input.control || input.shift || input.alt)) {
|
||||
if (input.key === "Escape") {
|
||||
API.removePlugin(null, window);
|
||||
this.removePlugin(null, window);
|
||||
}
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
static loadPlugin({ data: plugin }, window) {
|
||||
public loadPlugin({ data: plugin }, window) {
|
||||
window.webContents.executeJavaScript(
|
||||
`window.loadPlugin(${JSON.stringify(plugin)})`
|
||||
);
|
||||
API.openPlugin({ data: plugin }, window);
|
||||
this.openPlugin({ data: plugin }, window);
|
||||
}
|
||||
|
||||
static openPlugin({ data: plugin }, window) {
|
||||
if (API.currentPlugin && API.currentPlugin.name === plugin.name) return;
|
||||
public openPlugin({ data: plugin }, window) {
|
||||
if (this.currentPlugin && this.currentPlugin.name === plugin.name) return;
|
||||
window.setSize(window.getSize()[0], 60);
|
||||
runnerInstance.removeView(window);
|
||||
runnerInstance.init(plugin, window);
|
||||
API.currentPlugin = plugin;
|
||||
this.currentPlugin = plugin;
|
||||
window.webContents.executeJavaScript(
|
||||
`window.setCurrentPlugin(${JSON.stringify({
|
||||
currentPlugin: API.currentPlugin,
|
||||
currentPlugin: this.currentPlugin
|
||||
})})`
|
||||
);
|
||||
window.show();
|
||||
// 按 ESC 退出插件
|
||||
window.webContents.on("before-input-event", (event, input) =>
|
||||
API.__EscapeKeyDown(event, input, window)
|
||||
this.__EscapeKeyDown(event, input, window)
|
||||
);
|
||||
runnerInstance
|
||||
.getView()
|
||||
.webContents.on("before-input-event", (event, input) =>
|
||||
API.__EscapeKeyDown(event, input, window)
|
||||
this.__EscapeKeyDown(event, input, window)
|
||||
);
|
||||
}
|
||||
|
||||
static removePlugin(e, window) {
|
||||
API.currentPlugin = null;
|
||||
public removePlugin(e, window) {
|
||||
this.currentPlugin = null;
|
||||
runnerInstance.removeView(window);
|
||||
}
|
||||
|
||||
static openPluginDevTools() {
|
||||
public openPluginDevTools() {
|
||||
runnerInstance.getView().webContents.openDevTools({ mode: "detach" });
|
||||
}
|
||||
|
||||
static hideMainWindow(arg, window) {
|
||||
public hideMainWindow(arg, window) {
|
||||
window.hide();
|
||||
}
|
||||
|
||||
static showMainWindow(arg, window) {
|
||||
public showMainWindow(arg, window) {
|
||||
window.show();
|
||||
}
|
||||
|
||||
static showOpenDialog({ data }, window) {
|
||||
public showOpenDialog({ data }, window) {
|
||||
dialog.showOpenDialogSync(window, data);
|
||||
}
|
||||
|
||||
static setExpendHeight({ data: height }, window: BrowserWindow, e) {
|
||||
const originWindow = API.getCurrentWindow(window, e);
|
||||
public setExpendHeight({ data: height }, window: BrowserWindow, e) {
|
||||
const originWindow = this.getCurrentWindow(window, e);
|
||||
if (!originWindow) return;
|
||||
const targetHeight = height;
|
||||
originWindow.setSize(originWindow.getSize()[0], targetHeight);
|
||||
}
|
||||
|
||||
static setSubInput({ data }, window, e) {
|
||||
const originWindow = API.getCurrentWindow(window, e);
|
||||
public setSubInput({ data }, window, e) {
|
||||
const originWindow = this.getCurrentWindow(window, e);
|
||||
if (!originWindow) return;
|
||||
originWindow.webContents.executeJavaScript(
|
||||
`window.setSubInput(${JSON.stringify({
|
||||
placeholder: data.placeholder,
|
||||
placeholder: data.placeholder
|
||||
})})`
|
||||
);
|
||||
}
|
||||
|
||||
static subInputBlur() {
|
||||
public subInputBlur() {
|
||||
runnerInstance.getView().webContents.focus();
|
||||
}
|
||||
|
||||
static sendSubInputChangeEvent({ data }) {
|
||||
public sendSubInputChangeEvent({ data }) {
|
||||
runnerInstance.executeHooks("SubInputChange", data);
|
||||
}
|
||||
|
||||
static removeSubInput(data, window, e) {
|
||||
const originWindow = API.getCurrentWindow(window, e);
|
||||
public removeSubInput(data, window, e) {
|
||||
const originWindow = this.getCurrentWindow(window, e);
|
||||
if (!originWindow) return;
|
||||
originWindow.webContents.executeJavaScript(`window.removeSubInput()`);
|
||||
}
|
||||
|
||||
static setSubInputValue({ data }, window, e) {
|
||||
const originWindow = API.getCurrentWindow(window, e);
|
||||
public setSubInputValue({ data }, window, e) {
|
||||
const originWindow = this.getCurrentWindow(window, e);
|
||||
if (!originWindow) return;
|
||||
originWindow.webContents.executeJavaScript(
|
||||
`window.setSubInputValue(${JSON.stringify({
|
||||
value: data.text,
|
||||
value: data.text
|
||||
})})`
|
||||
);
|
||||
}
|
||||
|
||||
static getPath({ data }) {
|
||||
public getPath({ data }) {
|
||||
return app.getPath(data.name);
|
||||
}
|
||||
|
||||
static showNotification({ data: { body } }) {
|
||||
public showNotification({ data: { body } }) {
|
||||
if (!Notification.isSupported()) return;
|
||||
"string" != typeof body && (body = String(body));
|
||||
const plugin = API.currentPlugin;
|
||||
const plugin = this.currentPlugin;
|
||||
if (!plugin) return;
|
||||
const notify = new Notification({
|
||||
title: plugin.pluginName,
|
||||
body,
|
||||
icon: plugin.logo,
|
||||
icon: plugin.logo
|
||||
});
|
||||
notify.show();
|
||||
}
|
||||
|
||||
static copyImage = ({ data }) => {
|
||||
public copyImage = ({ data }) => {
|
||||
const image = nativeImage.createFromDataURL(data.img);
|
||||
clipboard.writeImage(image);
|
||||
};
|
||||
|
||||
static copyText({ data }) {
|
||||
public copyText({ data }) {
|
||||
clipboard.writeText(String(data.text));
|
||||
return true;
|
||||
}
|
||||
|
||||
static copyFile({ data }) {
|
||||
public copyFile({ data }) {
|
||||
if (data.file && fs.existsSync(data.file)) {
|
||||
clipboard.writeBuffer(
|
||||
"NSFilenamesPboardType",
|
||||
@ -170,134 +180,126 @@ class API {
|
||||
return false;
|
||||
}
|
||||
|
||||
static dbPut({ data }) {
|
||||
return dbInstance.put(API.DBKEY, data.data);
|
||||
public dbPut({ data }) {
|
||||
return dbInstance.put(this.DBKEY, data.data);
|
||||
}
|
||||
|
||||
static dbGet({ data }) {
|
||||
return dbInstance.get(API.DBKEY, data.id);
|
||||
public dbGet({ data }) {
|
||||
return dbInstance.get(this.DBKEY, data.id);
|
||||
}
|
||||
|
||||
static dbRemove({ data }) {
|
||||
return dbInstance.remove(API.DBKEY, data.doc);
|
||||
public dbRemove({ data }) {
|
||||
return dbInstance.remove(this.DBKEY, data.doc);
|
||||
}
|
||||
|
||||
static dbBulkDocs({ data }) {
|
||||
return dbInstance.bulkDocs(API.DBKEY, data.docs);
|
||||
public dbBulkDocs({ data }) {
|
||||
return dbInstance.bulkDocs(this.DBKEY, data.docs);
|
||||
}
|
||||
|
||||
static dbAllDocs({ data }) {
|
||||
return dbInstance.allDocs(API.DBKEY, data.key);
|
||||
public dbAllDocs({ data }) {
|
||||
return dbInstance.allDocs(this.DBKEY, data.key);
|
||||
}
|
||||
|
||||
static getFeatures() {
|
||||
return API.currentPlugin.features;
|
||||
public getFeatures() {
|
||||
return this.currentPlugin.features;
|
||||
}
|
||||
|
||||
static setFeature({ data }, window) {
|
||||
API.currentPlugin = {
|
||||
...API.currentPlugin,
|
||||
public setFeature({ data }, window) {
|
||||
this.currentPlugin = {
|
||||
...this.currentPlugin,
|
||||
features: (() => {
|
||||
let has = false;
|
||||
API.currentPlugin.features.some((feature) => {
|
||||
this.currentPlugin.features.some(feature => {
|
||||
has = feature.code === data.feature.code;
|
||||
return has;
|
||||
});
|
||||
if (!has) {
|
||||
return [...API.currentPlugin.features, data.feature];
|
||||
return [...this.currentPlugin.features, data.feature];
|
||||
}
|
||||
return API.currentPlugin.features;
|
||||
})(),
|
||||
return this.currentPlugin.features;
|
||||
})()
|
||||
};
|
||||
window.webContents.executeJavaScript(
|
||||
`window.updatePlugin(${JSON.stringify({
|
||||
currentPlugin: API.currentPlugin,
|
||||
currentPlugin: this.currentPlugin
|
||||
})})`
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
static removeFeature({ data }, window) {
|
||||
API.currentPlugin = {
|
||||
...API.currentPlugin,
|
||||
features: API.currentPlugin.features.filter((feature) => {
|
||||
public removeFeature({ data }, window) {
|
||||
this.currentPlugin = {
|
||||
...this.currentPlugin,
|
||||
features: this.currentPlugin.features.filter(feature => {
|
||||
if (data.code.type) {
|
||||
return feature.code.type !== data.code.type;
|
||||
}
|
||||
return feature.code !== data.code;
|
||||
}),
|
||||
})
|
||||
};
|
||||
window.webContents.executeJavaScript(
|
||||
`window.updatePlugin(${JSON.stringify({
|
||||
currentPlugin: API.currentPlugin,
|
||||
currentPlugin: this.currentPlugin
|
||||
})})`
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
static sendPluginSomeKeyDownEvent({ data: { modifiers, keyCode } }) {
|
||||
public sendPluginSomeKeyDownEvent({ data: { modifiers, keyCode } }) {
|
||||
const code = DECODE_KEY[keyCode];
|
||||
if (!code || !runnerInstance.getView()) return;
|
||||
if (modifiers.length > 0) {
|
||||
runnerInstance.getView().webContents.sendInputEvent({
|
||||
type: "keyDown",
|
||||
modifiers,
|
||||
keyCode: code,
|
||||
keyCode: code
|
||||
});
|
||||
} else {
|
||||
runnerInstance.getView().webContents.sendInputEvent({
|
||||
type: "keyDown",
|
||||
keyCode: code,
|
||||
keyCode: code
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
static detachPlugin(e, window) {
|
||||
if (!API.currentPlugin) return;
|
||||
public detachPlugin(e, window) {
|
||||
if (!this.currentPlugin) return;
|
||||
const view = window.getBrowserView();
|
||||
window.setBrowserView(null);
|
||||
window.webContents
|
||||
.executeJavaScript(`window.getMainInputInfo()`)
|
||||
.then((res) => {
|
||||
.then(res => {
|
||||
detachInstance.init(
|
||||
{
|
||||
...API.currentPlugin,
|
||||
subInput: res,
|
||||
...this.currentPlugin,
|
||||
subInput: res
|
||||
},
|
||||
window.getBounds(),
|
||||
view
|
||||
);
|
||||
window.webContents.executeJavaScript(`window.initRubick()`);
|
||||
window.setSize(window.getSize()[0], 60);
|
||||
API.currentPlugin = null;
|
||||
this.currentPlugin = null;
|
||||
});
|
||||
}
|
||||
|
||||
static detachInputChange({ data }) {
|
||||
API.sendSubInputChangeEvent({ data });
|
||||
public detachInputChange({ data }) {
|
||||
this.sendSubInputChangeEvent({ data });
|
||||
}
|
||||
|
||||
static getLocalId() {
|
||||
public getLocalId() {
|
||||
return encodeURIComponent(app.getPath("home"));
|
||||
}
|
||||
|
||||
static shellShowItemInFolder({ data }) {
|
||||
public shellShowItemInFolder({ data }) {
|
||||
shell.showItemInFolder(data.path);
|
||||
return true;
|
||||
}
|
||||
|
||||
static shellBeep() {
|
||||
public shellBeep() {
|
||||
shell.beep();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
export default (mainWindow: BrowserWindow) => {
|
||||
// 响应 preload.js 事件
|
||||
ipcMain.on("msg-trigger", async (event, arg) => {
|
||||
const window = arg.winId ? BrowserWindow.fromId(arg.winId) : mainWindow;
|
||||
const data = await API[arg.type](arg, window, event);
|
||||
event.returnValue = data;
|
||||
// event.sender.send(`msg-back-${arg.type}`, data);
|
||||
});
|
||||
};
|
||||
export default new API();
|
||||
|
@ -3,7 +3,7 @@ import electron, {
|
||||
app,
|
||||
globalShortcut,
|
||||
protocol,
|
||||
BrowserWindow,
|
||||
BrowserWindow
|
||||
} from "electron";
|
||||
import { main } from "./browsers";
|
||||
import commonConst from "../common/utils/commonConst";
|
||||
@ -24,7 +24,7 @@ class App {
|
||||
|
||||
constructor() {
|
||||
protocol.registerSchemesAsPrivileged([
|
||||
{ scheme: "app", privileges: { secure: true, standard: true } },
|
||||
{ scheme: "app", privileges: { secure: true, standard: true } }
|
||||
]);
|
||||
this.windowCreator = main();
|
||||
const gotTheLock = app.requestSingleInstanceLock();
|
||||
@ -59,8 +59,8 @@ class App {
|
||||
onReady() {
|
||||
const readyFunction = () => {
|
||||
this.createWindow();
|
||||
API(this.windowCreator.getWindow());
|
||||
// this.init()
|
||||
const mainWindow = this.windowCreator.getWindow();
|
||||
API.init(mainWindow);
|
||||
createTray(this.windowCreator.getWindow());
|
||||
registerHotKey(this.windowCreator.getWindow());
|
||||
this.systemPlugins.triggerReadyHooks(
|
||||
@ -108,7 +108,7 @@ class App {
|
||||
|
||||
if (commonConst.dev()) {
|
||||
if (process.platform === "win32") {
|
||||
process.on("message", (data) => {
|
||||
process.on("message", data => {
|
||||
if (data === "graceful-exit") {
|
||||
app.quit();
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
:clipboardFile="clipboardFile || []"
|
||||
@choosePlugin="choosePlugin"
|
||||
@focus="searchFocus"
|
||||
@clear-search-value="clearSearchValue"
|
||||
@clearClipbord="clearClipboardFile"
|
||||
@readClipboardContent="readClipboardContent"
|
||||
/>
|
||||
@ -56,8 +57,9 @@ const {
|
||||
pluginLoading,
|
||||
searchFocus,
|
||||
clipboardFile,
|
||||
setSearchValue,
|
||||
clearClipboardFile,
|
||||
readClipboardContent,
|
||||
readClipboardContent
|
||||
} = createPluginManager();
|
||||
|
||||
initPlugins();
|
||||
@ -68,8 +70,8 @@ const menuPluginInfo = ref({});
|
||||
getPluginInfo({
|
||||
pluginName: "feature",
|
||||
// eslint-disable-next-line no-undef
|
||||
pluginPath: `${__static}/feature/package.json`,
|
||||
}).then((res) => {
|
||||
pluginPath: `${__static}/feature/package.json`
|
||||
}).then(res => {
|
||||
menuPluginInfo.value = res;
|
||||
remote.getGlobal("LOCAL_PLUGINS").addPlugin(res);
|
||||
});
|
||||
@ -80,12 +82,12 @@ watch([options], () => {
|
||||
nextTick(() => {
|
||||
ipcRenderer.sendSync("msg-trigger", {
|
||||
type: "setExpendHeight",
|
||||
data: getWindowHeight(options.value),
|
||||
data: getWindowHeight(options.value)
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
const changeIndex = (index) => {
|
||||
const changeIndex = index => {
|
||||
if (!options.value.length) return;
|
||||
if (
|
||||
currentSelect.value + index > options.value.length - 1 ||
|
||||
@ -99,7 +101,7 @@ const openMenu = () => {
|
||||
openPlugin({
|
||||
...toRaw(menuPluginInfo.value),
|
||||
feature: menuPluginInfo.value.features[0],
|
||||
cmd: "插件市场",
|
||||
cmd: "插件市场"
|
||||
});
|
||||
};
|
||||
|
||||
@ -107,6 +109,10 @@ const choosePlugin = () => {
|
||||
const currentChoose = options.value[currentSelect.value];
|
||||
currentChoose.click();
|
||||
};
|
||||
|
||||
const clearSearchValue = () => {
|
||||
setSearchValue("");
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
|
@ -15,15 +15,16 @@
|
||||
</div>
|
||||
<a-input
|
||||
id="search"
|
||||
ref="mainInput"
|
||||
class="main-input"
|
||||
@input="(e) => changeValue(e)"
|
||||
@keydown.down="(e) => keydownEvent(e, 'down')"
|
||||
@keydown.up="(e) => keydownEvent(e, 'up')"
|
||||
@keydown="(e) => checkNeedInit(e)"
|
||||
@input="e => changeValue(e)"
|
||||
@keydown.down="e => keydownEvent(e, 'down')"
|
||||
@keydown.up="e => keydownEvent(e, 'up')"
|
||||
@keydown="e => checkNeedInit(e)"
|
||||
:value="searchValue"
|
||||
:placeholder="placeholder || 'Hi, Rubick2'"
|
||||
@keypress.enter="(e) => keydownEvent(e, 'enter')"
|
||||
@keypress.space="(e) => keydownEvent(e, 'space')"
|
||||
@keypress.enter="e => keydownEvent(e, 'enter')"
|
||||
@keypress.space="e => keydownEvent(e, 'space')"
|
||||
@focus="emit('focus')"
|
||||
>
|
||||
<template #suffix>
|
||||
@ -53,7 +54,6 @@
|
||||
import { defineProps, defineEmits, ref, computed } from "vue";
|
||||
import { ipcRenderer, remote } from "electron";
|
||||
import { LoadingOutlined, MoreOutlined } from "@ant-design/icons-vue";
|
||||
|
||||
const opConfig = remote.getGlobal("OP_CONFIG");
|
||||
const { Menu } = remote;
|
||||
|
||||
@ -62,18 +62,18 @@ const config = ref(opConfig.get());
|
||||
const props: any = defineProps({
|
||||
searchValue: {
|
||||
type: [String, Number],
|
||||
default: "",
|
||||
default: ""
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: "",
|
||||
default: ""
|
||||
},
|
||||
currentPlugin: {},
|
||||
pluginLoading: Boolean,
|
||||
clipboardFile: (() => [])(),
|
||||
clipboardFile: (() => [])()
|
||||
});
|
||||
|
||||
const changeValue = (e) => {
|
||||
const changeValue = e => {
|
||||
if (props.currentPlugin.name === "rubick-system-feature") return;
|
||||
targetSearch({ value: e.target.value });
|
||||
emit("onSearch", e);
|
||||
@ -86,7 +86,8 @@ const emit = defineEmits([
|
||||
"changeSelect",
|
||||
"choosePlugin",
|
||||
"focus",
|
||||
"readClipboardContent",
|
||||
"clearSearchValue",
|
||||
"readClipboardContent"
|
||||
]);
|
||||
|
||||
const keydownEvent = (e, key: string) => {
|
||||
@ -100,8 +101,8 @@ const keydownEvent = (e, key: string) => {
|
||||
type: "sendPluginSomeKeyDownEvent",
|
||||
data: {
|
||||
keyCode: e.code,
|
||||
modifiers,
|
||||
},
|
||||
modifiers
|
||||
}
|
||||
});
|
||||
const runPluginDisable = e.target.value === "" || props.currentPlugin.name;
|
||||
switch (key) {
|
||||
@ -124,7 +125,7 @@ const keydownEvent = (e, key: string) => {
|
||||
}
|
||||
};
|
||||
|
||||
const checkNeedInit = (e) => {
|
||||
const checkNeedInit = e => {
|
||||
const { ctrlKey, metaKey } = e;
|
||||
|
||||
if (e.target.value === "" && e.keyCode === 8) {
|
||||
@ -140,7 +141,7 @@ const targetSearch = ({ value }) => {
|
||||
if (props.currentPlugin.name) {
|
||||
return ipcRenderer.sendSync("msg-trigger", {
|
||||
type: "sendSubInputChangeEvent",
|
||||
data: { text: value },
|
||||
data: { text: value }
|
||||
});
|
||||
}
|
||||
};
|
||||
@ -149,7 +150,7 @@ const closeTag = () => {
|
||||
emit("changeSelect", {});
|
||||
emit("clearClipbord");
|
||||
ipcRenderer.send("msg-trigger", {
|
||||
type: "removePlugin",
|
||||
type: "removePlugin"
|
||||
});
|
||||
};
|
||||
|
||||
@ -157,8 +158,8 @@ const showSeparate = () => {
|
||||
let pluginMenu: any = [
|
||||
{
|
||||
label: config.value.perf.common.hideOnBlur ? "钉住" : "自动隐藏",
|
||||
click: changeHideOnBlur,
|
||||
},
|
||||
click: changeHideOnBlur
|
||||
}
|
||||
];
|
||||
if (props.currentPlugin && props.currentPlugin.logo) {
|
||||
pluginMenu = pluginMenu.concat([
|
||||
@ -167,23 +168,23 @@ const showSeparate = () => {
|
||||
click: () => {
|
||||
ipcRenderer.send("msg-trigger", { type: "openPluginDevTools" });
|
||||
// todo
|
||||
},
|
||||
}
|
||||
},
|
||||
{
|
||||
label: "当前插件信息",
|
||||
submenu: [
|
||||
{
|
||||
label: "简介",
|
||||
label: "简介"
|
||||
},
|
||||
{
|
||||
label: "功能",
|
||||
},
|
||||
],
|
||||
label: "功能"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
label: "分离窗口",
|
||||
click: newWindow,
|
||||
},
|
||||
click: newWindow
|
||||
}
|
||||
]);
|
||||
}
|
||||
let menu = Menu.buildFromTemplate(pluginMenu);
|
||||
@ -206,10 +207,19 @@ const getIcon = () => {
|
||||
|
||||
const newWindow = () => {
|
||||
ipcRenderer.send("msg-trigger", {
|
||||
type: "detachPlugin",
|
||||
type: "detachPlugin"
|
||||
});
|
||||
// todo
|
||||
};
|
||||
|
||||
const mainInput = ref(null);
|
||||
window.rubick.hooks.onShow = () => {
|
||||
(mainInput.value as unknown as HTMLDivElement).focus();
|
||||
};
|
||||
|
||||
window.rubick.hooks.onHide = () => {
|
||||
emit("clearSearchValue");
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
|
@ -135,6 +135,7 @@ const createPluginManager = (): any => {
|
||||
searchValue,
|
||||
placeholder,
|
||||
searchFocus,
|
||||
setSearchValue,
|
||||
clipboardFile,
|
||||
clearClipboardFile,
|
||||
readClipboardContent,
|
||||
|
1
src/renderer/shims-vue.d.ts
vendored
1
src/renderer/shims-vue.d.ts
vendored
@ -14,6 +14,7 @@ declare const __static: string;
|
||||
declare module "lodash.throttle";
|
||||
|
||||
interface Window {
|
||||
rubick: any;
|
||||
setSubInput: ({ placeholder }: { placeholder: string }) => void;
|
||||
setSubInputValue: ({ value }: { value: string }) => void;
|
||||
removeSubInput: () => void;
|
||||
|
Loading…
x
Reference in New Issue
Block a user