15815213711
2025-04-24 16c179b122eb8c69d31b0fab66c5e29b9c332b8d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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;