fcr-ui-scene 3.7.6 → 3.7.7-rc.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 (79) hide show
  1. package/lib/creator/index.js +12 -6
  2. package/lib/creator/provider-initializer.browser.js +0 -3
  3. package/lib/creator/provider-initializer.electron.js +0 -4
  4. package/lib/electron/bootstrap-sdk.js +70 -20
  5. package/lib/electron/struct.d.ts +7 -1
  6. package/lib/electron/struct.js +8 -1
  7. package/lib/electron/until.d.ts +3 -1
  8. package/lib/electron/until.js +7 -2
  9. package/lib/modules/action-bar/components/item/index.js +1 -0
  10. package/lib/modules/action-bar/components/screen-share/submenu.js +1 -1
  11. package/lib/modules/chat/index.css +5 -1
  12. package/lib/modules/chat/view.js +6 -1
  13. package/lib/modules/components/control-bar/components/switch-theme/index.css +2 -0
  14. package/lib/modules/components/control-bar/components/switch-theme/index.js +5 -7
  15. package/lib/modules/components/control-bar/index.js +26 -7
  16. package/lib/modules/components/toolbar/components/capture-tool/index.d.ts +0 -1
  17. package/lib/modules/components/toolbar/components/capture-tool/index.js +1 -2
  18. package/lib/modules/components/toolbar/components/vertical-frame/index.js +2 -2
  19. package/lib/modules/components/toolbar/hooks/use-resize-visible.js +43 -42
  20. package/lib/modules/components/toolbar/index.js +6 -24
  21. package/lib/modules/control-bar/components/cloud-recording-buttons.d.ts +3 -0
  22. package/lib/modules/control-bar/components/cloud-recording-buttons.js +65 -3
  23. package/lib/modules/control-bar/store.js +11 -6
  24. package/lib/modules/dialog/components/dialog-container/component/body.d.ts +1 -0
  25. package/lib/modules/dialog/components/dialog-container/component/body.js +3 -2
  26. package/lib/modules/dialog/components/dialog-container/index.css +1 -1
  27. package/lib/modules/dialog/components/dialog-container/index.d.ts +1 -0
  28. package/lib/modules/dialog/components/dialog-container/index.js +4 -1
  29. package/lib/modules/dialog/components/normal-window/index.d.ts +1 -0
  30. package/lib/modules/dialog/components/normal-window/index.js +3 -1
  31. package/lib/modules/dialog/dialogs/chat/index.js +2 -1
  32. package/lib/modules/dialog/dialogs/control-bar-leave-meeting/index.js +0 -1
  33. package/lib/modules/dialog/dialogs/end-meeting/index.d.ts +1 -0
  34. package/lib/modules/dialog/dialogs/end-meeting/index.js +2 -1
  35. package/lib/modules/dialog/dialogs/participant/index.js +2 -1
  36. package/lib/modules/layout/store.electron.js +1 -1
  37. package/lib/modules/secondary-window/store.d.ts +0 -1
  38. package/lib/modules/secondary-window/store.js +9 -22
  39. package/lib/modules/secondary-window/view.js +6 -5
  40. package/lib/modules/setting/index.css +0 -1
  41. package/lib/modules/setting/store.base.js +6 -0
  42. package/lib/modules/setting/view.js +0 -3
  43. package/lib/modules/share-screen/store.electron.js +1 -1
  44. package/lib/modules/state-bar/layout-config.js +6 -0
  45. package/lib/modules/state-bar/main-scene/store.base.d.ts +2 -0
  46. package/lib/modules/state-bar/main-scene/store.base.js +6 -0
  47. package/lib/modules/video-window/index.css +6 -0
  48. package/lib/modules/video-window/popover-watcher.d.ts +4 -1
  49. package/lib/modules/video-window/popover-watcher.js +15 -2
  50. package/lib/modules/video-window/store.d.ts +18 -1
  51. package/lib/modules/video-window/store.js +55 -7
  52. package/lib/modules/whiteboard/store.js +20 -2
  53. package/lib/object-manager.d.ts +0 -1
  54. package/lib/object-manager.js +0 -1
  55. package/lib/providers/board-share/bar-control/base.d.ts +1 -1
  56. package/lib/providers/board-share/bar-control/base.js +37 -28
  57. package/lib/providers/board-share/bar-control/electron.d.ts +1 -1
  58. package/lib/providers/board-share/bar-control/electron.js +19 -16
  59. package/lib/providers/board-share/provider.browser.d.ts +3 -0
  60. package/lib/providers/board-share/provider.browser.js +21 -3
  61. package/lib/providers/device-provider.js +5 -1
  62. package/lib/providers/dialog/provider.electron.js +6 -0
  63. package/lib/providers/mouse-detect/provider.d.ts +5 -0
  64. package/lib/providers/mouse-detect/provider.js +74 -49
  65. package/lib/providers/multi-display-provider.d.ts +3 -5
  66. package/lib/providers/multi-display-provider.js +0 -9
  67. package/lib/providers/room-provider/room-provider.d.ts +3 -14
  68. package/lib/providers/room-provider/room-provider.js +5 -26
  69. package/lib/providers/screen-share/stream-state-sync.js +19 -12
  70. package/lib/providers/window/main-window.d.ts +0 -5
  71. package/lib/providers/window/main-window.js +0 -44
  72. package/lib/providers/window/renderer-window.d.ts +1 -0
  73. package/lib/providers/window/renderer-window.js +9 -1
  74. package/lib/scenes/main-scene.js +0 -2
  75. package/lib/ui-scene.js +4 -2
  76. package/package.json +5 -5
  77. package/public/index.html +22 -1
  78. package/lib/providers/board-share/bar-control.d.ts +0 -51
  79. package/lib/providers/board-share/bar-control.js +0 -390
