const { app: electronApp } = require('electron');
|
const Log = require('ee-core/log');
|
const Conf = require('ee-core/config');
|
|
/**
|
* 唤醒插件
|
* @class
|
*/
|
class AwakenAddon {
|
|
constructor() {
|
this.protocol = '';
|
}
|
|
/**
|
* 创建
|
*/
|
create () {
|
Log.info('[addon:awaken] load');
|
|
const cfg = Conf.getValue('addons.awaken');
|
this.protocol = cfg.protocol;
|
|
electronApp.setAsDefaultProtocolClient(this.protocol);
|
|
this.handleArgv(process.argv);
|
electronApp.on('second-instance', (event, argv) => {
|
if (process.platform === 'win32') {
|
this.handleArgv(argv)
|
}
|
})
|
|
// 仅用于macOS
|
electronApp.on('open-url', (event, urlStr) => {
|
this.handleUrl(urlStr)
|
})
|
}
|
|
/**
|
* 参数处理
|
*/
|
handleArgv(argv) {
|
const offset = electronApp.isPackaged ? 1 : 2;
|
const url = argv.find((arg, i) => i >= offset && arg.startsWith(this.protocol));
|
this.handleUrl(url)
|
}
|
|
/**
|
* url解析
|
*/
|
handleUrl(awakeUrlStr) {
|
if (!awakeUrlStr || awakeUrlStr.length === 0) {
|
return
|
}
|
const {hostname, pathname, search} = new URL(awakeUrlStr);
|
let awakeUrlInfo = {
|
urlStr: awakeUrlStr,
|
urlHost: hostname,
|
urlPath: pathname,
|
urlParams: search && search.slice(1)
|
}
|
Log.info('[addon:awaken] awakeUrlInfo:', awakeUrlInfo);
|
}
|
}
|
|
AwakenAddon.toString = () => '[class AwakenAddon]';
|
module.exports = AwakenAddon;
|