Explorar o código

唤醒应用功能

gaoshuaixing %!s(int64=4) %!d(string=hai) anos
pai
achega
d4b5fff654
Modificáronse 5 ficheiros con 72 adicións e 23 borrados
  1. 6 17
      electron/config.js
  2. 5 5
      electron/lib/api.js
  3. 56 0
      electron/lib/awaken.js
  4. 4 0
      electron/preferences.js
  5. 1 1
      package.json

+ 6 - 17
electron/config.js

@@ -59,26 +59,15 @@ const config = {
       provider: 'generic', // or github, s3, bintray
       url: 'https://raw.githubusercontent.com/wallace5303/electron-egg/master/' // resource dir
     }
+  },
+  awakeProtocol: {
+    protocol: 'electron-egg', // 自定义协议名(默认你的应用名称-英文)
+    args: []
   }
 }
 
 exports.get = function (flag = '', env = 'prod') {
   console.log('[config] [get] flag:', flag);
-  if (flag === 'developmentMode') {
-    return config.developmentMode;
-  }
-
-  if (flag === 'log') {
-    return config.log;
-  }
-
-  if (flag === 'windowsOption') {
-    return config.windowsOption;
-  }
-
-  if (flag === 'webEgg') {
-    return config.egg;
-  }
 
   if (flag === 'egg') {
     const eggConfig = storage.getEggConfig();
@@ -88,8 +77,8 @@ exports.get = function (flag = '', env = 'prod') {
     return config.egg;
   }
 
-  if (flag === 'autoUpdate') {
-    return config.autoUpdate;
+  if (flag in config) {
+    return config[flag];
   }
 
   return {};

+ 5 - 5
electron/lib/api.js

@@ -22,7 +22,7 @@ exports.setup = async function () {
   port = port ? port : 7069;
 
   const server = http.createServer(function(req, res) {
-    eLogger.info('[ api ] [setup] command received', { method: req.method, url: req.url });
+    eLogger.info('[api] [setup] command received', { method: req.method, url: req.url });
     if ((req.method === 'POST' && req.url === '/send')) {
       let body = '';
       req.setEncoding('utf8');
@@ -39,12 +39,12 @@ exports.setup = async function () {
           return res.end('request body parse failure.');
         }
         if (!apis[message.cmd]) {
-          eLogger.info('[ api ] [setup] invalid command called:', 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);
+        eLogger.info('[api] [setup] command received message:', message);
         const data = apis[message.cmd](...message.params);
         res.statusCode = 200;
         const result = {
@@ -63,7 +63,7 @@ exports.setup = async function () {
   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);
+      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) => {
@@ -84,7 +84,7 @@ exports.setup = async function () {
   });
 
   server.listen(port, listen, function() {
-    eLogger.info('[ api ] [setup] server is listening on', `${listen}:${port}`);
+    eLogger.info('[api] [setup] server is listening on', `${listen}:${port}`);
   });
 
   return true;

+ 56 - 0
electron/lib/awaken.js

@@ -0,0 +1,56 @@
+'use strict';
+
+const { app } = require('electron');
+const config = require('../config');
+const eLogger = require('./eLogger').get();
+
+/**
+ * 唤起Electron应用
+ */
+exports.setup = function () {
+	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;

+ 4 - 0
electron/preferences.js

@@ -2,6 +2,7 @@
 
 const shortcut = require('./lib/shortcut');
 const tray = require('./lib/tray');
+const awaken = require('./lib/awaken');
 
 module.exports = () => {
   // shortcut
@@ -9,4 +10,7 @@ module.exports = () => {
 
   // tray
   tray.setup();
+
+  // awaken 
+  awaken.setup();
 }

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "electron-egg",
-  "version": "1.10.0",
+  "version": "1.11.0",
   "description": "A fast, desktop software development framework",
   "main": "main.js",
   "softName": "electron-egg",