fcr-ui-scene 3.7.8-rc.1 → 3.7.8-rc.2

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 (32) hide show
  1. package/lib/creator/index.js +13 -19
  2. package/lib/electron/bootstrap-sdk.js +19 -2
  3. package/lib/electron/sdk-helper.js +6 -2
  4. package/lib/electron/until.js +3 -0
  5. package/lib/index.js +8 -1
  6. package/lib/modules/components/leave-meeting/store.base.d.ts +1 -0
  7. package/lib/modules/components/leave-meeting/store.base.js +46 -5
  8. package/lib/modules/dialog/dialogs/confirm-leave-meeting/index.d.ts +1 -0
  9. package/lib/modules/dialog/dialogs/confirm-leave-meeting/index.js +2 -1
  10. package/lib/modules/dialog/dialogs/share-screen-selection/index.js +0 -12
  11. package/lib/modules/share-screen/store.base.js +0 -2
  12. package/lib/modules/share-screen/store.electron.js +54 -31
  13. package/lib/modules/video-window/popover-watcher.js +4 -1
  14. package/lib/modules/video-window/store.js +7 -1
  15. package/lib/modules/video-window/view.js +14 -4
  16. package/lib/providers/screen-share/strategy/browser.js +1 -1
  17. package/lib/providers/window/main-window.js +0 -3
  18. package/lib/providers/window/renderer-window.d.ts +3 -0
  19. package/lib/providers/window/renderer-window.js +47 -4
  20. package/lib/providers/window/type.d.ts +1 -0
  21. package/lib/scenes/main-scene.d.ts +1 -0
  22. package/lib/scenes/main-scene.js +32 -1
  23. package/lib/utilities/logger.js +1 -1
  24. package/package.json +5 -5
  25. package/public/index.html +2 -149
  26. package/public/meeting-manager.js +391 -0
  27. package/installer/icons/favicon.ico +0 -0
  28. package/installer/icons/favicon.png +0 -0
  29. package/installer/icons/icon.png +0 -0
  30. package/installer/mac/entitlements.mac.plist +0 -20
  31. package/lib/modules/control-bar/reactor.d.ts +0 -2
  32. package/lib/modules/control-bar/reactor.js +0 -8
@@ -183,17 +183,6 @@ var FcrUISceneCreator = exports.FcrUISceneCreator = /*#__PURE__*/function () {
183
183
  type: _type.FcrUIGlobalNodeEventType.LAUNCH_SUCCESS,
184
184
  data: args
185
185
  });
186
-
187
- // if (isElectron()) {
188
- // const windowProvider = this._objectManager.getObject<FcrUIWindowProvider>(
189
- // FcrUIObjectKeys.P_WINDOW_PROVIDER,
190
- // );
191
-
192
- // const mainWindow = windowProvider.getCurrentWindow();
193
-
194
- // focusWindow(mainWindow);
195
- // }
196
-
197
186
  onSuccess.apply(void 0, args);
198
187
  },
