fcr-ui-scene 3.1.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/lib/base.d.ts +1 -0
  2. package/lib/common/event-store.d.ts +1 -0
  3. package/lib/electron/app.d.ts +1 -0
  4. package/lib/electron/app.js +140 -0
  5. package/lib/electron/default-options.d.ts +2 -0
  6. package/lib/electron/default-options.js +25 -0
  7. package/lib/electron/env.d.ts +5 -0
  8. package/lib/electron/env.js +13 -0
  9. package/lib/electron/index.d.ts +2 -0
  10. package/lib/electron/index.js +20 -0
  11. package/lib/electron/injections.d.ts +45 -0
  12. package/lib/electron/injections.js +689 -0
  13. package/lib/electron/main.d.ts +2 -0
  14. package/lib/electron/main.js +63 -0
  15. package/lib/electron/plugins/screenshot.d.ts +2 -0
  16. package/lib/electron/plugins/screenshot.js +49 -0
  17. package/lib/electron/preload.js +35 -0
  18. package/lib/electron/tools.d.ts +5 -0
  19. package/lib/electron/tools.js +57 -0
  20. package/lib/electron/window.d.ts +12 -0
  21. package/lib/electron/window.js +112 -0
  22. package/lib/fragments/control-bar/index.js +11 -1
  23. package/lib/fragments/share-screen-selection/selection-store.d.ts +1 -0
  24. package/lib/modules/action-bar/leave/assign-host.d.ts +1 -0
  25. package/lib/modules/action-bar/leave/leave-meeting.d.ts +1 -0
  26. package/lib/modules/action-bar/more/poppover-content.d.ts +1 -0
  27. package/lib/modules/chat/chat-select/index.d.ts +1 -0
  28. package/lib/modules/chat/demo-wrapper.d.ts +1 -0
  29. package/lib/modules/device-pretest/audio-preview/speaker-control.d.ts +1 -0
  30. package/lib/modules/device-pretest/index.d.ts +1 -0
  31. package/lib/modules/device-pretest/settings/video-effect.d.ts +1 -0
  32. package/lib/modules/invite/voip-invite.d.ts +1 -0
  33. package/lib/modules/layout/components/Aside.d.ts +1 -0
  34. package/lib/modules/layout/member-window/index.d.ts +1 -0
  35. package/lib/modules/layout/store.d.ts +1 -0
  36. package/lib/modules/whiteboard/index.d.ts +1 -0
  37. package/lib/plugins/browser-runtime-plugin.js +0 -3
  38. package/lib/runtime.d.ts +86 -0
  39. package/package.json +4 -3
  40. package/installer/icons/favicon.ico +0 -0
  41. package/installer/icons/favicon.png +0 -0
  42. package/installer/mac/entitlements.mac.plist +0 -16
  43. package/lib/common/device-streams-store.d.ts +0 -34
  44. package/lib/common/device-streams-store.js +0 -403
  45. package/lib/fragments/participant/context.d.ts +0 -3
  46. package/lib/fragments/participant/context.js +0 -9
  47. package/lib/fragments/participant/index.css +0 -20
  48. package/lib/fragments/participant/index.d.ts +0 -9
  49. package/lib/fragments/participant/index.js +0 -90
  50. package/lib/fragments/participant/room-control-drop-menu/index.css +0 -19
  51. package/lib/fragments/participant/room-control-drop-menu/index.d.ts +0 -2
  52. package/lib/fragments/participant/room-control-drop-menu/index.js +0 -134
  53. package/lib/fragments/participant/store.d.ts +0 -34
  54. package/lib/fragments/participant/store.js +0 -326
  55. package/lib/fragments/participant/view.d.ts +0 -2
  56. package/lib/fragments/participant/view.js +0 -86
  57. package/lib/fragments/state-bar/index.d.ts +0 -9
  58. package/lib/fragments/state-bar/index.js +0 -68
  59. package/lib/fragments/type.d.ts +0 -2
  60. package/lib/fragments/type.js +0 -6
  61. package/lib/modules/connection-gateway/components/computer/menu.d.ts +0 -0
  62. package/lib/modules/connection-gateway/components/computer/menu.js +0 -1
  63. package/lib/modules/device-settings/audio-settings/audio-settings.d.ts +0 -4
  64. package/lib/modules/device-settings/audio-settings/audio-settings.js +0 -297
  65. package/lib/modules/device-settings/audio-settings/index.css +0 -139
  66. package/lib/modules/device-settings/audio-settings/microphone-detection.d.ts +0 -2
  67. package/lib/modules/device-settings/audio-settings/microphone-detection.js +0 -68
  68. package/lib/modules/device-settings/audio-settings/speaker-detection.d.ts +0 -2
  69. package/lib/modules/device-settings/audio-settings/speaker-detection.js +0 -72
  70. package/lib/modules/device-settings/common/advance-link.d.ts +0 -3
  71. package/lib/modules/device-settings/common/advance-link.js +0 -27
  72. package/lib/modules/device-settings/common/index.css +0 -26
  73. package/lib/modules/device-settings/common/useNamespace.d.ts +0 -15
  74. package/lib/modules/device-settings/common/useNamespace.js +0 -66
  75. package/lib/modules/device-settings/context.d.ts +0 -3
  76. package/lib/modules/device-settings/context.js +0 -9
  77. package/lib/modules/device-settings/dialog-wrapper.d.ts +0 -2
  78. package/lib/modules/device-settings/dialog-wrapper.js +0 -110
  79. package/lib/modules/device-settings/general-settings/general-settings.d.ts +0 -4
  80. package/lib/modules/device-settings/general-settings/general-settings.js +0 -66
  81. package/lib/modules/device-settings/general-settings/index.css +0 -26
  82. package/lib/modules/device-settings/index.css +0 -109
  83. package/lib/modules/device-settings/index.d.ts +0 -21
  84. package/lib/modules/device-settings/index.dev.js +0 -112
  85. package/lib/modules/device-settings/index.js +0 -84
  86. package/lib/modules/device-settings/state/index.css +0 -211
  87. package/lib/modules/device-settings/state/index.d.ts +0 -4
  88. package/lib/modules/device-settings/state/index.js +0 -330
  89. package/lib/modules/device-settings/storage-settings/index.css +0 -91
  90. package/lib/modules/device-settings/storage-settings/storage-settings.d.ts +0 -3
  91. package/lib/modules/device-settings/storage-settings/storage-settings.js +0 -84
  92. package/lib/modules/device-settings/store.d.ts +0 -205
  93. package/lib/modules/device-settings/store.js +0 -1035
  94. package/lib/modules/device-settings/video-settings/camera-select.d.ts +0 -2
  95. package/lib/modules/device-settings/video-settings/camera-select.js +0 -51
  96. package/lib/modules/device-settings/video-settings/index.css +0 -327
  97. package/lib/modules/device-settings/video-settings/local-video-player.d.ts +0 -3
  98. package/lib/modules/device-settings/video-settings/local-video-player.js +0 -37
  99. package/lib/modules/device-settings/video-settings/mirror-toggle.d.ts +0 -2
  100. package/lib/modules/device-settings/video-settings/mirror-toggle.js +0 -62
  101. package/lib/modules/device-settings/video-settings/video-settings-basic.d.ts +0 -9
  102. package/lib/modules/device-settings/video-settings/video-settings-basic.js +0 -177
  103. package/lib/modules/device-settings/video-settings/video-settings.d.ts +0 -6
  104. package/lib/modules/device-settings/video-settings/video-settings.js +0 -185
  105. package/lib/modules/device-settings/view.d.ts +0 -10
  106. package/lib/modules/device-settings/view.js +0 -193
  107. package/lib/modules/layout/components/UserWindow.d.ts +0 -8
  108. package/lib/modules/layout/components/UserWindow.js +0 -513
  109. package/lib/modules/layout/hooks.d.ts +0 -14
  110. package/lib/modules/layout/hooks.js +0 -48
  111. package/lib/modules/share-screen/context.d.ts +0 -3
  112. package/lib/modules/share-screen/context.js +0 -9
  113. package/lib/modules/whiteboard/i18n/config.d.ts +0 -1
  114. package/lib/modules/whiteboard/i18n/config.js +0 -15
  115. package/lib/modules/whiteboard/i18n/en/index.d.ts +0 -32
  116. package/lib/modules/whiteboard/i18n/en/index.js +0 -38
  117. package/lib/modules/whiteboard/i18n/zh/index.d.ts +0 -32
  118. package/lib/modules/whiteboard/i18n/zh/index.js +0 -38
  119. /package/lib/{modules/device-settings/index.dev.d.ts → electron/preload.d.ts} +0 -0