@@ -124,6 +124,38 @@ var FcrUIMouseDetectProviderImpl = exports.FcrUIMouseDetectProviderImpl = /*#__P
124
124
  x: 0,
125
125
  y: 0
126
126
  });
127
+ (0, _defineProperty2["default"])(this, "_isDebug", false);
128
+ (0, _defineProperty2["default"])(this, "_displayId", null);
129
+ (0, _defineProperty2["default"])(this, "_debugWindowObserver", {
130
+ onReady: function onReady() {
131
+ var AreaDebugger = (0, _mobxReact.observer)(function () {
132
+ var content = Array.from(_this._detectAreas.keys()).map(function (areaId) {
133
+ var list = _this._detectAreas.get(areaId);
134
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
135
+ "data-area-id": areaId,
136
+ children: list.map(function (item, index) {
137
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
138
+ style: {
139
+ width: item.width,
140
+ height: item.height,
141
+ position: 'absolute',
142
+ top: item.y,
143
+ left: item.x,
144
+ backgroundColor: 'rgba(10,10,10,0.5)'
145
+ }
146
+ }, index);
147
+ })
148
+ }, areaId);
149
+ });
150
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
151
+ className: "fcr-ui-mouse-detect-debugger",
152
+ children: content
153
+ });
154
+ });
155
+ var window = _this._windowProvder.getWindowById(_constant.FcrUIDialogKey.MOUSE_DETECT_DEBUG);
156
+ _reactDom["default"].render(/*#__PURE__*/(0, _jsxRuntime.jsx)(AreaDebugger, {}), window.getRootNode());
157
+ }
158
+ });
127
159
  this.objectManager = objectManager;
128
160
  this._renderer = objectManager.getObject(_objectManager.FcrUIObjectKeys.RENDERER_WRAPPER);
129
161
  this._windowProvder = objectManager.getObject(_objectManager.FcrUIObjectKeys.P_WINDOW_PROVIDER);
@@ -136,49 +168,7 @@ var FcrUIMouseDetectProviderImpl = exports.FcrUIMouseDetectProviderImpl = /*#__P
136
168
  }
137
169
 
138
170
  // 调试时使用,用于查看检测区域
139
- var debug = false;
140
- if (debug) {
141
- this._windowProvder.setWindowOptions(_constant.FcrUIDialogKey.MOUSE_DETECT_DEBUG, {
142
- frame: false,
143
- transparent: true,
144
- backgroundColor: '#00000000',
145
- title: 'MouseDetectDebugger'
146
- });
147
- var window = this._windowProvder.getWindowById(_constant.FcrUIDialogKey.MOUSE_DETECT_DEBUG);
148
- window.show();
149
- window.setIgnoreMouseEvents(true);
150
- this.logger.info('windows_index setAlwaysOnTop in mouse-detect-provider');
151
- window.setAlwaysOnTop(true, 'screen-saver', _levelConfig.WindowRelativeLevel.MOUSE_DETECT_DEBUGGER_LEVEL);
152
- window.addObserver({
153
- onReady: function onReady() {
154
- var AreaDebugger = (0, _mobxReact.observer)(function () {
155
- var content = Array.from(_this._detectAreas.keys()).map(function (areaId) {
156
- var list = _this._detectAreas.get(areaId);
157
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
158
- "data-area-id": areaId,
159
- children: list.map(function (item, index) {
160
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
161
- style: {
162
- width: item.width,
163
- height: item.height,
164
- position: 'absolute',
165
- top: item.y,
166
- left: item.x,
167
- backgroundColor: 'rgba(10,10,10,0.5)'
168
- }
169
- }, index);
170
- })
171
- }, areaId);
172
- });
173
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
174
- className: "fcr-ui-mouse-detect-debugger",
175
- children: content
176
- });
177
- });
178
- _reactDom["default"].render(/*#__PURE__*/(0, _jsxRuntime.jsx)(AreaDebugger, {}), window.getRootNode());
179
- }
180
- });
181
- }
171
+ // this._debug(true);
182
172
  }