199
188
  onLaunchFailure: function onLaunchFailure() {
@@ -325,12 +314,14 @@ var FcrUISceneCreator = exports.FcrUISceneCreator = /*#__PURE__*/function () {
325
314
  key: "release",
326
315
  value: function release() {
327
316
  this._precheckState();
317
+ if (this._scene) {
318
+ this.logger.info('exit existing scene before releasing creator');
319
+ this._scene.exit();
320
+ }
328
321
  this._globalNode.unmount();
329
322
  this._globalNode.nodeWillInactive();
330
323
  this._providerInitializer.onCreatorRelease();
331
- // Release core engine last
332
324
  this._released = true;
333
- this._resetScene();
334
325
  }
335
326
  }, {
336
327
  key: "_setMeetingState",
@@ -348,13 +339,16 @@ var FcrUISceneCreator = exports.FcrUISceneCreator = /*#__PURE__*/function () {
348
339
  }, {
349
340
  key: "_resetScene",
350
341
  value: function _resetScene() {
351
- if (this._sceneObserver) {
352
- var _this$_scene;
353
- (_this$_scene = this._scene) === null || _this$_scene === void 0 || _this$_scene.removeObserver(this._sceneObserver);
354
- this._sceneObserver = null;
342
+ var scene = this._scene;
343
+ var sceneObserver = this._sceneObserver;
344
+ if (scene) {
345
+ if (sceneObserver) {
346
+ scene.removeObserver(sceneObserver);
347
+ this._sceneObserver = null;
348
+ }
349
+ this._setMeetingState(_renderer.MeetingState.NOT_IN_MEETING);
350
+ this._scene = null;
355
351
  }
356
- this._setMeetingState(_renderer.MeetingState.NOT_IN_MEETING);
357
- this._scene = null;
358
352
  }
359
353
  }, {
360
354
  key: "_precheckState",
@@ -53,6 +53,7 @@ var mainWindow;
53
53
  var mainWindowReady = false;
54
54
  var userMinimize = false;
55
55
  var mainWindowDisplayState = _struct.DisplayState.HIDE;
56
+ var lastInitParams = '';
56
57
  (0, _main.initialize)();
57
58
  var port = (_process$argv$find = process.argv.find(function (arg) {
58
59
  return arg.startsWith('--port=');
@@ -101,7 +102,10 @@ ipcClient.addObserver({
101
102
  _eventManager.eventManager.startMeetingProcess(roomId);
102
103
  (0, _logger.getLogger)().info("CPP EVENT: LaunchMeeting: ".concat(JSON.stringify(message.data), ", has mainWindow ").concat(!!mainWindow, ", state changed to ").concat(_struct.FcrUISceneLaunchState[_eventManager.eventManager.launchState]));
103
104
  if (mainWindow) {
104
- mainWindow.webContents.send(_type.IPCMessageCMD.LaunchMeeting, message.data);
105
+ mainWindow.webContents.send(_type.IPCMessageCMD.LaunchMeeting, {
106
+ data: message.data,
107
+ lastInitParams: lastInitParams
108
+ });
105
109
  mainWindow.show();
106
110
  mainWindow.focus();
107
111
  mainWindow.moveTop();
@@ -122,7 +126,8 @@ ipcClient.addObserver({
122
126
  }
123
127
  break;
124
128
  case _type.IPCMessageCMD.InitCreator:
125
- (0, _logger.getLogger)().info("InitCreator: ".concat(JSON.stringify(message.data)));
129
+ (0, _logger.getLogger)().info("InitCreator, current message data: ".concat(JSON.stringify(message.data)));
130
+ lastInitParams = JSON.stringify(message.data);
126
131
 
127
132
  // 检查调用顺序:如果是 init -> launch 但 launch 在 PROCESSING 阶段,需要报错
128
133
  if (_eventManager.eventManager.launchState === _struct.FcrUISceneLaunchState.PROCESSING) {
@@ -142,7 +147,10 @@ ipcClient.addObserver({
142
147
  (0, _logger.getLogger)().error("InitCreator: ".concat(e));
143
148
  }
144
149
  if (mainWindow) {
150
+ (0, _logger.getLogger)().info("InitCreator: send InitCreator message to mainWindow");
145
151
  mainWindow.webContents.send(_type.IPCMessageCMD.InitCreator, message.data);
152
+ } else {
153
+ (0, _logger.getLogger)().error("InitCreator: mainWindow is not ready");
146
154
  }
147
155
  break;
148
156
  case _type.IPCMessageCMD.OpenSetting:
@@ -323,6 +331,15 @@ _electron.app.addListener('ready', function () {
323
331
  if (_eventManager.eventManager.launchState !== _struct.FcrUISceneLaunchState.PROCESSING) {
324
332
  return;
325
333
  }
334
+ try {
335
+ // 再会议启动过程中,窗口被其他窗口遮挡也会触发hide事件,实际窗口在后面运行,所以需要判断窗口是否可见
336
+ if (mainWindow.isVisible()) {
337
+ (0, _logger.getLogger)().info('windows_release main window hidden, but window is visible, ignore this event');
338
+ return;
339
+ }
340
+ } catch (error) {
341
+ (0, _logger.getLogger)().error("windows_release main window hide, get main window visible error");
342
+ }
326
343
  ipcClient.sendMessage({
327
344
  // TODO
328
345
  // cmd: IPCMessageCMD.ExitUiSceneFromMainProcess,
@@ -201,7 +201,8 @@ _renderer.ipcRenderer.on(_type.IPCMessageCMD.SetParameters, function (_event, va
201
201
  _renderer.ipcRenderer.on(_type.IPCMessageCMD.LaunchMeeting, function (_event, value) {
202
202
  console.log('LaunchMeeting in sdk-helper', value);
203
203
  if (cppSdkHelper.onLaunchMeeting) {
204
- var data = value;
204
+ var data = value.data,
205
+ lastInitParams = value.lastInitParams;
205
206
  try {
206
207
  if (typeof value == 'string') {
207
208
  data = JSON.parse(value);
@@ -209,7 +210,10 @@ _renderer.ipcRenderer.on(_type.IPCMessageCMD.LaunchMeeting, function (_event, va
209
210
  } catch (e) {
210
211
  console.error("windows_release Failed to parse launch options:, ".concat(JSON.stringify(e), ", typeof value: ").concat((0, _typeof2["default"])(value), ", value: ").concat(value));
211
212
  }
212
- cppSdkHelper.onLaunchMeeting(data);
213
+ cppSdkHelper.onLaunchMeeting({
214
+ data: data,
215
+ lastInitParams: lastInitParams
216
+ });
213
217
  }
214
218
  });
215
219
  _renderer.ipcRenderer.on(_type.IPCMessageCMD.RenewUserToken, function (_event, value) {
@@ -54,7 +54,10 @@ var DetailErrorCode = /*#__PURE__*/function (DetailErrorCode) {
54
54
  var generaErrorCode = exports.generaErrorCode = function generaErrorCode(serviceCode, uiSceneCode, detailCode) {
55
55
  return serviceCode * 1000000 + uiSceneCode * 1000 + detailCode;
56
56
  };
57
+
58
+ // 800010082
57
59
  var windowHideErrorCode = exports.windowHideErrorCode = generaErrorCode(ServiceErrorCode.FcrUIScene, UISceneErrorCode.Creator, DetailErrorCode.mainWindowHidden);
60
+ // // 800010083
58
61
  var closeWindowBeforeLaunchSuccessErrorCode = exports.closeWindowBeforeLaunchSuccessErrorCode = generaErrorCode(ServiceErrorCode.FcrUIScene, UISceneErrorCode.Creator, DetailErrorCode.closeWindowBeforeLaunchSuccess);
59
62
  var meetingLaunchProcessingErrorCode = exports.meetingLaunchProcessingErrorCode = generaErrorCode(ServiceErrorCode.FcrUIScene, UISceneErrorCode.Creator, DetailErrorCode.meetingLaunchProcessing);
60
63
 
package/lib/index.js CHANGED
@@ -47,10 +47,17 @@ require("./plugins/electron-rtc-plugin");
47
47
  require("./plugins/multi-lang-plugin");
48
48
  require("./plugins/rtm-plugin");
49
49
  require("./plugins/web-rtc-plugin");
50
+ var _logger = require("./utilities/logger");
51
+ var _imports = require("fcr-core/lib/imports");
50
52
  // import { configure } from 'mobx';
51
53
 
52
54
  // configure({
53
55
  // enforceActions: 'always',
54
56
  // });
55
57
 
56
- _dayjs["default"].extend(_duration["default"]);
58
+ _dayjs["default"].extend(_duration["default"]);
59
+ // @ts-ignore
60
+ window.__AgoraLogger = (0, _logger.getLogger)();
61
+
62
+ // @ts-ignore
63
+ window.__AgoraMutex = new _imports.Mutex();
@@ -32,5 +32,6 @@ export declare abstract class LeaveMeetingStoreBase {
32
32
  setKeepConnect(value: boolean): void;
33
33
  end(): Promise<void>;
34
34
  release(): void;
35
+ private _checkIfQuitFullScreen;
35
36
  }
36
37
  export declare const LeaveMeetingStoreContext: import("react").Context<LeaveMeetingStoreBase>;
@@ -59,6 +59,7 @@ var _react = require("react");
59
59
  var _constant = require("../../../utilities/constant");
60
60
  var _objectManager = require("../../../object-manager");
61
61
  var _env = require("agora-foundation/lib/utilities/env");
62
+ var _imports = require("fcr-core/lib/imports");
62
63
  var _LeaveMeetingStoreBase;
63
64
  var _initProto, _init_keepConnect, _init_canAssign, _init_loading, _showEndConfirmDialogDecs, _assignHostDecs, _setIsSelfEndMeetingDecs, _leaveDecs, _keepPhoneAudioConnectionDecs, _setCanAssignDecs, _setKeepConnectDecs, _endDecs, _ref;
64
65
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
@@ -163,19 +164,22 @@ var LeaveMeetingStoreBase = exports.LeaveMeetingStoreBase = /*#__PURE__*/functio
163
164
  return _regenerator["default"].wrap(function (_context) {
164
165
  while (1) switch (_context.prev = _context.next) {
165
166
  case 0:
167
+ _context.next = 1;
168
+ return this._checkIfQuitFullScreen();
169
+ case 1:
166
170
  this.loading = true;
167
171
  _t = this.keepConnect && this.isPstnUser;
168
172
  if (!_t) {
169
- _context.next = 1;
173
+ _context.next = 2;
170
174
  break;
171
175
  }
172
- _context.next = 1;
176
+ _context.next = 2;
173
177
  return this.keepPhoneAudioConnection();
174
- case 1:
178
+ case 2:
175
179
  this.loading = false;
176
180
  this._roomProvider.exitRoom();
177
181
  this.resetPreventClose();
178
- case 2:
182
+ case 3:
179
183
  case "end":
180
184
  return _context.stop();
181
185
  }
@@ -237,10 +241,13 @@ var LeaveMeetingStoreBase = exports.LeaveMeetingStoreBase = /*#__PURE__*/functio
237
241
  return _regenerator["default"].wrap(function (_context3) {
238
242
  while (1) switch (_context3.prev = _context3.next) {
239
243
  case 0:
244
+ _context3.next = 1;
245
+ return this._checkIfQuitFullScreen();
246
+ case 1:
240
247
  this._roomControl.close();
241
248
  this._roomProvider.exitRoom();
242
249
  this.resetPreventClose();
243
- case 1:
250
+ case 2:
244
251
  case "end":
245
252
  return _context3.stop();
246
253
  }
@@ -254,6 +261,40 @@ var LeaveMeetingStoreBase = exports.LeaveMeetingStoreBase = /*#__PURE__*/functio
254
261
  }, {
255
262
  key: "release",
256
263
  value: function release() {}
264
+ }, {
265
+ key: "_checkIfQuitFullScreen",
266
+ value: function () {
267
+ var _checkIfQuitFullScreen2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
268
+ var windowProvider, mainWindow;
269
+ return _regenerator["default"].wrap(function (_context4) {
270
+ while (1) switch (_context4.prev = _context4.next) {
271
+ case 0:
272
+ if (!(0, _env.isElectron)()) {
273
+ _context4.next = 1;
274
+ break;
275
+ }
276
+ windowProvider = this._objectManager.getObject(_objectManager.FcrUIObjectKeys.P_WINDOW_PROVIDER);
277
+ mainWindow = windowProvider.getCurrentWindow();
278
+ if (!mainWindow.isFullScreen()) {
279
+ _context4.next = 1;
280
+ break;
281
+ }
282
+ mainWindow.setFullScreen(false);
283
+
284
+ // 需要等待窗口退出全屏完成
285
+ _context4.next = 1;
286
+ return (0, _imports.sleep)(500);
287
+ case 1:
288
+ case "end":
289
+ return _context4.stop();
290
+ }
291
+ }, _callee4, this);
292
+ }));
293
+ function _checkIfQuitFullScreen() {
294
+ return _checkIfQuitFullScreen2.apply(this, arguments);
295
+ }
296
+ return _checkIfQuitFullScreen;
297
+ }()
257
298
  }]);
258
299
  }();
259
300
  _LeaveMeetingStoreBase = LeaveMeetingStoreBase;
@@ -14,5 +14,6 @@ export declare const windowConfig: {
14
14
  resizable: false;
15
15
  width: number;
16
16
  height: number;
17
+ alwaysOnTop: true;
17
18
  };
18
19
  export {};
@@ -40,5 +40,6 @@ var windowConfig = exports.windowConfig = {
40
40
  },
41
41
  resizable: false,
42
42
  width: 255,
43
- height: 158
43
+ height: 158,
44
+ alwaysOnTop: true
44
45
  };
@@ -15,18 +15,6 @@ var ShareScreenSelectionDialog = exports.ShareScreenSelectionDialog = /*#__PURE_
15
15
  children = _ref.children;
16
16
  var transI18n = (0, _i18n.useI18n)();
17
17
  var title = transI18n('fmt_screenshare_controlbar_security_list_participant_screenshare');
18
-
19
- // const body = (
20
- // <DialogContainer
21
- // dialogId={dialogId}
22
- // dialogKey={dialogKey}
23
- // title={title}
24
- // width={790}
25
- // height={550}>
26
- // {children}
27
- // </DialogContainer>
28
- // );
29
-
30
18
  var body = children;
31
19
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_normalWindow.NormalWindow, {
32
20
  title: title,
@@ -73,7 +73,6 @@ var _type = require("./type");
73
73
  var _type2 = require("fcr-core/lib/type");
74
74
  var _i18n = require("agora-ui-foundation/lib/i18n");
75
75
  var _struct = require("../../providers/screen-share/struct");
76
- var _constant = require("../../utilities/constant");
77
76
  var _type3 = require("agora-ui-foundation/lib/components/icon/type");
78
77
  var _ShareScreenStoreBase;
79
78
  var _initProto, _init_isSharing, _init_displayList, _init_applicationList, _init_selectedShareItem, _init_isWhiteboardSelected, _init_isSharingWithAudio, _init_isSharingInSmoothMode, _loadSelectionListDecs, _setSelectedItemDecs, _ref;
@@ -379,7 +378,6 @@ var ShareScreenStoreBase = exports["default"] = /*#__PURE__*/function () {
379
378
  captureType: captureType
380
379
  });
381
380
  case 6:
382
- this.dialogProvider.closeDialog(_constant.FcrUIDialogKey.SHARE_SCREEN_SELECTION);
383
381
  _context2.next = 8;
384
382
  break;
385
383
  case 7:
@@ -43,8 +43,6 @@ Object.defineProperty(exports, "__esModule", {
43
43
  });
44
44
  exports["default"] = void 0;
45
45
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
46
- require("core-js/modules/es.date.to-json.js");
47
- require("core-js/modules/es.json.stringify.js");
48
46
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
49
47
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
50
48
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
@@ -66,6 +64,7 @@ var _mobx = require("mobx");
66
64
  var _parameters = require("../../utilities/parameters");
67
65
  var _type3 = require("fcr-core/lib/type");
68
66
  var _levelConfig = require("../dialog/level-config");
67
+ var _imports = require("fcr-core/lib/imports");
69
68
  var _ElectronShareScreenStore;
70
69
  var _initProto, _handleSelectionOpenDecs, _setShareWithAudioStateDecs, _setShareInSmoothModeDecs, _ref;
71
70
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
@@ -191,28 +190,52 @@ var ElectronShareScreenStore = exports["default"] = /*#__PURE__*/function (_Shar
191
190
  }
192
191
  }, {
193
192
  key: "_showControlBar",
194
- value: function _showControlBar() {
195
- this._isSharing = true;
196
- this._dialogProvider.closeDialog(_constant.FcrUIDialogKey.SHARE_SCREEN_SELECTION);
197
- var videoWindow = this._windowProvider.getWindowById(_constant.FcrUIDialogKey.VIDEO_WINDOW);
198
- try {
199
- if (!videoWindow.isVisible()) {
200
- videoWindow.show();
201
- }
202
- } catch (e) {
203
- this.logger.warn('share_screen _showControlBar error', JSON.stringify(e));
204
- }
205
- videoWindow.setAlwaysOnTop(true, 'screen-saver', _levelConfig.WindowRelativeLevel.VIDEO_WINDOW_LEVEL);
206
- var isMultiDisplayActive = this._multiDisplayProvider.isActive;
207
- this._ensureWindowsAreOpenAndPositioned(true, isMultiDisplayActive);
208
- if (isMultiDisplayActive) {
209
- this._multiDisplayProvider.moveMainWindowToIndexLeastDisplay();
210
- } else {
211
- var mainWindow = this._windowProvider.getCurrentWindow();
212
- mainWindow.setFullScreen(false);
213
- mainWindow.hide();
193
+ value: function () {
194
+ var _showControlBar2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
195
+ var isMultiDisplayActive, mainWindow, videoWindow;
196
+ return _regenerator["default"].wrap(function (_context) {
197
+ while (1) switch (_context.prev = _context.next) {
198
+ case 0:
199
+ this._isSharing = true;
200
+ this._dialogProvider.closeDialog(_constant.FcrUIDialogKey.SHARE_SCREEN_SELECTION);
201
+ isMultiDisplayActive = this._multiDisplayProvider.isActive;
202
+ mainWindow = this._windowProvider.getCurrentWindow();
203
+ if (isMultiDisplayActive) {
204
+ _context.next = 1;
205
+ break;
206
+ }
207
+ if (!mainWindow.isFullScreen()) {
208
+ _context.next = 1;
209
+ break;
210
+ }
211
+ mainWindow.setFullScreen(false);
212
+
213
+ // 需要等待窗口退出全屏完成
214
+ _context.next = 1;
215
+ return (0, _imports.sleep)(1000);
216
+ case 1:
217
+ videoWindow = this._windowProvider.getWindowById(_constant.FcrUIDialogKey.VIDEO_WINDOW);
218
+ if (!videoWindow.isVisible()) {
219
+ videoWindow.show();
220
+ }
221
+ videoWindow.setAlwaysOnTop(true, 'screen-saver', _levelConfig.WindowRelativeLevel.VIDEO_WINDOW_LEVEL);
222
+ this._ensureWindowsAreOpenAndPositioned(true, isMultiDisplayActive);
223
+ if (isMultiDisplayActive) {
224
+ this._multiDisplayProvider.moveMainWindowToIndexLeastDisplay();
225
+ } else {
226
+ mainWindow.hide();
227
+ }
228
+ case 2:
229
+ case "end":
230
+ return _context.stop();
231
+ }
232
+ }, _callee, this);
233
+ }));
234
+ function _showControlBar() {
235
+ return _showControlBar2.apply(this, arguments);
214
236
  }
215
- }
237
+ return _showControlBar;
238
+ }()
216
239
  }, {
217
240
  key: "_hideControlBar",
218
241
  value: function _hideControlBar() {
@@ -235,20 +258,20 @@ var ElectronShareScreenStore = exports["default"] = /*#__PURE__*/function (_Shar
235
258
  }, {
236
259
  key: "_checkAutoStartScreenSharing",
237
260
  value: function () {
238
- var _checkAutoStartScreenSharing2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
261
+ var _checkAutoStartScreenSharing2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
239
262
  var needStartShare, displayList, _displayList$, bounds, id;
240
- return _regenerator["default"].wrap(function (_context) {
241
- while (1) switch (_context.prev = _context.next) {
263
+ return _regenerator["default"].wrap(function (_context2) {
264
+ while (1) switch (_context2.prev = _context2.next) {
242
265
  case 0:
243
266
  needStartShare = (0, _parameters.getStartScreenSharing)(this._sharedConfigDataSource.creatorConfig.parameters);
244
267
  if (!needStartShare) {
245
- _context.next = 2;
268
+ _context2.next = 2;
246
269
  break;
247
270
  }
248
- _context.next = 1;
271
+ _context2.next = 1;
249
272
  return this.screenShareProvider.getDisplayList();
250
273
  case 1:
251
- displayList = _context.sent;
274
+ displayList = _context2.sent;
252
275
  if (displayList.length === 0) {
253
276
  this.logger.error('cannot start auto screen sharing, no display found');
254
277
  } else {
@@ -261,9 +284,9 @@ var ElectronShareScreenStore = exports["default"] = /*#__PURE__*/function (_Shar
261
284
  }
262
285
  case 2:
263
286
  case "end":
264
- return _context.stop();
287
+ return _context2.stop();
265
288
  }
266
- }, _callee, this);
289
+ }, _callee2, this);
267
290
  }));
268
291
  function _checkAutoStartScreenSharing() {
269
292
  return _checkAutoStartScreenSharing2.apply(this, arguments);
@@ -33,7 +33,10 @@ function usePopoverWatcher(_ref) {
33
33
  mutationsList.forEach(function (mutation) {
34
34
  if (mutation.type === 'childList') {
35
35
  mutation.removedNodes.forEach(function (node) {
36
- if (node.nodeType === Node.ELEMENT_NODE && node.classList.contains(popoverClassName)) {
36
+ var hasPopoverNode = function hasPopoverNode(node) {
37
+ return node.classList.contains(popoverClassName) || node.querySelector(".".concat(popoverClassName));
38
+ };
39
+ if (isPopoverOpened && node.nodeType === Node.ELEMENT_NODE && hasPopoverNode(node)) {
37
40
  isPopoverOpened = false;
38
41
  resetVideoWindowSize();
39
42
  }
@@ -496,7 +496,13 @@ var VideoWindowStore = exports["default"] = /*#__PURE__*/function () {
496
496
  width: _type.DefaultVideoWindowWidth,
497
497
  height: _type.DefaultVideoWindowSmallTypeHeight
498
498
  };
499
- _this4.setVideoWindowPreviewType(_type.FcrVideoWindowPreviewType.SMALL);
499
+
500
+ // 如果是小窗模式, 则重置为 dialog 为小窗尺寸, 否则切换为小窗模式, reaction 里会更新 dialog 尺寸
501
+ if (_this4.videoWindowPreviewType === _type.FcrVideoWindowPreviewType.SMALL) {
502
+ _this4._setVideoWindowDialogSize(_type.DefaultVideoWindowWidth, _type.DefaultVideoWindowSmallTypeHeight);
503
+ } else {
504
+ _this4.setVideoWindowPreviewType(_type.FcrVideoWindowPreviewType.SMALL);
505
+ }
500
506
  });
501
507
  }
502
508
  }]);
@@ -61,14 +61,24 @@ var View = exports.View = (0, _mobxReact.observer)(function () {
61
61
  }, [isHover]);
62
62
  (0, _react.useEffect)(function () {
63
63
  if (divRef.current === null) return;
64
+
65
+ // 刚打开 dialog 时, divRef.current 还在主窗口的 document 中, 需要等到下一次渲染才会被移动到 dialog 的 document 中
66
+ if (divRef.current.ownerDocument === document) return;
64
67
  var ownerDocument = divRef.current.ownerDocument;
65
68
  var defaultView = ownerDocument.defaultView;
66
69
  var body = ownerDocument.body;
67
70
  var onResize = function onResize() {
68
- handleVideowWindowResize({
69
- width: body.offsetWidth,
70
- height: body.offsetHeight
71
- });
71
+ if (defaultView) {
72
+ handleVideowWindowResize({
73
+ width: defaultView.innerWidth,
74
+ height: defaultView.innerHeight
75
+ });
76
+ } else {
77
+ handleVideowWindowResize({
78
+ width: body.clientWidth,
79
+ height: body.clientHeight
80
+ });
81
+ }
72
82
  };
73
83
  if (defaultView) {
74
84
  defaultView.addEventListener('resize', onResize);
@@ -249,7 +249,7 @@ var FcrUIBrowserScreenShareStrategy = exports.FcrUIBrowserScreenShareStrategy =
249
249
  });
250
250
  screenTrack.addObserver(this._screenTrackObserver);
251
251
  screenTrack.setCaptureParams({
252
- withAudio: true,
252
+ withAudio: false,
253
253
  dimensions: _defaultConfig.screenCaptureHighStreamEncoderConfig.dimensions,
254
254
  frameRate: _defaultConfig.screenCaptureHighStreamEncoderConfig.frameRate,
255
255
  bitrate: _defaultConfig.screenCaptureHighStreamEncoderConfig.bitrate
@@ -145,9 +145,6 @@ var FcrUICurrentWindowImpl = exports.FcrUICurrentWindowImpl = /*#__PURE__*/funct
145
145
  }, {
146
146
  key: "setAlwaysOnTop",
147
147
  value: function setAlwaysOnTop(flag) {
148
- // 这里目前没有地方调用,因为annotation调用了setAlwaysOnTop,并且设置了pop-up-menu
149
- // 窗口在windows上设置的是pop-up-menu,看看是不是要成对出现
150
- this.logger.info('windows_index setAlwaysOnTop in main-window');
151
148
  this.browserWindow.setAlwaysOnTop(flag);
152
149
  }
153
150
  }, {
@@ -22,6 +22,8 @@ export declare class FcrUIWindowImpl implements FcrUIWindow, FcrUIManagedObject
22
22
  private _alwaysOnTop?;
23
23
  private _alwaysOnTopLevel?;
24
24
  private _relativeLevel?;
25
+ private _visibleOnAllWorkspaces?;
26
+ private _visibleOnAllWorkspacesOptions?;
25
27
  private _resizable?;
26
28
  private _aspectRatio?;
27
29
  private _minimumSize?;
@@ -56,6 +58,7 @@ export declare class FcrUIWindowImpl implements FcrUIWindow, FcrUIManagedObject
56
58
  forward: boolean;
57
59
  }): void;
58
60
  setAlwaysOnTop(flag: boolean, level?: 'normal' | 'floating' | 'torn-off-menu' | 'modal-panel' | 'main-menu' | 'status' | 'pop-up-menu' | 'screen-saver', relativeLevel?: number): void;
61
+ setVisibleOnAllWorkspaces(visible: boolean, options?: Electron.VisibleOnAllWorkspacesOptions): void;
59
62
  setTitle(title: string): void;
60
63
  getTitle(): string;
61
64
  maximize(): void;