diff --git a/package.json b/package.json index 4c86fc3..8d6e086 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,8 @@ "axios": "^0.18.1", "download-git-repo": "^3.0.2", "electron-store": "^8.0.0", + "marked": "^2.0.7", + "query-string": "^7.0.0", "uuid": "^8.3.2", "vue": "^2.5.16", "vue-electron": "^1.0.6", diff --git a/src/common/event-tracker/index.js b/src/common/event-tracker/index.js deleted file mode 100644 index b78c8b8..0000000 --- a/src/common/event-tracker/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import { ipcMain } from 'electron'; - -const init = () => { - ipcMain.on('msg-trigger', async (event, arg) => { - - }); -} - -export default () => { - init(); -} diff --git a/src/common/utils.js b/src/common/utils.js deleted file mode 100644 index 610c7d2..0000000 --- a/src/common/utils.js +++ /dev/null @@ -1,7 +0,0 @@ -export const getlocalDataFile = () => { - let localDataFile = process.env.HOME; - if (!localDataFile) { - localDataFile = process.env.LOCALAPPDATA; - } - return localDataFile; -}; diff --git a/src/main/api.js b/src/main/api.js index 57ca9ee..7cdcec7 100644 --- a/src/main/api.js +++ b/src/main/api.js @@ -1,9 +1,16 @@ import {app} from 'electron'; +import {getlocalDataFile, saveData, getData} from './common/utils'; +import path from "path"; + +const appPath = path.join(getlocalDataFile()); +const dbPath = path.join(appPath, './db.json'); + export default { getPath(arg) { return app.getPath(arg.name); }, hideMainWindow(arg, mainWindow) { + console.log(111, mainWindow) mainWindow.hide(); }, showMainWindow(arg, mainWindow) { @@ -13,6 +20,87 @@ export default { return arg }, setExpendHeight({height}, mainWindow) { + console.log(height); mainWindow.setSize(788, height); + }, + db: { + put({data}) { + data._rev = ''; + let dbData = getData(dbPath) || []; + let target = []; + console.log(data, dbData); + 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; + } } } diff --git a/src/main/common.js b/src/main/common.js index b47e49c..380f178 100644 --- a/src/main/common.js +++ b/src/main/common.js @@ -1,4 +1,5 @@ -import {globalShortcut, ipcMain} from 'electron'; +import {globalShortcut, ipcMain, BrowserWindow} from 'electron'; +import {stringify} from 'query-string'; import Api from './api'; export default function init(mainWindow) { @@ -15,9 +16,41 @@ export default function init(mainWindow) { }); ipcMain.on('msg-trigger', async (event, arg) => { - const data = Api[arg.type](arg, mainWindow); + 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 = fn(arg, window); event.sender.send(`msg-back-${arg.type}`, data); }); + + ipcMain.on('new-window', (event, arg) => { + const opts = { + ...arg, + searchType: 'subWindow', + } + const winURL = process.env.NODE_ENV === 'development' + ? `http://localhost:9080/#/plugin?${stringify(opts)}` + : `file://${__dirname}/index.html/#/plugin?${stringify(opts)}` + const win = new BrowserWindow({ + height: 600, + useContentSize: true, + width: 788, + titleBarStyle: 'hiddenInset', + title: '拉比克', + webPreferences: { + webSecurity: false, + enableRemoteModule: true, + backgroundThrottling: false, + webviewTag: true, + nodeIntegration: true // 在网页中集成Node + } + }); + win.loadURL(winURL) + win.once('ready-to-show', () => win.show()); + }) } diff --git a/src/main/common/utils.js b/src/main/common/utils.js new file mode 100644 index 0000000..0377ddd --- /dev/null +++ b/src/main/common/utils.js @@ -0,0 +1,21 @@ +import fs from "fs"; + +export const getlocalDataFile = () => { + let localDataFile = process.env.HOME; + if (!localDataFile) { + localDataFile = process.env.LOCALAPPDATA; + } + return localDataFile; +}; + +export function saveData(path, value) { + fs.writeFileSync(path, JSON.stringify(value)); +} + +export function getData(path, defaultValue) { + try { + return JSON.parse(fs.readFileSync(path, 'utf8')); + } catch (e) { + return defaultValue || undefined; + } +} diff --git a/src/main/index.js b/src/main/index.js index 1ed1c8b..01fb445 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -1,6 +1,5 @@ -import { app, BrowserWindow } from 'electron' +import { app, BrowserWindow, protocol } from 'electron' import '../renderer/store' -import eventTracker from '../common/event-tracker'; import init from './common'; import createTray from './tray'; /** @@ -27,6 +26,7 @@ function createWindow () { frame: false, title: '拉比克', webPreferences: { + webSecurity: false, enableRemoteModule: true, backgroundThrottling: false, webviewTag: true, @@ -39,8 +39,15 @@ function createWindow () { mainWindow.on('closed', () => { mainWindow = null }); + protocol.interceptFileProtocol('file', (req, callback) => { + const url = req.url.substr(8); + callback(decodeURI(url)); + }, (error) => { + if (error) { + console.error('Failed to register protocol'); + } + }); init(mainWindow); - eventTracker(); } app.on('ready', () => { diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 96b4c5e..f6a7d19 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -1,6 +1,6 @@ - diff --git a/src/renderer/pages/search/index.vue b/src/renderer/pages/search/index.vue index 3b0d1e0..d20dfd1 100644 --- a/src/renderer/pages/search/index.vue +++ b/src/renderer/pages/search/index.vue @@ -46,47 +46,6 @@ export default {