183
173
  return (0, _createClass2["default"])(FcrUIMouseDetectProviderImpl, [{
184
174
  key: "_detectAreas",
@@ -191,12 +181,9 @@ var FcrUIMouseDetectProviderImpl = exports.FcrUIMouseDetectProviderImpl = /*#__P
191
181
  }, {
192
182
  key: "setDisplayId",
193
183
  value: function setDisplayId(displayId) {
194
- var display = this._renderer.getAllDisplays().find(function (d) {
195
- return d.id === displayId;
196
- });
197
- if (display) {
198
- var window = this._windowProvder.getWindowById(_constant.FcrUIDialogKey.MOUSE_DETECT_DEBUG);
199
- window.setBounds(display.bounds);
184
+ this._displayId = displayId;
185
+ if (this._isDebug) {
186
+ this._setDebugWindowOffset();
200
187
  }
201
188
  }
202
189
  }, {
@@ -284,6 +271,44 @@ var FcrUIMouseDetectProviderImpl = exports.FcrUIMouseDetectProviderImpl = /*#__P
284
271
  });
285
272
  }
286
273
  }
274
+
275
+ // debug purpose
276
+ }, {
277
+ key: "_debug",
278
+ value: function _debug(enable) {
279
+ if (enable) {
280
+ this._isDebug = true;
281
+ this._windowProvder.setWindowOptions(_constant.FcrUIDialogKey.MOUSE_DETECT_DEBUG, {
282
+ frame: false,
283
+ transparent: true,
284
+ backgroundColor: '#00000000',
285
+ title: 'MouseDetectDebugger'
286
+ });
287
+ var window = this._windowProvder.getWindowById(_constant.FcrUIDialogKey.MOUSE_DETECT_DEBUG);
288
+ this._setDebugWindowOffset();
289
+ window.show();
290
+ window.setIgnoreMouseEvents(true);
291
+ window.setAlwaysOnTop(true, 'screen-saver', _levelConfig.WindowRelativeLevel.MOUSE_DETECT_DEBUGGER_LEVEL);
292
+ window.addObserver(this._debugWindowObserver);
293
+ } else {
294
+ this._isDebug = false;
295
+ var _window = this._windowProvder.getWindowById(_constant.FcrUIDialogKey.MOUSE_DETECT_DEBUG);
296
+ _window.removeObserver(this._debugWindowObserver);
297
+ _window.close();
298
+ }
299
+ }
300
+ }, {
301
+ key: "_setDebugWindowOffset",
302
+ value: function _setDebugWindowOffset() {
303
+ var _this3 = this;
304
+ var display = this._renderer.getAllDisplays().find(function (d) {
305
+ return d.id === _this3._displayId;
306
+ });
307
+ if (display) {
308
+ var window = this._windowProvder.getWindowById(_constant.FcrUIDialogKey.MOUSE_DETECT_DEBUG);
309
+ window.setBounds(display.bounds);
310
+ }
311
+ }
287
312
  }]);
288
313
  }();
289
314
  _FcrUIMouseDetectProviderImpl = FcrUIMouseDetectProviderImpl;
@@ -1,5 +1,5 @@
1
1
  import { FcrSharingControl } from 'fcr-core/lib/type';
2
- import { FcrUIDisplayContentDistribution, FcrUIDisplayDistributionContentType, FcrUIDisplayState, FcrUIMainWindowRenderer, FcrUIMultiDisplayObserver } from '../modules/secondary-window/type';
2
+ import { FcrUIDisplayContentDistribution, FcrUIDisplayDistributionContentType, FcrUIDisplayState, FcrUIMultiDisplayObserver } from '../modules/secondary-window/type';
3
3
  import { FcrUIManagedObject } from '../object-manager';
4
4
  import { FcrUISharedMemberDataSource } from '../shared-data/member-data';
5
5
  import { FcrUISharedSettingDataSource } from '../shared-data/setting';
@@ -28,7 +28,7 @@ export interface FcrUIMultiDisplayProvider {
28
28
  showMainWindowInIndexLeastDisplay(options?: {
29
29
  displayOfCurrentSharingBounds?: Electron.Display;
30
30
  /** 是否最大化应用窗口,不是 mac 下的应用全屏 */
31
- maximize?: boolean;
31
+ isMaximized?: boolean;
32
32
  }): void;
33
33
  /** 如果屏幕共享和主窗口在同一个显示器,则将主窗口移动到排序最小的显示器中,共享屏幕(窗口)所在的显示器除外 */
34
34
  moveMainWindowToIndexLeastDisplay(): void;
@@ -48,7 +48,6 @@ export declare class FcrUIMultiDisplayProviderImpl implements FcrUIMultiDisplayP
48
48
  private _screenShareProvider;
49
49
  private _mainWindow;
50
50
  private _renderer;
51
- private _fcrUIMainWindowRenderer;
52
51
  private _contentDistribution;
53
52
  private _isLocalUserNotScreenSharing;
54
53
  private _screenShareObserver;
@@ -66,7 +65,7 @@ export declare class FcrUIMultiDisplayProviderImpl implements FcrUIMultiDisplayP
66
65
  get mianWindowContentType(): `${FcrUIDisplayDistributionContentType}`;
67
66
  get secondaryWindowContentType(): `${FcrUIDisplayDistributionContentType}`;
68
67
  get isLocalCameraInSecondaryWindow(): boolean;
69
- constructor({ sharedSettingDataSource, sharedMemberDataSource, sharedVideoWindowDataSource, windowProvider, renderer, sharingControl, whiteboardProvider, fcrUIMainWindowRenderer, screenShareProvider, }: {
68
+ constructor({ sharedSettingDataSource, sharedMemberDataSource, sharedVideoWindowDataSource, windowProvider, renderer, sharingControl, whiteboardProvider, screenShareProvider, }: {
70
69
  sharedSettingDataSource: FcrUISharedSettingDataSource;
71
70
  sharedMemberDataSource: FcrUISharedMemberDataSource;
72
71
  sharedVideoWindowDataSource: FcrUIVideoWindowDataSource;
@@ -74,7 +73,6 @@ export declare class FcrUIMultiDisplayProviderImpl implements FcrUIMultiDisplayP
74
73
  renderer: FcrUIRendererWrapper;
75
74
  sharingControl: FcrSharingControl;
76
75
  whiteboardProvider: FcrUIBoardShareProvider;
77
- fcrUIMainWindowRenderer: FcrUIMainWindowRenderer;
78
76
  screenShareProvider: FcrUIScreenShareProvider;
79
77
  });
80
78
  addObserver(observer: FcrUIMultiDisplayObserver): void;
@@ -100,7 +100,6 @@ var FcrUIMultiDisplayProviderImpl = exports.FcrUIMultiDisplayProviderImpl = /*#_
100
100
  renderer = _ref.renderer,
101
101
  sharingControl = _ref.sharingControl,
102
102
  whiteboardProvider = _ref.whiteboardProvider,
103
- fcrUIMainWindowRenderer = _ref.fcrUIMainWindowRenderer,
104
103
  screenShareProvider = _ref.screenShareProvider;
105
104
  (0, _classCallCheck2["default"])(this, FcrUIMultiDisplayProviderImpl);
106
105
  (0, _defineProperty2["default"])(this, "_logger", (_initProto(this), (0, _logger.createLogger)({
@@ -148,7 +147,6 @@ var FcrUIMultiDisplayProviderImpl = exports.FcrUIMultiDisplayProviderImpl = /*#_
148
147
  this._sharingControl = sharingControl;
149
148
  this._mainWindow = windowProvider.getCurrentWindow();
150
149
  this._renderer = renderer;
151
- this._fcrUIMainWindowRenderer = fcrUIMainWindowRenderer;
152
150
  this._screenShareProvider = screenShareProvider;
153
151
  this._renderer.addEventListener(this._handleDisplayCountUpdated);
154
152
  this._screenShareProvider.addObserver(this._screenShareObserver);
@@ -527,13 +525,11 @@ var FcrUIMultiDisplayProviderImpl = exports.FcrUIMultiDisplayProviderImpl = /*#_
527
525
  this._observers.notifyObservers('onContentDistributionUpdated', distribution);
528
526
  if (distribution.secondaryWindow.type === 'hidden' && !this._isHidden) {
529
527
  this._whiteboardProvider.setIsDualDisplayMode(false);
530
- this._fcrUIMainWindowRenderer.removeAllObservers();
531
528
  this._isHidden = true;
532
529
  return;
533
530
  }
534
531
  if (distribution.secondaryWindow.type !== 'hidden' && this._isHidden) {
535
532
  this._whiteboardProvider.setIsDualDisplayMode(true);
536
- this._fcrUIMainWindowRenderer.addObserver(this._whiteboardProvider.boardBarControl.toolbarStateObserver);
537
533
  this._isHidden = false;
538
534
  return;
539
535
  }
@@ -555,11 +551,6 @@ var FcrUIMultiDisplayProviderImpl = exports.FcrUIMultiDisplayProviderImpl = /*#_
555
551
  }
556
552
  this._setDisplayState(state);
557
553
  this._whiteboardProvider.setIsDualDisplayMode(state.isSecondaryWindowModeEnabled);
558
- if (state.isSecondaryWindowModeEnabled) {
559
- this._fcrUIMainWindowRenderer.addObserver(this._whiteboardProvider.boardBarControl.toolbarStateObserver);
560
- } else {
561
- this._fcrUIMainWindowRenderer.removeAllObservers();
562
- }
563
554
  }
564
555
  }, {
565
556
  key: "_handleScreenSharingState",
@@ -1,7 +1,7 @@
1
1
  import { FcrCoreEngine } from 'fcr-core';
2
2
  import { FcrBaseRoomControl, FcrMainRoomControl, FcrRoomType, FcrWaitingRoomControl } from 'fcr-core/lib/room-control/type';
3
3
  import { FcrLiveStreamingConfig, FcrLiveStreamingState, FcrRecordingState, FcrUserInfo } from 'fcr-core/lib/type';
4
- import { FcrUIConnectionObserver, FcrUIExitReason, FcrUIRoomObserver, FcrUISceneConfig } from '../../type';
4
+ import { FcrUIExitReason, FcrUIRoomObserver, FcrUISceneConfig } from '../../type';
5
5
  import { FcrUIMessageProvider } from '../message/type';
6
6
  import { FcrUISharedInterpreterDataSource } from '../../shared-data/interpreter';
7
7
  import { FcrUIManagedObject } from '../../object-manager';
@@ -75,12 +75,7 @@ export interface FcrUIRoomProvider {
75
75
  addObserver(observer: FcrUIRoomObserver): void;
76
76
  removeObserver(observer: FcrUIRoomObserver): void;
77
77
  }
78
- export interface FcrUIConnectionProvider {
79
- addObserver(observer: FcrUIConnectionObserver): void;
80
- removeObserver(observer: FcrUIConnectionObserver): void;
81
- }
82
78
  export declare class FcrUIRoomProviderImpl implements FcrUIRoomProvider {
83
- private _eventProvider;
84
79
  private _sceneConfig;
85
80
  private _engine;
86
81
  private _messageProvider;
@@ -99,7 +94,7 @@ export declare class FcrUIRoomProviderImpl implements FcrUIRoomProvider {
99
94
  accessor liveStreamingState: FcrLiveStreamingState;
100
95
  accessor liveStreamingConfig: FcrLiveStreamingConfig | undefined;
101
96
  accessor cloudRecordingState: FcrRecordingState;
102
- constructor(_eventProvider: FcrUIEventProvider, _sceneConfig: FcrUISceneConfig, _engine: FcrCoreEngine, _messageProvider: FcrUIMessageProvider);
97
+ constructor(_sceneConfig: FcrUISceneConfig, _engine: FcrCoreEngine, _messageProvider: FcrUIMessageProvider);
103
98
  get currentRoomControl(): FcrBaseRoomControl;
104
99
  get waitingRoomManager(): FcrUIWaitingRoomControlManager;
105
100
  setIsSelfEndMeeting(isSelfEndMeeting: boolean): void;
@@ -113,13 +108,6 @@ export declare class FcrUIRoomProviderImpl implements FcrUIRoomProvider {
113
108
  private _getJoinRoomOption;
114
109
  private _initBaseRoomState;
115
110
  }
116
- export declare class FcrUIConnectionProviderImpl implements FcrUIConnectionProvider, FcrUIManagedObject {
117
- private _engine;
118
- constructor(_engine: FcrCoreEngine);
119
- addObserver(observer: FcrUIConnectionObserver): void;
120
- removeObserver(observer: FcrUIConnectionObserver): void;
121
- release(): void;
122
- }
123
111
  export declare class FcrUIMainRoomControlProviderImpl implements FcrUIMainRoomControlProvider, FcrUIManagedObject {
124
112
  private _mainRoomControl;
125
113
  private _sharedInterpreterDataSource;
@@ -159,6 +147,7 @@ export declare class FcrUIWaitingRoomControlProviderImpl implements FcrUIWaiting
159
147
  }
160
148
  export declare class FcrUICurrentRoomControlProviderImpl implements FcrUICurrentRoomControlProvider, FcrUIManagedObject {
161
149
  private _currentRoomControl;
150
+ private _roomType;
162
151
  constructor(_currentRoomControl: FcrBaseRoomControl);
163
152
  get currentRoomControl(): FcrBaseRoomControl;
164
153
  get currentRoomType(): FcrRoomType;
@@ -23,7 +23,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
23
23
  Object.defineProperty(exports, "__esModule", {
24
24
  value: true
25
25
  });
26
- exports.FcrUIWaitingRoomControlProviderImpl = exports.FcrUIRoomProviderImpl = exports.FcrUIMainRoomControlProviderImpl = exports.FcrUICurrentRoomControlProviderImpl = exports.FcrUIConnectionProviderImpl = void 0;
26
+ exports.FcrUIWaitingRoomControlProviderImpl = exports.FcrUIRoomProviderImpl = exports.FcrUIMainRoomControlProviderImpl = exports.FcrUICurrentRoomControlProviderImpl = void 0;
27
27
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
28
28
  require("core-js/modules/es.error.cause.js");
29
29
  require("core-js/modules/es.error.to-string.js");
@@ -99,7 +99,7 @@ var _B = /*#__PURE__*/new WeakMap();
99
99
  var _C = /*#__PURE__*/new WeakMap();
100
100
  _ref = (_initBaseRoomStateDecs = [_mobx.action, _mobx.action.bound], "logger");
101
101
  var FcrUIRoomProviderImpl = exports.FcrUIRoomProviderImpl = /*#__PURE__*/function () {
102
- function FcrUIRoomProviderImpl(_eventProvider, _sceneConfig, _engine, _messageProvider) {
102
+ function FcrUIRoomProviderImpl(_sceneConfig, _engine, _messageProvider) {
103
103
  var _this = this;
104
104
  (0, _classCallCheck2["default"])(this, FcrUIRoomProviderImpl);
105
105
  (0, _defineProperty2["default"])(this, _ref, (_initProto(this), (0, _logger.getLogger)()));
@@ -166,12 +166,9 @@ var FcrUIRoomProviderImpl = exports.FcrUIRoomProviderImpl = /*#__PURE__*/functio
166
166
  _classPrivateFieldInitSpec(this, _A, _init_liveStreamingState(this, _type3.FcrLiveStreamingState.STOPPED));
167
167
  _classPrivateFieldInitSpec(this, _B, _init_liveStreamingConfig(this, undefined));
168
168
  _classPrivateFieldInitSpec(this, _C, _init_cloudRecordingState(this, _type3.FcrRecordingState.Stopped));
169
- this._eventProvider = _eventProvider;
170
169
  this._sceneConfig = _sceneConfig;
171
170
  this._engine = _engine;
172
171
  this._messageProvider = _messageProvider;
173
- //@ts-ignore
174
- window.roomStore = this;
175
172
  this._baseRoomControlObserver = {
176
173
  onRoomStateUpdated: function onRoomStateUpdated(roomId, state) {
177
174
  if (state === _type3.FcrRoomState.Closed) {
@@ -248,6 +245,7 @@ var FcrUIRoomProviderImpl = exports.FcrUIRoomProviderImpl = /*#__PURE__*/functio
248
245
  key: "release",
249
246
  value: function release() {
250
247
  var _this$_currentRoomCon;
248
+ this._roomRouter.leaveRoom();
251
249
  (_this$_currentRoomCon = this._currentRoomControl) === null || _this$_currentRoomCon === void 0 || _this$_currentRoomCon.leave();
252
250
  this._currentRoomControl = undefined;
253
251
  this.setIsSelfEndMeeting(false);
@@ -349,26 +347,6 @@ _init_liveStreamingState = _applyDecs$e[0];
349
347
  _init_liveStreamingConfig = _applyDecs$e[1];
350
348
  _init_cloudRecordingState = _applyDecs$e[2];
351
349
  _initProto = _applyDecs$e[3];
352
- var FcrUIConnectionProviderImpl = exports.FcrUIConnectionProviderImpl = /*#__PURE__*/function () {
353
- function FcrUIConnectionProviderImpl(_engine) {
354
- (0, _classCallCheck2["default"])(this, FcrUIConnectionProviderImpl);
355
- this._engine = _engine;
356
- }
357
- return (0, _createClass2["default"])(FcrUIConnectionProviderImpl, [{
358
- key: "addObserver",
359
- value: function addObserver(observer) {
360
- this._engine.addObserver(observer);
361
- }
362
- }, {
363
- key: "removeObserver",
364
- value: function removeObserver(observer) {
365
- this._engine.removeObserver(observer);
366
- }
367
- }, {
368
- key: "release",
369
- value: function release() {}
370
- }]);
371
- }();
372
350
  var _A2 = /*#__PURE__*/new WeakMap();
373
351
  var _B2 = /*#__PURE__*/new WeakMap();
374
352
  _ref2 = (_initUserMapDecs = [_mobx.action, _mobx.action.bound], _handleSecurityUpdatedDecs = [_mobx.action, _mobx.action.bound], "_privilegeProvider");
@@ -740,6 +718,7 @@ var FcrUICurrentRoomControlProviderImpl = exports.FcrUICurrentRoomControlProvide
740
718
  function FcrUICurrentRoomControlProviderImpl(_currentRoomControl) {
741
719
  (0, _classCallCheck2["default"])(this, FcrUICurrentRoomControlProviderImpl);
742
720
  this._currentRoomControl = _currentRoomControl;
721
+ this._roomType = this._currentRoomControl.getRoomInfo().roomType;
743
722
  }
744
723
  return (0, _createClass2["default"])(FcrUICurrentRoomControlProviderImpl, [{
745
724
  key: "currentRoomControl",
@@ -749,7 +728,7 @@ var FcrUICurrentRoomControlProviderImpl = exports.FcrUICurrentRoomControlProvide
749
728
  }, {
750
729
  key: "currentRoomType",
751
730
  get: function get() {
752
- return this._currentRoomControl.getRoomInfo().roomType;
731
+ return this._roomType;
753
732
  }
754
733
  }, {
755
734
  key: "release",
@@ -115,7 +115,7 @@ var FcrUIScreenStreamSync = exports.FcrUIScreenStreamSync = /*#__PURE__*/functio
115
115
  return _context2.abrupt("return");
116
116
  case 1:
117
117
  if (!true) {
118
- _context2.next = 8;
118
+ _context2.next = 9;
119
119
  break;
120
120
  }
121
121
  if (!this._released) {
@@ -128,34 +128,41 @@ var FcrUIScreenStreamSync = exports.FcrUIScreenStreamSync = /*#__PURE__*/functio
128
128
  _context2.next = 3;
129
129
  return this._sharingControl.stop();
130
130
  case 3:
131
- return _context2.abrupt("continue", 8);
131
+ return _context2.abrupt("continue", 9);
132
132
  case 4:
133
133
  _context2.prev = 4;
134
134
  _t2 = _context2["catch"](2);
135
+ if (!(_t2 instanceof _type.FcrError && _t2.code === 720404300)) {
136
+ _context2.next = 5;
137
+ break;
138
+ }
139
+ this.logger.error("the screen share stream does not exist,");
140
+ return _context2.abrupt("continue", 9);
141
+ case 5:
135
142
  this.logger.error("failed to stop screen share stream, error: ".concat(_t2, ", retry in 1000ms"), _t2);
136
- _context2.next = 5;
143
+ _context2.next = 6;
137
144
  return new Promise(function (resolve) {
138
145
  return setTimeout(resolve, 1000);
139
146
  });
140
- case 5:
141
- _context2.prev = 5;
147
+ case 6:
148
+ _context2.prev = 6;
142
149
  if (this._myCurrentScreenShareStreamId) {
143
- _context2.next = 6;
150
+ _context2.next = 7;
144
151
  break;
145
152
  }
146
- return _context2.abrupt("continue", 8);
147
- case 6:
148
- return _context2.finish(5);
153
+ return _context2.abrupt("continue", 9);
149
154
  case 7:
155
+ return _context2.finish(6);
156
+ case 8:
150
157
  _context2.next = 1;
151
158
  break;
152
- case 8:
153
- this._myCurrentScreenShareStreamId = null;
154
159
  case 9:
160
+ this._myCurrentScreenShareStreamId = null;
161
+ case 10:
155
162
  case "end":
156
163
  return _context2.stop();
157
164
  }
158
- }, _callee2, this, [[2, 4, 5, 7]]);
165
+ }, _callee2, this, [[2, 4, 6, 8]]);
159
166
  }));
160
167
  function stopScreenStream() {
161
168
  return _stopScreenStream.apply(this, arguments);
@@ -11,8 +11,6 @@ export declare class FcrUICurrentWindowImpl implements FcrUICurrentWindow, FcrUI
11
11
  protected logger: import("agora-foundation/lib/logger").Logger;
12
12
  private _observable;
13
13
  private _browserWindowProxy;
14
- private _hangDetectionTimer;
15
- private readonly _HANG_DETECTION_TIMEOUT;
16
14
  private _browserWindowListeners;
17
15
  private _preventClose;
18
16
  get browserWindow(): BrowserWindow;
@@ -45,7 +43,4 @@ export declare class FcrUICurrentWindowImpl implements FcrUICurrentWindow, FcrUI
45
43
  release(): void;
46
44
  private _setupEventListeners;
47
45
  private _addLogObserver;
48
- private _handleUnresponsive;
49
- private _handleResponsive;
50
- private _clearHangDetectionTimer;
51
46
  }
@@ -41,7 +41,6 @@ Object.defineProperty(exports, "__esModule", {
41
41
  exports.FcrUICurrentWindowImpl = void 0;
42
42
  require("core-js/modules/es.error.cause.js");
43
43
  require("core-js/modules/es.error.to-string.js");
44
- require("core-js/modules/web.timers.js");
45
44
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
46
45
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
47
46
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -68,9 +67,6 @@ var FcrUICurrentWindowImpl = exports.FcrUICurrentWindowImpl = /*#__PURE__*/funct
68
67
  })));
69
68
  (0, _defineProperty2["default"])(this, "_observable", new _observable.AgoraObservable());
70
69
  (0, _defineProperty2["default"])(this, "_browserWindowProxy", null);
71
- (0, _defineProperty2["default"])(this, "_hangDetectionTimer", null);
72
- (0, _defineProperty2["default"])(this, "_HANG_DETECTION_TIMEOUT", 60 * 1000);
73
- // 1分钟(毫s秒)
74
70
  (0, _defineProperty2["default"])(this, "_browserWindowListeners", {
75
71
  onShow: function onShow() {
76
72
  _this._observable.notifyObservers('onVisibilityChanged', true);
@@ -86,12 +82,6 @@ var FcrUICurrentWindowImpl = exports.FcrUICurrentWindowImpl = /*#__PURE__*/funct
86
82
  },
87
83
  onClose: function onClose() {
88
84
  _this._observable.notifyObservers('onClose');
89
- },
90
- onUnresponsive: function onUnresponsive() {
91
- _this._handleUnresponsive();
92
- },
93
- onResponsive: function onResponsive() {
94
- _this._handleResponsive();
95
85
  }
96
86
  });
97
87
  (0, _defineProperty2["default"])(this, "_preventClose", false);
@@ -235,8 +225,6 @@ var FcrUICurrentWindowImpl = exports.FcrUICurrentWindowImpl = /*#__PURE__*/funct
235
225
  }, {
236
226
  key: "release",
237
227
  value: function release() {
238
- // 清理hang检测计时器
239
- this._clearHangDetectionTimer();
240
228
  if (this._browserWindowProxy && !this._browserWindowProxy.isDestroyed()) {
241
229
  this._browserWindowProxy.removeAllListeners();
242
230
  }
@@ -259,44 +247,12 @@ var FcrUICurrentWindowImpl = exports.FcrUICurrentWindowImpl = /*#__PURE__*/funct
259
247
  this._browserWindowProxy.addListener('resized', this._browserWindowListeners.onResized);
260
248
  this._browserWindowProxy.addListener('moved', this._browserWindowListeners.onMoved);
261
249
  this._browserWindowProxy.addListener('close', this._browserWindowListeners.onClose);
262
- this._browserWindowProxy.addListener('unresponsive', this._browserWindowListeners.onUnresponsive);
263
- this._browserWindowProxy.addListener('responsive', this._browserWindowListeners.onResponsive);
264
250
  }
265
251
  }, {
266
252
  key: "_addLogObserver",
267
253
  value: function _addLogObserver() {
268
254
  this._observable.addObserver((0, _logger.generateLogObserver)(this.logger, ['onFocused', 'onBlurred', 'onBoundsChanged', 'onVisibilityChanged', 'onReady', 'onClose']));
269
255
  }
270
- }, {
271
- key: "_handleUnresponsive",
272
- value: function _handleUnresponsive() {
273
- var _this2 = this;
274
- this.logger.warn('Window became unresponsive, starting hang detection timer');
275
- this._clearHangDetectionTimer();
276
- this._hangDetectionTimer = setTimeout(function () {
277
- _this2.logger.error('Window has been unresponsive for 1 minute, forcing application exit');
278
- try {
279
- // app.quit();
280
- } catch (error) {
281
- _this2.logger.error('Failed to exit application gracefully:', error);
282
- // process.exit(1);
283
- }
284
- }, this._HANG_DETECTION_TIMEOUT);
285
- }
286
- }, {
287
- key: "_handleResponsive",
288
- value: function _handleResponsive() {
289
- this.logger.info('Window became responsive again, clearing hang detection timer');
290
- this._clearHangDetectionTimer();
291
- }
292
- }, {
293
- key: "_clearHangDetectionTimer",
294
- value: function _clearHangDetectionTimer() {
295
- if (this._hangDetectionTimer) {
296
- clearTimeout(this._hangDetectionTimer);
297
- this._hangDetectionTimer = null;
298
- }
299
- }
300
256
  }]);
301
257
  }();
