Selaa lähdekoodia

chromeExtension

gaoshuaixing 3 vuotta sitten
vanhempi
commit
42415af347

+ 1 - 1
app/controller/example.js

@@ -60,7 +60,7 @@ class ExampleController extends BaseController {
     const self = this;
     const { ctx, service } = this;
     const data = {};
-    let tmpDir = service.storage.getStorageDir();
+    let tmpDir = Utils.getLogDir();
 
     const file = ctx.request.files[0];
     this.app.logger.info('file:', file);

+ 24 - 1
electron/controller/example.js

@@ -3,9 +3,11 @@
 const _ = require('lodash');
 const path = require('path');
 const is = require('electron-is');
+const unzip = require("unzip-crx-3");
 const Controller = require('ee-core').Controller;
 const electronApp = require('electron').app;
 const {dialog, webContents, shell, BrowserWindow, BrowserView, Notification, powerMonitor, screen, nativeTheme} = require('electron');
+const chromeExtension = require('../library/chromeExtension');
 
 let myTimer = null;
 let browserViewObj = null;
@@ -19,7 +21,7 @@ class ExampleController extends Controller {
 
   /**
    * 所有方法接收两个参数
-   * args 前端传的参数
+   * @param args 前端 或 egg,传的参数(单个参数,或参数数组)
    * @param event - IpcMainEvent 文档:https://www.electronjs.org/docs/latest/api/structures/ipc-main-event
    */
 
@@ -203,6 +205,27 @@ class ExampleController extends Controller {
     winObj.loadURL(content);
 
     return winObj.id
+  }
+  
+  /**
+   * 加载扩展程序
+   */
+  async loadExtension (args) {
+    const crxFile = args[0];
+    if (_.isEmpty(crxFile)) {
+      return false;
+    }
+    const extensionId = path.basename(crxFile, '.crx');
+    const chromeExtensionDir = chromeExtension.getDirectory();
+    const extensionDir = path.join(chromeExtensionDir, extensionId);
+
+    console.log("[api] [example] [loadExtension] extension id:", extensionId);
+    unzip(crxFile, extensionDir).then(() => {    
+      console.log("[api] [example] [loadExtension] unzip success!");
+      chromeExtension.load(extensionId);
+    });
+
+    return true;
   }  
 }
 

+ 0 - 117
electron/lib/api.js

@@ -1,117 +0,0 @@
-'use strict';
-
-const fs = require('fs');
-const http = require('http');
-const path = require('path');
-const _ = require('lodash');
-const storage = require('./storage');
-const socketIo = require('socket.io');
-const eLogger = require('./eLogger').get();
-
-const apis = {};
-
-/**
- * 安装模块
- */
-exports.setup = async function () {
-  console.log('[electron-lib-api] [setup]');
-  setApi();
-
-  // use api server
-  let port = await storage.setIpcDynamicPort();
-  eLogger.info('[api] [setup] dynamic ipc port:', port);
-  const listen = 'localhost';
-  port = port ? port : 7069;
-
-  const server = http.createServer(function(req, res) {
-    eLogger.info('[api] [setup] command received', { method: req.method, url: req.url });
-    if ((req.method === 'POST' && req.url === '/send')) {
-      let body = '';
-      req.setEncoding('utf8');
-      req
-      .on('data', function(data) {
-        body += data;
-      })
-      .on('end', function() {
-        let message;
-        try {
-          message = JSON.parse(body);
-        } catch (e) {
-          res.statusCode = 400;
-          return res.end('request body parse failure.');
-        }
-        if (!apis[message.cmd]) {
-          eLogger.info('[api] [setup] invalid command called:', message.cmd);
-          res.statusCode = 404;
-          return res.end('NG');
-        }
-
-        eLogger.info('[api] [setup] command received message:', message);
-        const data = apis[message.cmd](...message.params);
-        res.statusCode = 200;
-        const result = {
-          err: null,
-          data: data,
-        };
-        res.end(JSON.stringify(result));
-      });
-    } else {
-      res.statusCode = 404;
-      res.end('NOT FOUND');
-    }
-  });
-
-  // socket io
-  const io = socketIo(server);
-  io.on('connection', (socket) => {
-    socket.on('ipc', (message, callback) => {
-      eLogger.info('[api] [setup] socket id:' + socket.id + ' message cmd: ' + message.cmd);
-      const data = apis[message.cmd](...message.params);
-      if (data && typeof data.then === 'function') { // 判断是否是异步
-        data.then((data) => {
-          const result = {
-            err: null,
-            data: data,
-          };
-          callback(result)
-        });
-      } else {
-        const result = {
-          err: null,
-          data: data,
-        };
-        callback(result);
-      }
-    });
-  });
-
-  server.listen(port, listen, function() {
-    eLogger.info('[api] [setup] server is listening on', `${listen}:${port}`);
-  });
-
-  return true;
-};
-
-function setApi() {
-  const apiDir = path.normalize(__dirname + '/../apis');
-  fs.readdirSync(apiDir).forEach(function(filename) {
-    if (path.extname(filename) === '.js' && filename !== 'index.js') {
-      const name = path.basename(filename, '.js');
-      const fileObj = require(`../apis/${filename}`);
-      _.map(fileObj, function(fn, method) {
-        let methodName = getApiName(name, method);
-        apis[methodName] = fn;
-      });
-    }
-  });
-};
-
-/**
- * get api method name
- * ex.) jsname='user' method='get' => 'user.get'
- * @param {String} jsname
- * @param {String} method
- */
-function getApiName (jsname, method) {
-  return jsname + '.' + method;
-}

+ 0 - 28
electron/lib/autoLaunch.js

@@ -1,28 +0,0 @@
-const { app } = require('electron');
-const { LOGIN_SETTING_OPTIONS } = require('./constant').AutoLaunch;
-
-class AutoLaunch {
-  enable () {
-    const enabled = app.getLoginItemSettings(LOGIN_SETTING_OPTIONS).openAtLogin;
-    if (enabled) {
-      return true;
-    }
-    app.setLoginItemSettings({
-      ...LOGIN_SETTING_OPTIONS,
-      openAtLogin: true
-    })
-    return true;
-  }
-  
-  disable () {
-    app.setLoginItemSettings({ openAtLogin: false })
-    return true;
-  }
-
-  isEnabled () {
-    const enabled = app.getLoginItemSettings(LOGIN_SETTING_OPTIONS).openAtLogin;
-    return enabled;
-  }
-}
-
-module.exports = AutoLaunch;

+ 0 - 67
electron/lib/autoUpdater.js

@@ -1,67 +0,0 @@
-'use strict';
-
-const updater = require("electron-updater");
-const autoUpdater = updater.autoUpdater;
-const config = require('../config');
-const {app} = require('electron');
-const eLogger = require('./eLogger').get();
-const helper = require('./helper');
-
-/**
- * 安装模块
- */
-exports.setup = function () {
-  console.log('[electron-lib-autoUpater] [setup]');
-  const version = app.getVersion();
-  eLogger.info('[autoUpdater] [setup] current version: ', version);
-  const platformObj = helper.getPlatform();
-
-  const updateConfig = config.get('autoUpdate');
-  let server = updateConfig.options.url;
-  server = `${server}${platformObj.platform}/`;
-  eLogger.info('[autoUpdater] [setup] server: ', server);
-  updateConfig.options.url = server;
-
-  try {
-    autoUpdater.setFeedURL(updateConfig.options);
-  } catch (error) {
-    eLogger.error('[autoUpdater] [setup] setFeedURL error : ', error);
-  }
-
-  autoUpdater.on('checking-for-update', () => {
-    sendStatusToWindow('Checking for update...');
-  })
-  autoUpdater.on('update-available', (info) => {
-    sendStatusToWindow('Update available.');
-  })
-  autoUpdater.on('update-not-available', (info) => {
-    sendStatusToWindow('Update not available.');
-  })
-  autoUpdater.on('error', (err) => {
-    sendStatusToWindow('Error in auto-updater. ' + err);
-  })
-  autoUpdater.on('download-progress', (progressObj) => {
-    let log_message = "Download speed: " + progressObj.bytesPerSecond;
-    log_message = log_message + ' - Downloaded ' + progressObj.percent + '%';
-    log_message = log_message + ' (' + progressObj.transferred + "/" + progressObj.total + ')';
-    sendStatusToWindow(log_message);
-  })
-  autoUpdater.on('update-downloaded', (info) => {
-    sendStatusToWindow('Update downloaded');
-    // quit and update
-    helper.appQuit();
-    autoUpdater.quitAndInstall();
-  });
-
-};
-
-exports.checkUpdate = function () {
-  autoUpdater.checkForUpdatesAndNotify();
-}
-
-function sendStatusToWindow(text) {
-  eLogger.info(text);
-  MAIN_WINDOW.webContents.send('message', text);
-}
-
-exports = module.exports;

+ 0 - 57
electron/lib/awaken.js

@@ -1,57 +0,0 @@
-'use strict';
-
-const { app } = require('electron');
-const config = require('../config');
-const eLogger = require('./eLogger').get();
-
-/**
- * 唤起Electron应用
- */
-exports.setup = function () {
-	console.log('[electron-lib-awaken] [setup]');
-	const protocolInfo = config.get('awakeProtocol');
-	const PROTOCOL = protocolInfo.protocol;
-
-	// 唤醒的协议详情,开发者可根据所带参数,开发额外功能
-	let awakeUrlInfo = {}
-
-	app.setAsDefaultProtocolClient(PROTOCOL);
-
-	handleArgv(process.argv);
-
-	app.on('second-instance', (event, argv) => {
-		if (process.platform === 'win32') {
-			handleArgv(argv)
-		}
-	})
-
-	// 仅用于macOS
-	app.on('open-url', (event, urlStr) => {
-		handleUrl(urlStr)
-	})
-
-	// 参数处理
-	function handleArgv(argv) {
-		const offset = app.isPackaged ? 1 : 2;
-		const url = argv.find((arg, i) => i >= offset && arg.startsWith(PROTOCOL));
-		handleUrl(url)
-	}
-
-	// url解析
-	function handleUrl(awakeUrlStr) {
-		eLogger.info('[awaken] [handleUrl] url:', awakeUrlStr);
-		if (!awakeUrlStr || awakeUrlStr.length === 0) {
-			return
-		}
-		const {hostname, pathname, search} = new URL(awakeUrlStr);
-		awakeUrlInfo = {
-			urlStr: awakeUrlStr,
-			urlHost: hostname,
-			urlPath: pathname,
-			urlParams: search && search.slice(1)
-		}
-		eLogger.info('[awaken] [handleUrl] awakeUrlInfo:', awakeUrlInfo);
-	}
-}
-
-exports = module.exports;

+ 0 - 83
electron/lib/chromeExtension.js

@@ -1,83 +0,0 @@
-'use strict';
-
-const { app, session } = require('electron');
-const _ = require('lodash');
-const fs = require('fs');
-const path = require('path')
-const eLogger = require('./eLogger').get();
-
-/**
- * 安装模块
- */
-exports.setup = async function () {
-  console.log('[electron-lib-chromeExtension] [setup]');
-  const extensionIds = this.getAllIds();
-  
-  for (let i = 0; i < extensionIds.length; i++) {
-    await this.load(extensionIds[i]);
-  }
-}
-
-/**
- * 获取扩展id列表(crx解压后的目录名,即是该扩展的id)
- */
-exports.getAllIds = function () {
-  const extendsionDir = this.getDirectory();
-  const ids = getDirs(extendsionDir);
-
-  return ids;
-}
-
-/**
- * 扩展所在目录
- */
-exports.getDirectory = function () {
-  let extensionDirPath = '';
-  let variablePath = 'build'; // 打包前路径
-  if (app.isPackaged) {
-    variablePath = '..'; // 打包后路径
-  }
-  extensionDirPath = path.join(app.getAppPath(), variablePath, "extraResources", "chromeExtension");
-
-  return extensionDirPath;
-}
-
-/**
- * 加载扩展
- */
-exports.load = async function (extensionId = '') {
-  if (_.isEmpty(extensionId)) {
-    return false
-  }
-  
-  try {
-    const extensionPath = path.join(this.getDirectory(), extensionId);
-    console.log('[chromeExtension] [load] extensionPath:', extensionPath);
-    await session.defaultSession.loadExtension(extensionPath, { allowFileAccess: true });
-  } catch (e) {
-    eLogger.error('[chromeExtension] [load] load extension error extensionId:%s, errorInfo:%s', extensionId, e.toString());
-    return false
-  }
-
-  return true
-}
-
-/*
- * 获取目录下所有文件夹
- */
-function getDirs(dir) {
-  if (!dir) {
-    return [];
-  }
-
-  const components = [];
-  const files = fs.readdirSync(dir);
-  files.forEach(function(item, index) {
-    const stat = fs.lstatSync(dir + '/' + item);
-    if (stat.isDirectory() === true) {
-      components.push(item);
-    }
-  });
-
-  return components;
-};

+ 0 - 10
electron/lib/constant.js

@@ -1,10 +0,0 @@
-module.exports = {
-  AutoLaunch: {
-    LOGIN_SETTING_OPTIONS: {
-      // For Windows
-      args: [
-        '--opened-at-login=1'
-      ]
-    }
-  },
-};

+ 0 - 13
electron/lib/crashReport.js

@@ -1,13 +0,0 @@
-'use strict';
-
-const { crashReporter } = require('electron');
-const config = require('../config');
-
-/**
- * 安装模块
- */
-exports.setup = function () {
-  console.log('[electron-lib-crashReport] [setup]');
-	const options = config.get('crashReport');
-  crashReporter.start(options);
-}

+ 0 - 39
electron/lib/eLogger.js

@@ -1,39 +0,0 @@
-const eLog = require('electron-log');
-const config = require('../config');
-
-class Log {
-  constructor () {
-    if (typeof Log.instance === 'object') {
-      return Log.instance;
-    }
-
-    let logConfig = config.get('log');
-    for (let transport in logConfig) {
-      const configInfo = logConfig[transport];
-      if (transport === 'file') {
-        eLog.transports.file.level = configInfo.level;
-        eLog.transports.file.file = configInfo.fileName;
-        eLog.transports.file.fileName = configInfo.fileName;
-        eLog.transports.file.format = configInfo.format;
-        eLog.transports.file.maxSize = configInfo.maxSize;
-      }  
-    }
-    Log.instance = eLog;
-
-    return Log.instance;
-  }
-}
-
-/**
- * 安装模块
- */
-exports.setup = function () {
-  console.log('[electron-lib-eLogger] [setup]');
-  return new Log();
-}
-
-exports.get = function () {
-  return new Log();
-}
-
-exports = module.exports;

+ 0 - 52
electron/lib/helper.js

@@ -1,52 +0,0 @@
-'use strict';
-
-const is = require('electron-is');
-const { app } = require('electron');
-
-/**
- * application quit
- * 
- * @return {undefined}
- */
-exports.appQuit = function () {
-	MAIN_WINDOW.destroy();
-	app.quit();
-}
-
-/**
- * get Platform
- * 
- * @return {Object}
- */
-exports.getPlatform = function () {
-	let platform = null;
-	let arch = null;
-	if (is.windows()) {
-		platform = 'windows';
-	} else if (is.macOS()) {
-		platform = 'macOS';
-	} else if (is.linux()) {
-		platform = 'linux';
-	} else {
-		platform = 'other';
-	}
-
-	if (is.x86()) {
-		arch = '32';
-	} else if (is.x64()) {
-		arch = '64';
-	} else if (process.arch == 'arm') {
-		arch = 'arm32';
-	} else if (process.arch == 'arm64') {
-		arch = 'arm64';
-	} else {
-		arch = 'other';
-	}
-
-	const platfromObj = {
-		platform: platform,
-		arch: arch
-	};
-
-	return platfromObj;
-}

+ 0 - 56
electron/lib/ipcMain.js

@@ -1,56 +0,0 @@
-const { ipcMain: ipc } = require('electron')
-const path = require('path')
-const fs = require('fs')
-const _ = require('lodash');
-
-/**
- * 发送响应信息给渲染进程
- * @param event
- * @param channel
- * @param data
- * @private
- */
-const _echo = (event, channel, data) => {
-  console.log('[ipc] [answerRenderer] result: ', {channel, data})
-  event.reply(`${channel}`, data)
-}
-
-/**
- * 执行主进程函数,并响应渲染进程
- * @param channel
- * @param callback
- */
-const answerRenderer = (channel, callback) => {
-  ipc.on(channel, async (event, param) => {
-    const result = await callback(event, channel, param)
-    _echo(event, channel, result)
-  })
-}
-
-/**
- * get api method name
- * ex.) jsname='user' method='get' => 'user.get'
- * @param {String} jsname
- * @param {String} method
- */
-const getApiName = (jsname, method) => {
-  return jsname + '.' + method;
-}
-
-/**
- * 加载所有的主程序
- */
-exports.setup = () => {
-  console.log('[electron-lib-ipc] [setup]');
-  const ipcDir = path.normalize(__dirname + '/../ipc');
-  fs.readdirSync(ipcDir).forEach(function (filename) {
-    if (path.extname(filename) === '.js' && filename !== 'index.js') {
-      const name = path.basename(filename, '.js');
-      const fileObj = require(`../ipc/${filename}`);
-      _.map(fileObj, function(fn, method) {
-        let methodName = getApiName(name, method);
-        answerRenderer(methodName, fn);
-      });
-    }
-  })
-}

+ 0 - 69
electron/lib/lanucher.js

@@ -1,69 +0,0 @@
-'use strict';
-
-const path = require('path');
-const startCluster = require('egg-cluster').startCluster;
-const {app} = require('electron');
-
-exports = module.exports;
-
-/**
- * egg server start
- * 
- * @param {Object} argv
- * @return {Promise}
- */
-exports.start = function (argv) {
-    const { env } = process;
-
-    let baseDir = app.getAppPath();
-    argv.baseDir = baseDir;
-    argv.framework = path.join(baseDir, 'node_modules/egg');
-
-    const appName = app.getName();
-    argv.title = argv.title || `egg-server-${appName}`;
-
-    // normalize env
-    env.HOME = baseDir;
-    env.NODE_ENV = 'production';
-
-    // it makes env big but more robust
-    env.PATH = env.Path = [
-      // for nodeinstall
-      path.join(baseDir, 'node_modules/.bin'),
-      // support `.node/bin`, due to npm5 will remove `node_modules/.bin`
-      path.join(baseDir, '.node/bin'),
-      // adjust env for win
-      env.PATH || env.Path,
-    ].filter(x => !!x).join(path.delimiter);
-
-    // for alinode
-    env.ENABLE_NODE_LOG = 'YES';
-    env.NODE_LOG_DIR = env.NODE_LOG_DIR || path.join(baseDir, 'logs/alinode');
-
-    // cli argv -> process.env.EGG_SERVER_ENV -> `undefined` then egg will use `prod`
-    if (argv.env) {
-      // if undefined, should not pass key due to `spwan`, https://github.com/nodejs/node/blob/master/lib/child_process.js#L470
-      env.EGG_SERVER_ENV = argv.env;
-    }
-
-    // remove unused properties from stringify, alias had been remove by `removeAlias`
-    const ignoreKeys = [ '_', '$0', 'env', 'daemon', 'stdout', 'stderr', 'timeout', 'ignore-stderr', 'node' ];
-    const clusterOptions = stringify(argv, ignoreKeys);
-    const options = JSON.parse(clusterOptions);
-    // console.log('[lanucher] options:', options)
-    return new Promise((resolve, reject) => {
-      startCluster(options, function(){
-        resolve('success');
-      });
-    });
-};
-
-function stringify(obj, ignore) {
-  const result = {};
-  Object.keys(obj).forEach(key => {
-    if (!ignore.includes(key)) {
-      result[key] = obj[key];
-    }
-  });
-  return JSON.stringify(result);
-}

+ 0 - 22
electron/lib/security.js

@@ -1,22 +0,0 @@
-'use strict';
-
-const helper = require('./helper');
-const eLogger = require('./eLogger').get();
-
-/**
- * 安装模块
- */
-exports.setup = function () {
-	console.log('[electron-lib-security] [setup]');
-	const runWithDebug = process.argv.find(function(e){
-		let isHasDebug = e.includes("--inspect") || e.includes("--inspect-brk") || e.includes("--remote-debugging-port");
-		return isHasDebug;
-	})
-
-	if (runWithDebug) {
-		eLogger.info('[security] [setup] runWithDebug:', runWithDebug);
-    helper.appQuit();
-	}
-}
-
-exports = module.exports;

+ 0 - 54
electron/lib/shortcut.js

@@ -1,54 +0,0 @@
-'use strict';
-
-const { globalShortcut } = require('electron');
-const storage = require('./storage');
-
-/**
- * 安装模块
- */
-exports.setup = function () {
-  // default
-  console.log('[electron-lib-shortcut] [setup]');
-  storage.iniPreferences();
-}
-
-/**
- * 快捷键注册
- * @param {Object} shortcutObj - shortcut object
- * @param {Boolean} force - force register
- * @param {Function} fn - callback
- * @return {Boolean}
- */
-exports.register = function (shortcutObj, force = true, fn) {
-  if (!shortcutObj['id'] || !shortcutObj['name'] || !shortcutObj['cmd']) {
-    return false;
-  }
-  const isRegistered = this.isRegistered(shortcutObj['cmd']);
-  if (isRegistered && !force) {
-    return false;
-  }
-  storage.setShortcuts(shortcutObj);
-  globalShortcut.register(shortcutObj['cmd'], fn)
-
-  return true;
-}
-
-/**
- * 快捷键是否注册成功
- * @param {String} cmd - shortcut string
- * @return {Boolean}
- */
-exports.isRegistered = function (cmd) {
-  return globalShortcut.isRegistered(cmd)
-}
-
-/**
- * 注销全局快捷键
- * @param {String} cmd - shortcut string
- * @return {Boolean}
- */
-exports.unregister = function (cmd) {
-  globalShortcut.unregister(cmd)
-}
-
-exports = module.exports;

+ 0 - 125
electron/lib/storage.js

@@ -1,125 +0,0 @@
-'use strict';
-
-const path = require('path');
-const lowdb = require('lowdb');
-const FileSync = require('lowdb/adapters/FileSync');
-const fs = require('fs');
-const getPort = require('get-port');
-const utils = require('../../app/utils/utils');
-const storageKey = require('../../app/const/storageKey');
-const os = require('os');
-const pkg = require('../../package.json');
-const storageDb = 'db.json';
-const _ = require('lodash');
-
-/**
- * 安装模块
- */
-exports.setup = function () {
-  console.log('[electron-lib-storage] [setup]');
-  const storageDir = this.getStorageDir();
-  if (!fs.existsSync(storageDir)) {
-    utils.mkdir(storageDir);
-    utils.chmodPath(storageDir, '777');
-  }
-  const file = storageDir + storageDb;
-  const adapter = new FileSync(file);
-  const db = lowdb(adapter);
-  const eggConfigKey = storageKey.EGG_CONFIG;
-  if (!db.has(eggConfigKey).value()) {
-    db.set(eggConfigKey, {}).write();
-  }
-
-  return true;
-};
-
-exports.instance = function (file = null) {
-  if (!file) {
-    const storageDir = this.getStorageDir();
-    file = path.normalize(storageDir + storageDb);
-  }
-  const isExist = fs.existsSync(file);
-  if (!isExist) {
-      return null;
-  }
-
-  const adapter = new FileSync(file);
-  const db = lowdb(adapter);
-
-  return db;
-};
-
-exports.getEggConfig = function () {
-  const key = storageKey.EGG_CONFIG;
-  const res = this.instance()
-  .get(key)
-  .value();
-
-  return res;
-};
-
-exports.setDynamicPort = async function () {
-  // const eggConfig = config.get('egg');
-  // console.log('setDynamicPort eggConfig:', eggConfig);
-  // const dynamicPort = await getPort({port: eggConfig.port})
-  const dynamicPort = await getPort();
-  const key = storageKey.EGG_CONFIG + '.port';
-  const res = this.instance()
-    .set(key, dynamicPort)
-    .write();
-  
-  return res;
-};
-
-exports.setIpcDynamicPort = async function () {
-  const key = storageKey.ELECTRON_IPC + '.port';
-  const dynamicPort = await getPort();
-  this.instance()
-    .set(key, dynamicPort)
-    .write();
-  
-  return dynamicPort;
-};
-
-exports.getStorageDir = function () {
-  const userHomeDir = os.userInfo().homedir;
-  const storageDir = path.normalize(userHomeDir + '/' + pkg.name + '/');
-
-  return storageDir;
-}
-
-exports.iniPreferences = function () {
-  const key = storageKey.PREFERENCES;
-  if (!this.instance().has(key).value()) {
-    this.instance().set(key, {}).write();
-  }
-  const res = this.instance()
-  .get(key)
-  .value();
-
-  return res;
-};
-
-exports.setShortcuts = function (data) {
-  const key = storageKey.PREFERENCES + '.shortcuts';
-  if (!this.instance().has(key).value()) {
-    this.instance().set(key, []).write();
-  }
-  const item = this.instance().get(key).find({id: data.id}).value();
-  if (_.isEmpty(item)) {
-    this.instance()
-    .get(key)
-    .push(data)
-    .write();
-  } else {
-    this.instance()
-    .get(key)
-    .find({id: data.id})
-    .assign(data)
-    .write();
-  }
-
-  return true;
-};
-
-exports = module.exports;

+ 0 - 63
electron/lib/tray.js

@@ -1,63 +0,0 @@
-'use strict';
-
-const {app, Tray, Menu} = require('electron');
-const path = require('path');
-const helper = require('./helper');
-const config = require('../config');
-
-/**
- * 安装模块
- */
-exports.setup = function () {
-  console.log('[electron-lib-tray] [setup]');
-  const cfg = config.get('tray');
-
-  // 托盘图标
-  let iconPath = path.join(app.getAppPath(), cfg.icon);
-
-  // 托盘菜单功能列表
-  let trayMenuTemplate = [
-    {
-      label: '显示',
-      click: function () {
-        MAIN_WINDOW.show();
-      }
-    },
-    {
-      label: '退出',
-      click: function () {
-        helper.appQuit();
-      }
-    }
-  ]
-
-  // 点击关闭,最小化到托盘
-  MAIN_WINDOW.on('close', (event) => {
-    if (!CAN_QUIT) {
-      MAIN_WINDOW.hide();
-      MAIN_WINDOW.setSkipTaskbar(true);
-      event.preventDefault();
-    }
-  });
-  MAIN_WINDOW.show();
-
-  APP_TRAY = new Tray(iconPath);
-  APP_TRAY.setToolTip(cfg.title); // 托盘标题
-  const contextMenu = Menu.buildFromTemplate(trayMenuTemplate);
-  APP_TRAY.setContextMenu(contextMenu);
-
-  // 监听 显示/隐藏
-  APP_TRAY.on('click', function(){
-    if (MAIN_WINDOW.isVisible()) {
-      MAIN_WINDOW.hide();
-      MAIN_WINDOW.setSkipTaskbar(false);
-    } else {
-      MAIN_WINDOW.show();
-      MAIN_WINDOW.setSkipTaskbar(true);
-    }
-  });
-  
-  return APP_TRAY;
-}
-
-exports = module.exports;

+ 1 - 1
electron/library/chromeExtension.js

@@ -13,7 +13,7 @@ module.exports = {
   /**
    * 安装
    */   
-  async install (eeApp) {
+  async install () {
     console.log('[preload] load chrome extension module');
     const extensionIds = this.getAllIds();
     for (let i = 0; i < extensionIds.length; i++) {

+ 2 - 7
frontend/src/views/base/extension/Index.vue

@@ -16,7 +16,7 @@
           <a-icon type="inbox" />
         </p>
         <p class="ant-upload-text">
-          Click or drag file to this area to upload
+          上传
         </p>
         <p class="ant-upload-hint">
         </p>
@@ -37,7 +37,7 @@
 export default {
   data() {
     return {
-      action_url: process.env.VUE_APP_API_BASE_URL + '/api/v1/example/uploadExtension',
+      action_url: process.env.VUE_APP_API_BASE_URL + '/api/example/uploadExtension',
     };
   },
   mounted () {
@@ -54,11 +54,6 @@ export default {
       if (status === 'done') {
         const uploadRes = info.file.response;
         console.log('uploadRes:', uploadRes)
-        // if (uploadRes.code !== 'success') {
-        //   this.$message.error(`file upload failed ${uploadRes.code} .`);
-        //   return false;
-        // }
-        // this.$message.success(`${info.file.name} file uploaded successfully.`);
       } else if (status === 'error') {
         this.$message.error(`${info.file.name} file upload failed.`);
       }

+ 2 - 1
package.json

@@ -106,6 +106,7 @@
     "egg-scripts": "^2.15.2",
     "egg-view-ejs": "^2.0.1",
     "electron-is": "^3.0.0",
-    "lodash": "^4.17.21"
+    "lodash": "^4.17.21",
+    "unzip-crx-3": "^0.2.0"
   }
 }