@@ -0,0 +1,689 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.object.define-property.js");
4
+ require("core-js/modules/es.regexp.exec.js");
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.showItemInFolder = exports.setFragmentOptions = exports.setFragmentBaseUrl = exports.setAlwaysOnTop = exports.sendEvent = exports.screen = exports.removeEventListener = exports.releaseSubAllWindowRefs = exports.registerListenerReady = exports.quitApp = exports.openRendererWindow = exports.openLinkInDefaultBrowser = exports.openDirectory = exports.open = exports.launch = exports.getVirtualBgResource = exports.getSystemMemorySize = exports.getSystemCpuInfo = exports.getRendererProcessUsage = exports.getNetworkType = exports.getMediaSourceIdList = exports.getLaunchOptions = exports.getBrowserWindowById = exports.getAssetUrl = exports.fileToBase64 = exports.closeRendererWindow = exports.close = exports.captureScreen = exports.browserWindow = exports.addEventListener = void 0;
10
+ require("core-js/modules/es.error.cause.js");
11
+ require("core-js/modules/es.error.to-string.js");
12
+ require("core-js/modules/es.array.concat.js");
13
+ require("core-js/modules/es.array.filter.js");
14
+ require("core-js/modules/es.array.find.js");
15
+ require("core-js/modules/es.array.for-each.js");
16
+ require("core-js/modules/es.array.includes.js");
17
+ require("core-js/modules/es.array.iterator.js");
18
+ require("core-js/modules/es.array.map.js");
19
+ require("core-js/modules/es.array.push.js");
20
+ require("core-js/modules/es.array.reduce.js");
21
+ require("core-js/modules/es.date.now.js");
22
+ require("core-js/modules/es.date.to-json.js");
23
+ require("core-js/modules/es.json.stringify.js");
24
+ require("core-js/modules/es.object.entries.js");
25
+ require("core-js/modules/es.object.keys.js");
26
+ require("core-js/modules/es.object.to-string.js");
27
+ require("core-js/modules/es.promise.js");
28
+ require("core-js/modules/es.promise.all-settled.js");
29
+ require("core-js/modules/es.promise.finally.js");
30
+ require("core-js/modules/es.string.includes.js");
31
+ require("core-js/modules/es.string.iterator.js");
32
+ require("core-js/modules/es.string.starts-with.js");
33
+ require("core-js/modules/es.string.trim.js");
34
+ require("core-js/modules/web.dom-collections.for-each.js");
35
+ require("core-js/modules/web.dom-collections.iterator.js");
36
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
37
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
38
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
39
+ var _electron = require("electron");
40
+ var _remote = require("@electron/remote");
41
+ var _os = _interopRequireDefault(require("os"));
42
+ var _child_process = require("child_process");
43
+ var _path2 = _interopRequireDefault(require("path"));
44
+ var _fs2 = _interopRequireDefault(require("fs"));
45
+ var _jszip = _interopRequireDefault(require("jszip"));
46
+ // import pidusage from 'pidusage';
47
+ // import { getCpuUsage, getProcessIds } from './tools';
48
+
49
+ var openDirectory = exports.openDirectory = /*#__PURE__*/function () {
50
+ var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
51
+ var _yield$dialog$showOpe, filePaths;
52
+ return _regenerator["default"].wrap(function _callee$(_context) {
53
+ while (1) switch (_context.prev = _context.next) {
54
+ case 0:
55
+ _context.next = 2;
56
+ return _remote.dialog.showOpenDialog((0, _remote.getCurrentWindow)(), {
57
+ properties: ['openDirectory']
58
+ });
59
+ case 2:
60
+ _yield$dialog$showOpe = _context.sent;
61
+ filePaths = _yield$dialog$showOpe.filePaths;
62
+ return _context.abrupt("return", filePaths[0]);
63
+ case 5:
64
+ case "end":
65
+ return _context.stop();
66
+ }
67
+ }, _callee);
68
+ }));
69
+ return function openDirectory() {
70
+ return _ref.apply(this, arguments);
71
+ };
72
+ }();
73
+ var showItemInFolder = exports.showItemInFolder = function showItemInFolder(path) {
74
+ _remote.shell.showItemInFolder(path);
75
+ };
76
+ var sendEvent = exports.sendEvent = function sendEvent(event) {
77
+ _remote.BrowserWindow.getAllWindows().forEach(function (window) {
78
+ var currentWindow = (0, _remote.getCurrentWindow)();
79
+ if (window.id !== currentWindow.id) {
80
+ window.webContents.send('custom-event', event);
81
+ }
82
+ });
83
+ };
84
+ var addEventListener = exports.addEventListener = function addEventListener(listener) {
85
+ _electron.ipcRenderer.addListener('custom-event', listener);
86
+ };
87
+ var removeEventListener = exports.removeEventListener = function removeEventListener(listener) {
88
+ _electron.ipcRenderer.removeListener('custom-event', listener);
89
+ };
90
+ var setFragmentOptions = exports.setFragmentOptions = function setFragmentOptions(entryPath, windowOptions, webPreferences) {
91
+ _electron.ipcRenderer.send('setFragmentOptions', entryPath, windowOptions, webPreferences);
92
+ };
93
+ var getLaunchOptions = exports.getLaunchOptions = /*#__PURE__*/function () {
94
+ var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
95
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
96
+ while (1) switch (_context2.prev = _context2.next) {
97
+ case 0:
98
+ return _context2.abrupt("return", _electron.ipcRenderer.invoke('get-launch-options'));
99
+ case 1:
100
+ case "end":
101
+ return _context2.stop();
102
+ }
103
+ }, _callee2);
104
+ }));
105
+ return function getLaunchOptions() {
106
+ return _ref2.apply(this, arguments);
107
+ };
108
+ }();
109
+ var openLinkInDefaultBrowser = exports.openLinkInDefaultBrowser = function openLinkInDefaultBrowser(url) {
110
+ _remote.shell.openExternal(url);
111
+ };
112
+ var getBrowserWindowById = exports.getBrowserWindowById = function getBrowserWindowById(id) {
113
+ return _remote.BrowserWindow.getAllWindows().find(function (wind) {
114
+ return wind.id === id;
115
+ });
116
+ };
117
+ var browserWindow = exports.browserWindow = (0, _remote.getCurrentWindow)();
118
+ var screen = exports.screen = _remote.screen;
119
+ var open = exports.open = function open(entryPath, dialogId) {
120
+ _electron.ipcRenderer.send('open', entryPath, dialogId);
121
+ };
122
+ var close = exports.close = function close(entryPath, dialogId) {
123
+ _electron.ipcRenderer.send('close', entryPath, dialogId);
124
+ };
125
+ var setFragmentBaseUrl = exports.setFragmentBaseUrl = function setFragmentBaseUrl(isDev, baseUrl) {
126
+ _electron.ipcRenderer.send('setFragmentBaseUrl', isDev, baseUrl);
127
+ };
128
+ var registerListenerReady = exports.registerListenerReady = function registerListenerReady() {
129
+ _electron.ipcRenderer.send('registerListenerReady');
130
+ };
131
+ var captureScreen = exports.captureScreen = function captureScreen(options) {
132
+ _electron.ipcRenderer.send('short-cut-capture', "short-cut-capture-reply-".concat(Date.now()), options);
133
+ };
134
+ var rendererWindows = {};
135
+ var rendererWindowMutationObservers = {};
136
+ var openRendererWindow = exports.openRendererWindow = /*#__PURE__*/function () {
137
+ var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(frameName, renderFn, windowOptions) {
138
+ var rendererWindow, windowConstructorOptionsString, newRendererWindow, windowId, _browserWindow, renderDom, parentWindow, parentHead, parentStyles, parentStyleLinks, stylesLoadedPromises, oldenObserver, observer, parentRoot, parentRootStyles, _windowId, _browserWindow2, _newRendererWindow, _renderDom;
139
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
140
+ while (1) switch (_context3.prev = _context3.next) {
141
+ case 0:
142
+ rendererWindow = rendererWindows[frameName];
143
+ if (rendererWindow) {
144
+ _context3.next = 35;
145
+ break;
146
+ }
147
+ windowConstructorOptionsString = Object.entries(windowOptions).reduce(function (acc, _ref4) {
148
+ var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
149
+ key = _ref5[0],
150
+ value = _ref5[1];
151
+ if (typeof value === 'string') {
152
+ return "".concat(acc, ",").concat(key, "=").concat(value);
153
+ }
154
+ return "".concat(acc, ",").concat(key, "=").concat(JSON.stringify(value));
155
+ }, '');
156
+ newRendererWindow = window.open('', frameName, windowConstructorOptionsString);
157
+ _context3.next = 6;
158
+ return _electron.ipcRenderer.invoke('getBrowserWindowId', frameName);
159
+ case 6:
160
+ windowId = _context3.sent;
161
+ if (windowId) {
162
+ _context3.next = 9;
163
+ break;
164
+ }
165
+ throw new Error('windowId not found');
166
+ case 9:
167
+ _browserWindow = _remote.BrowserWindow.getAllWindows().find(function (win) {
168
+ return win.id === windowId;
169
+ });
170
+ if (!newRendererWindow) {
171
+ _context3.next = 33;
172
+ break;
173
+ }
174
+ newRendererWindow.document.write('<div id="root"></div>');
175
+ renderDom = newRendererWindow.document.getElementById('root');
176
+ if (renderDom) {
177
+ _context3.next = 15;
178
+ break;
179
+ }
180
+ return _context3.abrupt("return");
181
+ case 15:
182
+ // copy styles from parent window
183
+ parentWindow = window;
184
+ parentHead = parentWindow.document.head;
185
+ parentStyles = parentHead.querySelectorAll('style');
186
+ parentStyleLinks = parentHead.querySelectorAll('link[rel="stylesheet"]');
187
+ stylesLoadedPromises = [];
188
+ parentStyles.forEach(function (style) {
189
+ newRendererWindow === null || newRendererWindow === void 0 || newRendererWindow.document.head.appendChild(style.cloneNode(true));
190
+ });
191
+ parentStyleLinks.forEach(function (style) {
192
+ var linkNode = style.cloneNode(true);
193
+ newRendererWindow === null || newRendererWindow === void 0 || newRendererWindow.document.head.appendChild(linkNode);
194
+ stylesLoadedPromises.push(new Promise(function (resolve, reject) {
195
+ linkNode.addEventListener('load', function () {
196
+ return resolve();
197
+ });
198
+ linkNode.addEventListener('error', function () {
199
+ return reject("failed to load style: ".concat(linkNode.href));
200
+ });
201
+ }));
202
+ });
203
+ oldenObserver = rendererWindowMutationObservers[frameName];
204
+ if (oldenObserver) {
205
+ oldenObserver.disconnect();
206
+ }
207
+ observer = new MutationObserver(function (mutations) {
208
+ mutations.forEach(function (mutation) {
209
+ if (mutation.type === 'childList') {
210
+ mutation.addedNodes.forEach(function (node) {
211
+ if (node.nodeType === Node.ELEMENT_NODE && node.tagName === 'STYLE') {
212
+ newRendererWindow === null || newRendererWindow === void 0 || newRendererWindow.document.head.appendChild(node.cloneNode(true));
213
+ }
214
+ });
215
+ }
216
+ });
217
+ });
218
+ observer.observe(document.head, {
219
+ childList: true
220
+ });
221
+ rendererWindowMutationObservers[frameName] = observer;
222
+ // copy css variables from parent window
223
+ parentRoot = parentWindow.document.documentElement;
224
+ parentRootStyles = parentRoot.style.cssText;
225
+ newRendererWindow.document.documentElement.style.cssText = parentRootStyles;
226
+ rendererWindows[frameName] = newRendererWindow;
227
+ newRendererWindow.onclose = function () {
228
+ delete rendererWindows[frameName];
229
+ };
230
+ Promise.allSettled(stylesLoadedPromises)["finally"](function () {
231
+ renderFn(renderDom, _browserWindow);
232
+ });
233
+ case 33:
234
+ _context3.next = 49;
235
+ break;
236
+ case 35:
237
+ _context3.next = 37;
238
+ return _electron.ipcRenderer.invoke('getBrowserWindowId', frameName);
239
+ case 37:
240
+ _windowId = _context3.sent;
241
+ if (_windowId) {
242
+ _context3.next = 40;
243
+ break;
244
+ }
245
+ throw new Error('windowId not found');
246
+ case 40:
247
+ _browserWindow2 = _remote.BrowserWindow.getAllWindows().find(function (win) {
248
+ return win.id === _windowId;
249
+ });
250
+ _newRendererWindow = rendererWindows[frameName];
251
+ _renderDom = _newRendererWindow.document.getElementById('root');
252
+ if (_renderDom) {
253
+ _context3.next = 45;
254
+ break;
255
+ }
256
+ return _context3.abrupt("return");
257
+ case 45:
258
+ renderFn(_renderDom, _browserWindow2);
259
+ _browserWindow2 === null || _browserWindow2 === void 0 || _browserWindow2.show();
260
+ _browserWindow2 === null || _browserWindow2 === void 0 || _browserWindow2.focus();
261
+ _browserWindow2 === null || _browserWindow2 === void 0 || _browserWindow2.moveTop();
262
+ case 49:
263
+ case "end":
264
+ return _context3.stop();
265
+ }
266
+ }, _callee3);
267
+ }));
268
+ return function openRendererWindow(_x, _x2, _x3) {
269
+ return _ref3.apply(this, arguments);
270
+ };
271
+ }();
272
+ var closeRendererWindow = exports.closeRendererWindow = /*#__PURE__*/function () {
273
+ var _ref6 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(frameName) {
274
+ var windowId, _browserWindow3;
275
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
276
+ while (1) switch (_context4.prev = _context4.next) {
277
+ case 0:
278
+ _context4.next = 2;
279
+ return _electron.ipcRenderer.invoke('getBrowserWindowId', frameName);
280
+ case 2:
281
+ windowId = _context4.sent;
282
+ if (windowId) {
283
+ _browserWindow3 = _remote.BrowserWindow.getAllWindows().find(function (win) {
284
+ return win.id === windowId;
285
+ });
286
+ if (_browserWindow3 && !_browserWindow3.isDestroyed()) {
287
+ _browserWindow3.emit('will-close');
288
+ }
289
+ }
290
+ case 4:
291
+ case "end":
292
+ return _context4.stop();
293
+ }
294
+ }, _callee4);
295
+ }));
296
+ return function closeRendererWindow(_x4) {
297
+ return _ref6.apply(this, arguments);
298
+ };
299
+ }();
300
+ var launch = exports.launch = /*#__PURE__*/function () {
301
+ var _ref7 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(options) {
302
+ var res;
303
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
304
+ while (1) switch (_context5.prev = _context5.next) {
305
+ case 0:
306
+ _context5.next = 2;
307
+ return _electron.ipcRenderer.invoke('launch', options);
308
+ case 2:
309
+ res = _context5.sent;
310
+ return _context5.abrupt("return", res);
311
+ case 4:
312
+ case "end":
313
+ return _context5.stop();
314
+ }
315
+ }, _callee5);
316
+ }));
317
+ return function launch(_x5) {
318
+ return _ref7.apply(this, arguments);
319
+ };
320
+ }();
321
+ var setAlwaysOnTop = exports.setAlwaysOnTop = function setAlwaysOnTop() {
322
+ var _app$dock;
323
+ _remote.app.dock && _remote.app.dock.hide();
324
+ var browserWindow = (0, _remote.getCurrentWindow)();
325
+ browserWindow.setVisibleOnAllWorkspaces(true, {
326
+ visibleOnFullScreen: true
327
+ });
328
+ browserWindow.setAlwaysOnTop(true);
329
+ browserWindow.show();
330
+ browserWindow.focus();
331
+ if (!((_app$dock = _remote.app.dock) !== null && _app$dock !== void 0 && _app$dock.isVisible())) {
332
+ _remote.app.dock && _remote.app.dock.show();
333
+ }
334
+ };
335
+ var quitApp = exports.quitApp = function quitApp() {
336
+ _remote.app.quit();
337
+ };
338
+ var getSystemMemorySize = exports.getSystemMemorySize = function getSystemMemorySize() {
339
+ return _os["default"].totalmem();
340
+ };
341
+ var getSystemCpuInfo = exports.getSystemCpuInfo = function getSystemCpuInfo() {
342
+ return _os["default"].cpus();
343
+ };
344
+ var getNetworkType = exports.getNetworkType = function getNetworkType() {
345
+ var resolve = function resolve(res) {};
346
+ var p = new Promise(function (_resolve) {
347
+ resolve = _resolve;
348
+ });
349
+ var platform = _os["default"].platform();
350
+ if (platform === 'darwin') {
351
+ // macos
352
+ (0, _child_process.exec)('networksetup -getairportnetwork en0', function (error, stdout, stderr) {
353
+ if (error || stderr) {
354
+ resolve({
355
+ isWifiConnected: false,
356
+ connection: ''
357
+ });
358
+ return;
359
+ }
360
+ if (stdout.includes('You are not associated with an AirPort network.')) {
361
+ resolve({
362
+ isWifiConnected: false,
363
+ connection: ''
364
+ });
365
+ } else {
366
+ var network = stdout.split(': ')[1].trim();
367
+ resolve({
368
+ isWifiConnected: true,
369
+ connection: network
370
+ });
371
+ }
372
+ });
373
+ } else if (platform === 'win32') {
374
+ // windows
375
+ (0, _child_process.exec)('netsh wlan show interfaces', function (error, stdout, stderr) {
376
+ if (error || stderr) {
377
+ resolve({
378
+ isWifiConnected: false,
379
+ connection: ''
380
+ });
381
+ return;
382
+ }
383
+ var lines = stdout.split('\n');
384
+ lines.forEach(function (line) {
385
+ if (line.includes('State') && line.includes('connected') && line.includes('SSID')) {
386
+ var ssid = line.split(': ')[1].trim();
387
+ resolve({
388
+ isWifiConnected: true,
389
+ connection: ssid
390
+ });
391
+ }
392
+ });
393
+ resolve({
394
+ isWifiConnected: false,
395
+ connection: ''
396
+ });
397
+ });
398
+ } else if (platform === 'linux') {
399
+ // linux
400
+ (0, _child_process.exec)('nmcli -t -f TYPE,STATE,CONNECTION device status', function (error, stdout, stderr) {
401
+ if (error || stderr) {
402
+ resolve({
403
+ isWifiConnected: false,
404
+ connection: ''
405
+ });
406
+ return;
407
+ }
408
+ var devices = stdout.split('\n');
409
+ devices.forEach(function (device) {
410
+ var _device$split = device.split(':'),
411
+ _device$split2 = (0, _slicedToArray2["default"])(_device$split, 3),
412
+ type = _device$split2[0],
413
+ state = _device$split2[1],
414
+ connection = _device$split2[2];
415
+ if (type === 'wifi' && state === 'connected') {
416
+ resolve({
417
+ isWifiConnected: true,
418
+ connection: connection
419
+ });
420
+ }
421
+ });
422
+ resolve({
423
+ isWifiConnected: false,
424
+ connection: ''
425
+ });
426
+ });
427
+ } else {
428
+ resolve({
429
+ isWifiConnected: false,
430
+ connection: ''
431
+ });
432
+ }
433
+ return p;
434
+ };
435
+ var getAssetUrl = exports.getAssetUrl = function getAssetUrl(path) {
436
+ var isDevMode = process.env.DEV === 'true';
437
+ if (isDevMode) {
438
+ return _path2["default"].resolve(process.cwd(), 'public', path);
439
+ }
440
+ return _path2["default"].resolve(_remote.app.getAppPath(), '..', path);
441
+ };
442
+ var getRendererProcessUsage = exports.getRendererProcessUsage = /*#__PURE__*/function () {
443
+ var _ref8 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
444
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
445
+ while (1) switch (_context6.prev = _context6.next) {
446
+ case 0:
447
+ return _context6.abrupt("return", {
448
+ memoryUsage: 0,
449
+ cpuUsage: 0,
450
+ totalMemoryUsage: 0,
451
+ totalCpuUsage: 0
452
+ });
453
+ case 1:
454
+ case "end":
455
+ return _context6.stop();
456
+ }
457
+ }, _callee6);
458
+ }));
459
+ return function getRendererProcessUsage() {
460
+ return _ref8.apply(this, arguments);
461
+ };
462
+ }();
463
+ var userDataPath = _remote.app.getPath('userData');
464
+ var cachePath = _path2["default"].resolve(userDataPath, 'cache');
465
+ var imageExtensions = ['.png', '.jpg'];
466
+ var videoExtensions = ['.mp4'];
467
+ var zipExtensions = ['.zip'];
468
+ var getZipCachePath = function getZipCachePath(type) {
469
+ return _path2["default"].resolve(cachePath, "fcr_scene/virtual_bg_".concat(type, "s"));
470
+ };
471
+ var getResourcePath = function getResourcePath(type, md5Url) {
472
+ return _path2["default"].resolve(userDataPath, "fcr_scene/virtual_bg_".concat(type, "s/").concat(md5Url));
473
+ };
474
+
475
+ // 解压 zip 文件并保存
476
+ var unZipAndSaveFile = /*#__PURE__*/function () {
477
+ var _ref9 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(zipFile, outputPath, type) {
478
+ var zipBuffer, zip, fileNames;
479
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
480
+ while (1) switch (_context8.prev = _context8.next) {
481
+ case 0:
482
+ zipBuffer = _fs2["default"].readFileSync(zipFile);
483
+ _context8.next = 3;
484
+ return _jszip["default"].loadAsync(zipBuffer);
485
+ case 3:
486
+ zip = _context8.sent;
487
+ fileNames = [];
488
+ _context8.next = 7;
489
+ return Promise.all(Object.keys(zip.files).filter(function (filename) {
490
+ // 忽略目录、扩展文件或不需要的文件
491
+ var isDirectory = zip.files[filename].dir;
492
+ var isExtensionFile = filename.includes('__MACOSX') || filename.includes('.DS_Store') || filename.startsWith('.') ||
493
+ // 忽略以.开头的文件(隐藏文件)
494
+ filename.includes('Thumbs.db'); // 忽略 Windows 的缩略图数据库文件
495
+
496
+ var isImageOrVideo = type === 'image' ? imageExtensions.includes(_path2["default"].extname(filename)) : videoExtensions.includes(_path2["default"].extname(filename));
497
+ return !isDirectory && !isExtensionFile && isImageOrVideo;
498
+ }).map( /*#__PURE__*/function () {
499
+ var _ref10 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(filenameTmp) {
500
+ var fileData, realFileName, outputFile;
501
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
502
+ while (1) switch (_context7.prev = _context7.next) {
503
+ case 0:
504
+ _context7.next = 2;
505
+ return zip.files[filenameTmp].async('nodebuffer');
506
+ case 2:
507
+ fileData = _context7.sent;
508
+ realFileName = _path2["default"].basename(filenameTmp);
509
+ outputFile = _path2["default"].resolve(outputPath, realFileName);
510
+ _fs2["default"].mkdirSync(_path2["default"].dirname(outputFile), {
511
+ recursive: true
512
+ });
513
+ _fs2["default"].writeFileSync(outputFile, fileData);
514
+ fileNames.push(outputFile);
515
+ case 8:
516
+ case "end":
517
+ return _context7.stop();
518
+ }
519
+ }, _callee7);
520
+ }));
521
+ return function (_x9) {
522
+ return _ref10.apply(this, arguments);
523
+ };
524
+ }()));
525
+ case 7:
526
+ // 删除 zip 文件
527
+ _fs2["default"].unlinkSync(zipFile);
528
+ return _context8.abrupt("return", fileNames);
529
+ case 9:
530
+ case "end":
531
+ return _context8.stop();
532
+ }
533
+ }, _callee8);
534
+ }));
535
+ return function unZipAndSaveFile(_x6, _x7, _x8) {
536
+ return _ref9.apply(this, arguments);
537
+ };
538
+ }();
539
+
540
+ // 检查指定路径下是否有指定的文件
541
+ function getSpecificFiles(directory, extensions, fileName) {
542
+ // 检查目录是否存在
543
+ if (!_fs2["default"].existsSync(directory)) {
544
+ // 如果目录不存在,则创建目录
545
+ _fs2["default"].mkdirSync(directory, {
546
+ recursive: true
547
+ });
548
+ return [];
549
+ }
550
+ try {
551
+ var files = _fs2["default"].readdirSync(directory);
552
+
553
+ // 筛选出符合扩展名的文件
554
+ var filteredFiles = files.filter(function (file) {
555
+ var ext = _path2["default"].extname(file).toLowerCase();
556
+ return extensions.includes(ext);
557
+ });
558
+
559
+ // 如果传入了文件名,则只返回符合条件的文件
560
+ if (fileName) {
561
+ filteredFiles = filteredFiles.filter(function (file) {
562
+ return file === fileName;
563
+ });
564
+ }
565
+
566
+ // 符合条件的文件
567
+ return filteredFiles.length > 0 ? filteredFiles.map(function (file) {
568
+ return _path2["default"].resolve(directory, file);
569
+ }) : [];
570
+ } catch (err) {
571
+ console.error("Error reading directory: ".concat(err === null || err === void 0 ? void 0 : err.message));
572
+ return [];
573
+ }
574
+ }
575
+ function downloadFile(_x10, _x11) {
576
+ return _downloadFile.apply(this, arguments);
577
+ } // 获取资源
578
+ function _downloadFile() {
579
+ _downloadFile = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10(url, destination) {
580
+ return _regenerator["default"].wrap(function _callee10$(_context10) {
581
+ while (1) switch (_context10.prev = _context10.next) {
582
+ case 0:
583
+ return _context10.abrupt("return", new Promise(function (resolve, reject) {
584
+ var request = _remote.net.request(url);
585
+ request.on('response', function (response) {
586
+ var fileStream = _fs2["default"].createWriteStream(destination);
587
+ fileStream.on('finish', function () {
588
+ resolve();
589
+ });
590
+ response.on('data', function (chunk) {
591
+ fileStream.write(chunk);
592
+ });
593
+ response.on('end', function () {
594
+ fileStream.end();
595
+ });
596
+ response.on('error', function (err) {
597
+ reject(new Error("Download failed: ".concat(err.message)));
598
+ });
599
+ });
600
+ request.on('error', function (err) {
601
+ reject(new Error("Request failed: ".concat(err.message)));
602
+ });
603
+ request.end();
604
+ }));
605
+ case 1:
606
+ case "end":
607
+ return _context10.stop();
608
+ }
609
+ }, _callee10);
610
+ }));
611
+ return _downloadFile.apply(this, arguments);
612
+ }
613
+ var getVirtualBgResource = exports.getVirtualBgResource = /*#__PURE__*/function () {
614
+ var _ref11 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(url, md5Url, type) {
615
+ var resourcePath, extensions, cachedFiles, zipFileName, zipCacheDir, zipFiles, tempZipPath, zipPath;
616
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
617
+ while (1) switch (_context9.prev = _context9.next) {
618
+ case 0:
619
+ resourcePath = getResourcePath(type, md5Url);
620
+ extensions = type === 'image' ? imageExtensions : videoExtensions; // 已有背景文件,直接使用
621
+ cachedFiles = getSpecificFiles(resourcePath, extensions);
622
+ if (!(cachedFiles.length > 0)) {
623
+ _context9.next = 5;
624
+ break;
625
+ }
626
+ return _context9.abrupt("return", cachedFiles);
627
+ case 5:
628
+ // 已有 zip
629
+ zipFileName = "".concat(md5Url, ".zip");
630
+ zipCacheDir = getZipCachePath(type);
631
+ zipFiles = getSpecificFiles(zipCacheDir, zipExtensions, zipFileName); // 没有 zip,需要下载
632
+ if (!(zipFiles.length <= 0)) {
633
+ _context9.next = 15;
634
+ break;
635
+ }
636
+ tempZipPath = _path2["default"].resolve("".concat(zipCacheDir, "/").concat(md5Url, ".temp"));
637
+ zipPath = _path2["default"].resolve("".concat(zipCacheDir, "/").concat(zipFileName));
638
+ _context9.next = 13;
639
+ return downloadFile(url, tempZipPath);
640
+ case 13:
641
+ // temp 文件重命名为 zip
642
+ _fs2["default"].renameSync(tempZipPath, zipPath);
643
+ zipFiles = getSpecificFiles(zipCacheDir, zipExtensions, zipFileName);
644
+ case 15:
645
+ if (!(!zipFiles || zipFiles.length <= 0)) {
646
+ _context9.next = 17;
647
+ break;
648
+ }
649
+ return _context9.abrupt("return", []);
650
+ case 17:
651
+ _context9.next = 19;
652
+ return unZipAndSaveFile(zipFiles[0], resourcePath, type);
653
+ case 19:
654
+ return _context9.abrupt("return", _context9.sent);
655
+ case 20:
656
+ case "end":
657
+ return _context9.stop();
658
+ }
659
+ }, _callee9);
660
+ }));
661
+ return function getVirtualBgResource(_x12, _x13, _x14) {
662
+ return _ref11.apply(this, arguments);
663
+ };
664
+ }();
665
+
666
+ // UI 层拿到 file path 需要转为 base64
667
+ var fileToBase64 = exports.fileToBase64 = function fileToBase64(file, type) {
668
+ var data = _fs2["default"].readFileSync(file, {
669
+ encoding: 'base64'
670
+ });
671
+ if (type === 'video') {
672
+ return "data:video/mp4;base64,".concat(data);
673
+ } else {
674
+ return "data:image/jpeg;base64,".concat(data);
675
+ }
676
+ };
677
+ var releaseSubAllWindowRefs = exports.releaseSubAllWindowRefs = function releaseSubAllWindowRefs() {
678
+ _electron.ipcRenderer.send('closeAllSubWindows');
679
+ rendererWindows = {};
680
+ rendererWindowMutationObservers = {};
681
+ };
682
+ var getMediaSourceIdList = exports.getMediaSourceIdList = function getMediaSourceIdList() {
683
+ return _remote.BrowserWindow.getAllWindows().map(function (window) {
684
+ return {
685
+ title: window.title,
686
+ mediaSourceId: window.getMediaSourceId()
687
+ };
688
+ });
689
+ };
@@ -0,0 +1,2 @@
1
+ import { BrowserWindow } from 'electron';
2
+ export declare const hookWindow: (mainWindow: BrowserWindow) => void;