302
258
  _FcrUICurrentWindowImpl = FcrUICurrentWindowImpl;
@@ -15,6 +15,7 @@ export declare class FcrUIWindowImpl implements FcrUIWindow, FcrUIManagedObject
15
15
  private _preventClose;
16
16
  private _visible;
17
17
  private _showInactive;
18
+ private _isClosed;
18
19
  private _isBrowserWindowReady;
19
20
  private _ignoreMouseEvents?;
20
21
  private _ignoreMouseEventsOptions?;
@@ -75,6 +75,7 @@ var FcrUIWindowImpl = exports.FcrUIWindowImpl = /*#__PURE__*/function () {
75
75
  (0, _defineProperty2["default"])(this, "_preventClose", false);
76
76
  (0, _defineProperty2["default"])(this, "_visible", false);
77
77
  (0, _defineProperty2["default"])(this, "_showInactive", false);
78
+ (0, _defineProperty2["default"])(this, "_isClosed", false);
78
79
  // inner state
79
80
  (0, _defineProperty2["default"])(this, "_isBrowserWindowReady", false);
80
81
  (0, _defineProperty2["default"])(this, "_browserWindowListeners", {
@@ -254,7 +255,10 @@ var FcrUIWindowImpl = exports.FcrUIWindowImpl = /*#__PURE__*/function () {
254
255
  }, {
255
256
  key: "close",
256
257
  value: function close() {
257
- this.browserWindow.close();
258
+ this._isClosed = true;
259
+ if (this._isBrowserWindowReady) {
260
+ this.browserWindow.close();
261
+ }
258
262
  }
259
263
  }, {
260
264
  key: "isFullScreen",
@@ -442,6 +446,10 @@ var FcrUIWindowImpl = exports.FcrUIWindowImpl = /*#__PURE__*/function () {
442
446
  key: "_synBrowserWindowStateToInnerState",
443
447
  value: function _synBrowserWindowStateToInnerState() {
444
448
  this.browserWindow.webContents.setBackgroundThrottling(false);
449
+ if (this._isClosed) {
450
+ this.browserWindow.close();
451
+ return;
452
+ }
445
453
  if (this._visible) {
446
454
  this.browserWindowProxy.setPreventClose(this._preventClose);
447
455
  if (this._showInactive) {
@@ -618,8 +618,6 @@ var FcrMainUIScene = exports.FcrMainUIScene = /*#__PURE__*/function (_FcrBaseUIS
618
618
  dialogProvider.closeDialog(_constant.FcrUIDialogKey.REVOKE_HOST);
619
619
  dialogProvider.closeDialog(_constant.FcrUIDialogKey.MUTE_ALL);
620
620
  dialogProvider.closeDialog(_constant.FcrUIDialogKey.CONTROL_BAR_LEAVE_MEETING);
621
- dialogProvider.closeDialog(_constant.FcrUIDialogKey.TOAST);
622
- dialogProvider.closeDialog(_constant.FcrUIDialogKey.CONFIRM);
623
621
  dialogProvider.closeDialog(_constant.FcrUIDialogKey.END_MEETING);
624
622
  dialogProvider.closeAllConfirms();
625
623
  }
package/lib/ui-scene.js CHANGED
@@ -72,6 +72,7 @@ var _logger = require("fcr-core/lib/utilities/logger");
72
72
  var _logger2 = require("./utilities/logger");
73
73
  var _objectManager = require("./object-manager");
74
74
  var _env = require("agora-foundation/lib/utilities/env");
75
+ var _platform = require("./utilities/platform");
75
76
  var _FcrUIDefaultScene;
76
77
  var _initProto;
77
78
  function _applyDecs(e, t, r, n, o, a) { function i(e, t, r) { return function (n, o) { return r && r(n), e[t].call(n, o); }; } function c(e, t) { for (var r = 0; r < e.length; r++) e[r].call(t); return t; } function s(e, t, r, n) { if ("function" != typeof e && (n || void 0 !== e)) throw new TypeError(t + " must " + (r || "be") + " a function" + (n ? "" : " or undefined")); return e; } function applyDec(e, t, r, n, o, a, c, u, l, f, p, d, h) { function m(e) { if (!h(e)) throw new TypeError("Attempted to access private element on non-instance"); } var y, v = t[0], g = t[3], b = !u; if (!b) { r || Array.isArray(v) || (v = [v]); var w = {}, S = [], A = 3 === o ? "get" : 4 === o || d ? "set" : "value"; f ? (p || d ? w = { get: _setFunctionName(function () { return g(this); }, n, "get"), set: function set(e) { t[4](this, e); } } : w[A] = g, p || _setFunctionName(w[A], n, 2 === o ? "" : A)) : p || (w = Object.getOwnPropertyDescriptor(e, n)); } for (var P = e, j = v.length - 1; j >= 0; j -= r ? 2 : 1) { var D = v[j], E = r ? v[j - 1] : void 0, I = {}, O = { kind: ["field", "accessor", "method", "getter", "setter", "class"][o], name: n, metadata: a, addInitializer: function (e, t) { if (e.v) throw Error("attempted to call addInitializer after decoration was finished"); s(t, "An initializer", "be", !0), c.push(t); }.bind(null, I) }; try { if (b) (y = s(D.call(E, P, O), "class decorators", "return")) && (P = y);else { var k, F; O["static"] = l, O["private"] = f, f ? 2 === o ? k = function k(e) { return m(e), w.value; } : (o < 4 && (k = i(w, "get", m)), 3 !== o && (F = i(w, "set", m))) : (k = function k(e) { return e[n]; }, (o < 2 || 4 === o) && (F = function F(e, t) { e[n] = t; })); var N = O.access = { has: f ? h.bind() : function (e) { return n in e; } }; if (k && (N.get = k), F && (N.set = F), P = D.call(E, d ? { get: w.get, set: w.set } : w[A], O), d) { if ("object" == _typeof(P) && P) (y = s(P.get, "accessor.get")) && (w.get = y), (y = s(P.set, "accessor.set")) && (w.set = y), (y = s(P.init, "accessor.init")) && S.push(y);else if (void 0 !== P) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0"); } else s(P, (p ? "field" : "method") + " decorators", "return") && (p ? S.push(P) : w[A] = P); } } finally { I.v = !0; } } return (p || d) && u.push(function (e, t) { for (var r = S.length - 1; r >= 0; r--) t = S[r].call(e, t); return t; }), p || b || (f ? d ? u.push(i(w, "get"), i(w, "set")) : u.push(2 === o ? w[A] : i.call.bind(w[A])) : Object.defineProperty(e, n, w)), P; } function u(e, t) { return Object.defineProperty(e, Symbol.metadata || Symbol["for"]("Symbol.metadata"), { configurable: !0, enumerable: !0, value: t }); } if (arguments.length >= 6) var l = a[Symbol.metadata || Symbol["for"]("Symbol.metadata")]; var f = Object.create(null == l ? null : l), p = function (e, t, r, n) { var o, a, i = [], s = function s(t) { return _checkInRHS(t) === e; }, u = new Map(); function l(e) { e && i.push(c.bind(null, e)); } for (var f = 0; f < t.length; f++) { var p = t[f]; if (Array.isArray(p)) { var d = p[1], h = p[2], m = p.length > 3, y = 16 & d, v = !!(8 & d), g = 0 == (d &= 7), b = h + "/" + v; if (!g && !m) { var w = u.get(b); if (!0 === w || 3 === w && 4 !== d || 4 === w && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h); u.set(b, !(d > 2) || d); } applyDec(v ? e : e.prototype, p, y, m ? "#" + h : _toPropertyKey(h), d, n, v ? a = a || [] : o = o || [], i, v, m, g, 1 === d, v && m ? s : r); } } return l(o), l(a), i; }(e, t, o, f); return r.length || u(e, f), { e: p, get c() { var t = []; return r.length && [u(applyDec(e, [r], n, e.name, 5, f, t), f), c.bind(null, t, e)]; } }; }
@@ -186,7 +187,7 @@ var FcrUIDefaultScene = exports.FcrUIDefaultScene = /*#__PURE__*/function () {
186
187
  var eventProvider = this._objectManager.getObject(_objectManager.FcrUIObjectKeys.P_EVENT_PROVIDER);
187
188
  var messageProvider = this._objectManager.getObject(_objectManager.FcrUIObjectKeys.P_MESSAGE_PROVIDER);
188
189
  this._uiManager = new _uiManager.FcrUIManager(this._config, this._dom, this._creatorConfig.parameters);
189
- var roomProvider = new _roomProvider.FcrUIRoomProviderImpl(eventProvider, this._config, engine, messageProvider);
190
+ var roomProvider = new _roomProvider.FcrUIRoomProviderImpl(this._config, engine, messageProvider);
190
191
  this._objectManager.setObject(_objectManager.FcrUIObjectKeys.P_ROOM_PROVIDER, roomProvider);
191
192
  var uiManager = this._uiManager;
192
193
  this._addObservers(uiManager);
@@ -281,7 +282,8 @@ var FcrUIDefaultScene = exports.FcrUIDefaultScene = /*#__PURE__*/function () {
281
282
  onConfirm: function onConfirm() {
282
283
  dialogProvider.closeDialog(_constant.FcrUIDialogKey.END_MEETING);
283
284
  observable.notifyObservers('onExited', sceneConfig.roomId, _type.FcrUIExitReason.CLOSE_ROOM);
284
- }
285
+ },
286
+ alwaysOnTop: (0, _platform.isWindows)()
285
287
  });
286
288
  }
287
289
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fcr-ui-scene",
3
- "version": "3.7.6",
3
+ "version": "3.7.7-rc.1",
4
4
  "main": "lib/index.js",
5
5
  "repository": "ssh://git@git.agoralab.co/aduc/fcr-ui-scene-desktop.git",
6
6
  "author": "agora.io",
@@ -22,13 +22,13 @@
22
22
  "@react-spring/web": "^9.7.3",
23
23
  "@use-gesture/react": "^10.3.1",
24
24
  "agora-electron-sdk": "4.3.2-build.156-rc.1",
25
- "agora-foundation": "~3.7.6",
26
- "agora-ui-foundation": "~3.7.6",
25
+ "agora-foundation": "~3.7.7-rc.1",
26
+ "agora-ui-foundation": "~3.7.7-rc.1",
27
27
  "classnames": "^2.5.1",
28
28
  "core-js": "^3.33.3",
29
29
  "dayjs": "^1.10.4",
30
30
  "electron-screenshots": "^0.5.26",
31
- "fcr-core": "~3.7.6",
31
+ "fcr-core": "~3.7.7-rc.1",
32
32
  "js-md5": "^0.8.3",
33
33
  "jszip": "^3.10.1",
34
34
  "lodash": "^4.17.21",
@@ -59,7 +59,7 @@
59
59
  "@types/react-dom": "^17.0.11",
60
60
  "@types/react-virtualized": "^9.21.30",
61
61
  "@types/tinycolor2": "^1.4.6",
62
- "agora-toolchain": "~3.7.6",
62
+ "agora-toolchain": "~3.7.7-rc.1",
63
63
  "core-js": "^3.33.3",
64
64
  "electron": "22.3.27",
65
65
  "husky": "^9.0.11",