mirror of
https://github.com/rubickCenter/rubick
synced 2025-12-30 07:39:54 +08:00
feat: 支持文本模板,系统命令
This commit is contained in:
139
src/main/common/api.js
Normal file
139
src/main/common/api.js
Normal file
@@ -0,0 +1,139 @@
|
||||
import {app, BrowserWindow} from 'electron';
|
||||
import {getlocalDataFile, saveData, getData} from './utils';
|
||||
import path from "path";
|
||||
|
||||
const puppeteer = require("puppeteer-core");
|
||||
const pie = require("puppeteer-in-electron")
|
||||
|
||||
const appPath = path.join(getlocalDataFile());
|
||||
const dbPath = path.join(appPath, './db.json');
|
||||
|
||||
let browser
|
||||
pie.initialize(app).then(res => {
|
||||
pie.connect(app, puppeteer).then(b => {
|
||||
browser = b;
|
||||
})
|
||||
})
|
||||
|
||||
export default {
|
||||
getPath(arg) {
|
||||
return app.getPath(arg.name);
|
||||
},
|
||||
hideMainWindow(arg, mainWindow) {
|
||||
mainWindow.hide();
|
||||
},
|
||||
showMainWindow(arg, mainWindow) {
|
||||
mainWindow.show();
|
||||
},
|
||||
onPluginEnter(arg) {
|
||||
return arg
|
||||
},
|
||||
setExpendHeight({height}, mainWindow) {
|
||||
mainWindow.setSize(788, height || 60);
|
||||
},
|
||||
db: {
|
||||
put({data}) {
|
||||
data._rev = '';
|
||||
let dbData = getData(dbPath) || [];
|
||||
let target = [];
|
||||
dbData.some((d, i) => {
|
||||
if (d._id === data._id) {
|
||||
target = [d, i]
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
// 更新
|
||||
if (target[0]) {
|
||||
dbData[target[1]] = data;
|
||||
} else {
|
||||
dbData.push(data);
|
||||
}
|
||||
saveData(dbPath, dbData);
|
||||
return {
|
||||
id: data.id,
|
||||
ok: true,
|
||||
rev: '',
|
||||
}
|
||||
},
|
||||
get({key}) {
|
||||
const dbData = getData(dbPath) || [];
|
||||
|
||||
return dbData.find(d => d._id === key) || {};
|
||||
},
|
||||
remove({key}) {
|
||||
key = typeof key === 'object' ? key.id : key;
|
||||
let dbData = getData(dbPath);
|
||||
let find = false;
|
||||
dbData.some((d, i) => {
|
||||
if (d._id === key) {
|
||||
dbData.splice(i, 1);
|
||||
find = true;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (find) {
|
||||
saveData(dbPath, dbData);
|
||||
return {
|
||||
id: key,
|
||||
ok: true,
|
||||
rev: '',
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
id: key,
|
||||
ok: false,
|
||||
rev: '',
|
||||
}
|
||||
}
|
||||
},
|
||||
bulkDocs({docs}) {
|
||||
const dbData = getData(dbPath);
|
||||
dbData.forEach((d, i) => {
|
||||
const result = docs.find(data => data._id === d._id);
|
||||
if (result) {
|
||||
dbData[i] = result;
|
||||
}
|
||||
});
|
||||
saveData(dbPath, dbData);
|
||||
return docs.map(d => ({
|
||||
id: d.id,
|
||||
success: true,
|
||||
rev: '',
|
||||
}))
|
||||
},
|
||||
allDocs({key}) {
|
||||
const dbData = getData(dbPath);
|
||||
const result = dbData.filter(d => d._id === key);
|
||||
return result;
|
||||
}
|
||||
},
|
||||
|
||||
ubrowser: {
|
||||
goto: async ({winId}) => {
|
||||
const win = BrowserWindow.fromId(winId);
|
||||
await win.loadURL(url);
|
||||
},
|
||||
async value({selector, value, winId}) {
|
||||
const win = BrowserWindow.fromId(winId);
|
||||
const page = await pie.getPage(browser, win);
|
||||
const nd = await page.$(selector);
|
||||
nd.type(value);
|
||||
},
|
||||
|
||||
async click({selector, winId}) {
|
||||
const win = BrowserWindow.fromId(winId);
|
||||
const page = await pie.getPage(browser, win);
|
||||
const nd = await page.$(selector);
|
||||
nd.click();
|
||||
},
|
||||
|
||||
async run(options) {
|
||||
const win = BrowserWindow.fromId(options.winId);
|
||||
win.setSize(options.width || 800, options.height || 600)
|
||||
win.once('ready-to-show', () => win.show());
|
||||
},
|
||||
}
|
||||
}
|
||||
112
src/main/common/common.js
Normal file
112
src/main/common/common.js
Normal file
@@ -0,0 +1,112 @@
|
||||
import {
|
||||
globalShortcut,
|
||||
ipcMain,
|
||||
BrowserWindow,
|
||||
clipboard,
|
||||
Notification,
|
||||
} from 'electron';
|
||||
import Api from './api';
|
||||
import robot from 'robotjs';
|
||||
|
||||
const browsers = require("../browsers")();
|
||||
const mouseEvents = require("osx-mouse");
|
||||
const {picker, separator} = browsers;
|
||||
|
||||
let closePicker = (newColor) => {
|
||||
if (picker.getWindow()) {
|
||||
ipcMain.removeListener("closePicker", closePicker);
|
||||
ipcMain.removeListener("pickerRequested", (event) => {});
|
||||
picker.getWindow().close();
|
||||
}
|
||||
};
|
||||
|
||||
export default function init(mainWindow) {
|
||||
const mouseTrack = mouseEvents();
|
||||
let down_time = 0;
|
||||
mouseTrack.on('right-down', () => {
|
||||
down_time = Date.now();
|
||||
})
|
||||
mouseTrack.on('right-up', () => {
|
||||
if ((Date.now() - down_time) > 1000) {
|
||||
new Notification({ title: 'Rubick 通知', body: '长按了' }).show();
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.on('changeWindowSize-rubick', (event, arg) => {
|
||||
mainWindow.setSize(arg.width || 788, arg.height);
|
||||
});
|
||||
|
||||
mainWindow.on('blur', () => {
|
||||
// mainWindow.hide();
|
||||
});
|
||||
|
||||
globalShortcut.register('Alt+R', () => {
|
||||
mainWindow.show();
|
||||
});
|
||||
|
||||
ipcMain.on('init-shortcut', (event) => {
|
||||
globalShortcut.register('Esc', () => {
|
||||
mainWindow.show();
|
||||
event.sender.send('init-rubick');
|
||||
});
|
||||
globalShortcut.register('ctrl+d', () => {
|
||||
event.sender.send('new-window');
|
||||
});
|
||||
})
|
||||
|
||||
|
||||
ipcMain.on('msg-trigger', async (event, arg) => {
|
||||
const window = arg.winId ? BrowserWindow.fromId(arg.winId) : mainWindow
|
||||
const operators = arg.type.split('.');
|
||||
let fn = Api;
|
||||
operators.forEach((op) => {
|
||||
fn = fn[op];
|
||||
});
|
||||
const data = await fn(arg, window);
|
||||
window.webContents.send(`msg-back-${arg.type}`, data);
|
||||
});
|
||||
|
||||
ipcMain.on('new-window', (event, arg) => {
|
||||
const opts = {
|
||||
...arg,
|
||||
searchType: 'subWindow',
|
||||
}
|
||||
separator.init(opts);
|
||||
});
|
||||
|
||||
ipcMain.on('start-picker', () => {
|
||||
const mouseTrack = mouseEvents();
|
||||
picker.init();
|
||||
picker.getWindow().on("close", () => {
|
||||
mouseTrack.destroy();
|
||||
});
|
||||
mouseTrack.on('move', (x, y) => {
|
||||
if (!picker.getWindow()) return;
|
||||
let color = "#" + robot.getPixelColor(parseInt(x), parseInt(y));
|
||||
picker.getWindow().setPosition(parseInt(x) - 50, parseInt(y) - 50);
|
||||
picker.getWindow().webContents.send("updatePicker", color);
|
||||
})
|
||||
mouseTrack.on("left-up", (x, y) => {
|
||||
const color = "#" + robot.getPixelColor(parseInt(x), parseInt(y));
|
||||
clipboard.writeText("#" + robot.getPixelColor(parseInt(x), parseInt(y)));
|
||||
new Notification({ title: 'Rubick 通知', body: `${color} 已保存到剪切板` }).show();
|
||||
closePicker();
|
||||
});
|
||||
let pos = robot.getMousePos();
|
||||
picker
|
||||
.getWindow()
|
||||
.setPosition(parseInt(pos.x) - 50, parseInt(pos.y) - 50);
|
||||
|
||||
picker
|
||||
.getWindow()
|
||||
.webContents.send(
|
||||
"updatePicker",
|
||||
robot.getPixelColor(pos.x, pos.y)
|
||||
);
|
||||
|
||||
ipcMain.on("closePicker", closePicker);
|
||||
mouseTrack.on("right-up", closePicker);
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user