index.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. const { app: electronApp } = require('electron');
  2. const Log = require('ee-core/log');
  3. const Conf = require('ee-core/config');
  4. /**
  5. * 唤醒插件
  6. * @class
  7. */
  8. class AwakenAddon {
  9. constructor(app) {
  10. this.app = app;
  11. this.protocol = '';
  12. }
  13. /**
  14. * 创建
  15. */
  16. create () {
  17. Log.info('[addon:awaken] load');
  18. const cfg = Conf.getValue('addons.awaken');
  19. this.protocol = cfg.protocol;
  20. electronApp.setAsDefaultProtocolClient(this.protocol);
  21. const self = this;
  22. this.handleArgv(process.argv);
  23. electronApp.on('second-instance', (event, argv) => {
  24. if (process.platform === 'win32') {
  25. self.handleArgv(argv)
  26. }
  27. })
  28. // 仅用于macOS
  29. electronApp.on('open-url', (event, urlStr) => {
  30. self.handleUrl(urlStr)
  31. })
  32. }
  33. /**
  34. * 参数处理
  35. */
  36. handleArgv(argv) {
  37. const offset = electronApp.isPackaged ? 1 : 2;
  38. const url = argv.find((arg, i) => i >= offset && arg.startsWith(this.protocol));
  39. this.handleUrl(url)
  40. }
  41. /**
  42. * url解析
  43. */
  44. handleUrl(awakeUrlStr) {
  45. if (!awakeUrlStr || awakeUrlStr.length === 0) {
  46. return
  47. }
  48. const {hostname, pathname, search} = new URL(awakeUrlStr);
  49. let awakeUrlInfo = {
  50. urlStr: awakeUrlStr,
  51. urlHost: hostname,
  52. urlPath: pathname,
  53. urlParams: search && search.slice(1)
  54. }
  55. Log.info('[addon:awaken] awakeUrlInfo:', awakeUrlInfo);
  56. }
  57. }
  58. AwakenAddon.toString = () => '[class AwakenAddon]';
  59. module.exports = AwakenAddon;