fcr-ui-scene 3.7.7 → 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 (237) hide show
  1. package/lib/creator/index.js +13 -19
  2. package/lib/creator/provider-initializer.browser.js +2 -2
  3. package/lib/creator/provider-initializer.electron.js +2 -2
  4. package/lib/electron/bootstrap-sdk.js +89 -35
  5. package/lib/electron/hang-detection/index.d.ts +3 -0
  6. package/lib/electron/hang-detection/index.js +15 -0
  7. package/lib/electron/hang-detection/manager.d.ts +28 -0
  8. package/lib/electron/hang-detection/manager.js +231 -0
  9. package/lib/electron/hang-detection/types.d.ts +14 -0
  10. package/lib/electron/sdk-helper.js +6 -2
  11. package/lib/electron/until.d.ts +1 -4
  12. package/lib/electron/until.js +12 -4
  13. package/lib/index.js +8 -1
  14. package/lib/modules/action-bar/components/screen-share/index.electron.js +1 -1
  15. package/lib/modules/components/control-bar/components/switch-theme/index.js +4 -2
  16. package/lib/modules/components/control-bar/index.js +1 -3
  17. package/lib/modules/components/leave-meeting/store.base.d.ts +1 -0
  18. package/lib/modules/components/leave-meeting/store.base.js +46 -5
  19. package/lib/modules/dialog/dialogs/confirm-leave-meeting/index.d.ts +1 -0
  20. package/lib/modules/dialog/dialogs/confirm-leave-meeting/index.js +2 -1
  21. package/lib/modules/dialog/dialogs/share-screen-selection/index.js +0 -12
  22. package/lib/modules/participant/store.base.js +0 -1
  23. package/lib/modules/share-screen/store.base.js +0 -2
  24. package/lib/modules/share-screen/store.electron.js +54 -22
  25. package/lib/modules/state-bar/store.base.electron.js +6 -2
  26. package/lib/modules/video-window/popover-watcher.js +4 -1
  27. package/lib/modules/video-window/store.js +7 -1
  28. package/lib/modules/video-window/view.js +14 -4
  29. package/lib/providers/board-share/bar-control/base.d.ts +2 -0
  30. package/lib/providers/board-share/bar-control/base.js +13 -3
  31. package/lib/providers/board-share/bar-control/electron.d.ts +1 -0
  32. package/lib/providers/board-share/bar-control/electron.js +15 -4
  33. package/lib/providers/board-share/provider.base.d.ts +1 -0
  34. package/lib/providers/board-share/provider.base.js +3 -1
  35. package/lib/providers/board-share/provider.electron.d.ts +1 -0
  36. package/lib/providers/board-share/provider.electron.js +8 -2
  37. package/lib/providers/board-share/type.d.ts +2 -0
  38. package/lib/providers/dialog/provider.electron.js +10 -2
  39. package/lib/providers/screen-share/strategy/browser.js +51 -4
  40. package/lib/providers/screen-share/strategy/electron.js +77 -8
  41. package/lib/providers/screen-share/stream-state-sync.d.ts +3 -1
  42. package/lib/providers/screen-share/stream-state-sync.js +133 -40
  43. package/lib/providers/window/main-window.js +0 -3
  44. package/lib/providers/window/renderer-window.d.ts +3 -0
  45. package/lib/providers/window/renderer-window.js +47 -4
  46. package/lib/providers/window/type.d.ts +1 -0
  47. package/lib/scenes/main-scene.d.ts +1 -0
  48. package/lib/scenes/main-scene.js +32 -1
  49. package/lib/utilities/logger.js +1 -1
  50. package/package.json +5 -5
  51. package/public/index.html +2 -149
  52. package/public/meeting-manager.js +391 -0
  53. package/installer/icons/favicon.ico +0 -0
  54. package/installer/icons/favicon.png +0 -0
  55. package/installer/icons/icon.png +0 -0
  56. package/installer/mac/entitlements.mac.plist +0 -16
  57. package/lib/creator.d.ts +0 -36
  58. package/lib/creator.js +0 -465
  59. package/lib/modules/action-bar/index.d.ts +0 -58
  60. package/lib/modules/action-bar/index.dev.d.ts +0 -0
  61. package/lib/modules/action-bar/index.dev.js +0 -94
  62. package/lib/modules/action-bar/index.js +0 -109
  63. package/lib/modules/action-bar/store.d.ts +0 -259
  64. package/lib/modules/action-bar/store.js +0 -1529
  65. package/lib/modules/action-bar/types.d.ts +0 -90
  66. package/lib/modules/action-bar/view.d.ts +0 -5
  67. package/lib/modules/action-bar/view.js +0 -112
  68. package/lib/modules/annotation/annotation-index.d.ts +0 -2
  69. package/lib/modules/annotation/annotation-index.js +0 -80
  70. package/lib/modules/annotation/annotation-toolbar-store.d.ts +0 -75
  71. package/lib/modules/annotation/annotation-toolbar-store.js +0 -459
  72. package/lib/modules/annotation/board-cursor.css +0 -77
  73. package/lib/modules/annotation/components/color-picker/components/color.d.ts +0 -5
  74. package/lib/modules/annotation/components/color-picker/components/color.js +0 -38
  75. package/lib/modules/annotation/components/color-picker/components/panel.d.ts +0 -1
  76. package/lib/modules/annotation/components/color-picker/components/panel.js +0 -109
  77. package/lib/modules/annotation/components/color-picker/components/picker.d.ts +0 -1
  78. package/lib/modules/annotation/components/color-picker/components/picker.js +0 -75
  79. package/lib/modules/annotation/components/color-picker/index.d.ts +0 -2
  80. package/lib/modules/annotation/components/color-picker/index.js +0 -47
  81. package/lib/modules/annotation/components/eraser-picker.d.ts +0 -4
  82. package/lib/modules/annotation/components/eraser-picker.js +0 -144
  83. package/lib/modules/annotation/components/expansion/index.d.ts +0 -1
  84. package/lib/modules/annotation/components/expansion/index.js +0 -100
  85. package/lib/modules/annotation/components/extra-tool-picker.d.ts +0 -1
  86. package/lib/modules/annotation/components/extra-tool-picker.js +0 -62
  87. package/lib/modules/annotation/components/history.d.ts +0 -2
  88. package/lib/modules/annotation/components/history.js +0 -78
  89. package/lib/modules/annotation/components/icons/fold-icon.d.ts +0 -2
  90. package/lib/modules/annotation/components/icons/fold-icon.js +0 -41
  91. package/lib/modules/annotation/components/icons/move-icon.d.ts +0 -1
  92. package/lib/modules/annotation/components/icons/move-icon.js +0 -66
  93. package/lib/modules/annotation/components/item/index.d.ts +0 -1
  94. package/lib/modules/annotation/components/item/index.js +0 -43
  95. package/lib/modules/annotation/components/move-handle.d.ts +0 -5
  96. package/lib/modules/annotation/components/move-handle.js +0 -134
  97. package/lib/modules/annotation/components/pen-picker.d.ts +0 -4
  98. package/lib/modules/annotation/components/pen-picker.js +0 -155
  99. package/lib/modules/annotation/components/screen-capture-picker.d.ts +0 -4
  100. package/lib/modules/annotation/components/screen-capture-picker.js +0 -85
  101. package/lib/modules/annotation/components/shape-picker.d.ts +0 -4
  102. package/lib/modules/annotation/components/shape-picker.js +0 -210
  103. package/lib/modules/annotation/hooks/index.d.ts +0 -14
  104. package/lib/modules/annotation/hooks/index.js +0 -292
  105. package/lib/modules/annotation/index.d.ts +0 -45
  106. package/lib/modules/annotation/index.js +0 -168
  107. package/lib/modules/annotation/store.d.ts +0 -98
  108. package/lib/modules/annotation/store.js +0 -620
  109. package/lib/modules/annotation/style.css +0 -36
  110. package/lib/modules/annotation/view.d.ts +0 -3
  111. package/lib/modules/annotation/view.js +0 -44
  112. package/lib/modules/components/device-control/store.d.ts +0 -42
  113. package/lib/modules/components/device-control/store.js +0 -241
  114. package/lib/modules/components/leave-meeting/store.d.ts +0 -39
  115. package/lib/modules/components/leave-meeting/store.js +0 -270
  116. package/lib/modules/control-bar/components/annotation-button/index.d.ts +0 -1
  117. package/lib/modules/control-bar/components/annotation-button/index.js +0 -72
  118. package/lib/modules/control-bar/reactor.d.ts +0 -2
  119. package/lib/modules/control-bar/reactor.js +0 -8
  120. package/lib/modules/control-bar/types.d.ts +0 -20
  121. package/lib/modules/control-bar/types.js +0 -6
  122. package/lib/modules/dialog/dialogs/pre-setting/index.css +0 -26
  123. package/lib/modules/dialog/dialogs/pre-setting/index.d.ts +0 -6
  124. package/lib/modules/dialog/dialogs/pre-setting/index.js +0 -62
  125. package/lib/modules/dialog/dialogs/widget/electron.d.ts +0 -6
  126. package/lib/modules/dialog/dialogs/widget/electron.js +0 -38
  127. package/lib/modules/dialog/hooks/use-popover-watcher.d.ts +0 -14
  128. package/lib/modules/dialog/hooks/use-popover-watcher.js +0 -110
  129. package/lib/modules/dialog/hooks/useElectron.d.ts +0 -28
  130. package/lib/modules/dialog/hooks/useElectron.js +0 -277
  131. package/lib/modules/dialog/store.d.ts +0 -135
  132. package/lib/modules/dialog/store.js +0 -616
  133. package/lib/modules/event-confirm/components/window/index.d.ts +0 -7
  134. package/lib/modules/event-confirm/components/window/index.js +0 -221
  135. package/lib/modules/event-confirm/index.css +0 -24
  136. package/lib/modules/event-confirm/index.d.ts +0 -27
  137. package/lib/modules/event-confirm/index.js +0 -76
  138. package/lib/modules/event-confirm/store.d.ts +0 -50
  139. package/lib/modules/event-confirm/store.js +0 -394
  140. package/lib/modules/event-confirm/view.d.ts +0 -2
  141. package/lib/modules/event-confirm/view.js +0 -55
  142. package/lib/modules/event-toast/store.d.ts +0 -27
  143. package/lib/modules/event-toast/store.js +0 -205
  144. package/lib/modules/layout/store.d.ts +0 -176
  145. package/lib/modules/layout/store.js +0 -1452
  146. package/lib/modules/participant/store.d.ts +0 -222
  147. package/lib/modules/participant/store.js +0 -1929
  148. package/lib/modules/pc-audio-connect/index.d.ts +0 -22
  149. package/lib/modules/pc-audio-connect/index.js +0 -67
  150. package/lib/modules/pc-audio-connect/store.d.ts +0 -46
  151. package/lib/modules/pc-audio-connect/store.js +0 -304
  152. package/lib/modules/setting/common/advance-link.d.ts +0 -3
  153. package/lib/modules/setting/common/advance-link.js +0 -27
  154. package/lib/modules/setting/common/index.css +0 -26
  155. package/lib/modules/setting/common/useNamespace.d.ts +0 -15
  156. package/lib/modules/setting/common/useNamespace.js +0 -66
  157. package/lib/modules/setting/dialog-wrapper.d.ts +0 -2
  158. package/lib/modules/setting/dialog-wrapper.js +0 -110
  159. package/lib/modules/setting/store.d.ts +0 -261
  160. package/lib/modules/setting/store.js +0 -1321
  161. package/lib/modules/share-screen/store.d.ts +0 -148
  162. package/lib/modules/share-screen/store.js +0 -960
  163. package/lib/modules/share-screen/types.d.ts +0 -26
  164. package/lib/modules/share-screen/types.js +0 -6
  165. package/lib/modules/state-bar/store.d.ts +0 -124
  166. package/lib/modules/state-bar/store.js +0 -664
  167. package/lib/modules/whiteboard/components/progress/electron.d.ts +0 -1
  168. package/lib/modules/whiteboard/components/progress/electron.js +0 -33
  169. package/lib/modules/widget/store.d.ts +0 -14
  170. package/lib/modules/widget/store.js +0 -28
  171. package/lib/providers/annotation-provider.d.ts +0 -124
  172. package/lib/providers/annotation-provider.js +0 -369
  173. package/lib/providers/dialog-provider.d.ts +0 -137
  174. package/lib/providers/dialog-provider.js +0 -194
  175. package/lib/providers/message-provider.d.ts +0 -69
  176. package/lib/providers/message-provider.js +0 -140
  177. package/lib/providers/room-provider.d.ts +0 -194
  178. package/lib/providers/room-provider.js +0 -916
  179. package/lib/providers/screen-share-provider.d.ts +0 -245
  180. package/lib/providers/screen-share-provider.js +0 -850
  181. package/lib/providers/sharing-provider.d.ts +0 -42
  182. package/lib/providers/sharing-provider.js +0 -228
  183. package/lib/providers/user-setting-storage-provider.d.ts +0 -21
  184. package/lib/providers/user-setting-storage-provider.js +0 -65
  185. package/lib/providers/whiteboard-provider.d.ts +0 -24
  186. package/lib/providers/whiteboard-provider.js +0 -128
  187. package/lib/shared-data-source/annotation-data.d.ts +0 -17
  188. package/lib/shared-data-source/annotation-data.js +0 -110
  189. package/lib/shared-data-source/app-list-data.d.ts +0 -34
  190. package/lib/shared-data-source/app-list-data.js +0 -133
  191. package/lib/shared-data-source/chat-data.d.ts +0 -25
  192. package/lib/shared-data-source/chat-data.js +0 -139
  193. package/lib/shared-data-source/config.d.ts +0 -35
  194. package/lib/shared-data-source/config.js +0 -40
  195. package/lib/shared-data-source/confirm-data.d.ts +0 -44
  196. package/lib/shared-data-source/confirm-data.js +0 -201
  197. package/lib/shared-data-source/device-privilege-data.d.ts +0 -8
  198. package/lib/shared-data-source/device-privilege-data.js +0 -25
  199. package/lib/shared-data-source/interpreter.d.ts +0 -77
  200. package/lib/shared-data-source/interpreter.js +0 -247
  201. package/lib/shared-data-source/layout-data.d.ts +0 -31
  202. package/lib/shared-data-source/layout-data.js +0 -189
  203. package/lib/shared-data-source/meeting-time.d.ts +0 -90
  204. package/lib/shared-data-source/meeting-time.js +0 -416
  205. package/lib/shared-data-source/member-data.d.ts +0 -139
  206. package/lib/shared-data-source/member-data.js +0 -517
  207. package/lib/shared-data-source/pin-data.d.ts +0 -13
  208. package/lib/shared-data-source/pin-data.js +0 -111
  209. package/lib/shared-data-source/screen-share-data.d.ts +0 -357
  210. package/lib/shared-data-source/screen-share-data.js +0 -513
  211. package/lib/shared-data-source/security-data.d.ts +0 -39
  212. package/lib/shared-data-source/security-data.js +0 -156
  213. package/lib/shared-data-source/setting.d.ts +0 -67
  214. package/lib/shared-data-source/setting.js +0 -220
  215. package/lib/shared-data-source/speaker-spotlight.d.ts +0 -5
  216. package/lib/shared-data-source/speaker-spotlight.js +0 -15
  217. package/lib/shared-data-source/video-window.d.ts +0 -165
  218. package/lib/shared-data-source/video-window.js +0 -1266
  219. package/lib/shared-data-source/waiting-room.d.ts +0 -46
  220. package/lib/shared-data-source/waiting-room.js +0 -222
  221. package/lib/shared-data-source/whiteboard-data.d.ts +0 -70
  222. package/lib/shared-data-source/whiteboard-data.js +0 -348
  223. package/lib/utilities/board-context.d.ts +0 -4
  224. package/lib/utilities/board-context.js +0 -12
  225. package/lib/utilities/copyText.d.ts +0 -2
  226. package/lib/utilities/copyText.js +0 -48
  227. package/lib/utilities/renderer-event.d.ts +0 -10
  228. package/lib/utilities/renderer-event.js +0 -95
  229. package/lib/utilities/screen-capture-permission.d.ts +0 -2
  230. package/lib/utilities/screen-capture-permission.js +0 -24
  231. package/lib/utilities/screen.d.ts +0 -3
  232. package/lib/utilities/screen.js +0 -53
  233. package/lib/utilities/video-track-render-context.d.ts +0 -6
  234. package/lib/utilities/video-track-render-context.js +0 -9
  235. package/lib/waiting-room-control-manager.d.ts +0 -28
  236. package/lib/waiting-room-control-manager.js +0 -230
  237. /package/lib/{modules/action-bar → electron/hang-detection}/types.js +0 -0
@@ -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",
@@ -210,14 +210,14 @@ var FcrUIBrowserProviderInitializer = exports.FcrUIBrowserProviderInitializer =
210
210
  objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_APPLIST_DATA_SOURCE, sharedApplistDataSource);
211
211
  var applistProvider = new _appListProvider.FcrUIApplistProviderImpl(dialogProvider, eventProvider, widgetProvider, sharedApplistDataSource);
212
212
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_APPLIST_PROVIDER, applistProvider);
213
+ var videoWindowDataSource = new _videoWindow.FcrUIVideoWindowDataSourceImpl(sharedSettingDataSource);
214
+ objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_VIDEO_WINDOW_DATA_SOURCE, videoWindowDataSource);
213
215
  var screenShareProvider = new _provider5.FcrUIScreenShareProviderImpl(objectManager);
214
216
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_SCREEN_SHARE_PROVIDER, screenShareProvider);
215
217
  var sharedSpeakerSoptlightDataSource = new _speakerSpotlight.FcrUISharedSpeakerSpotlightDataSourceImpl();
216
218
  objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_SPEAKER_SPOTLIGHT_DATA_SOURCE, sharedSpeakerSoptlightDataSource);
217
219
  var localVideoRenderProvider = new _rendererProvider.FcrUIMainLocalVideoRenderProviderImpl(deviceProvider, screenShareProvider);
218
220
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_LOCAL_VIDEO_RENDER_PROVIDER, localVideoRenderProvider);
219
- var videoWindowDataSource = new _videoWindow.FcrUIVideoWindowDataSourceImpl(sharedSettingDataSource);
220
- objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_VIDEO_WINDOW_DATA_SOURCE, videoWindowDataSource);
221
221
  var pinDataSource = new _pinData.FcrUISharedPinDataSourceImpl(messageProvider, videoWindowDataSource);
222
222
  objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_PIN_DATA_SOURCE, pinDataSource);
223
223
  }
@@ -240,10 +240,10 @@ var FcrUIElectronProviderInitializer = exports.FcrUIElectronProviderInitializer
240
240
  objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_APPLIST_DATA_SOURCE, sharedApplistDataSource);
241
241
  var applistProvider = new _appListProvider.FcrUIApplistProviderImpl(dialogProvider, eventProvider, widgetProvider, sharedApplistDataSource);
242
242
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_APPLIST_PROVIDER, applistProvider);
243
- var screenShareProvider = new _provider6.FcrUIScreenShareProviderImpl(objectManager);
244
- objectManager.setObject(_objectManager.FcrUIObjectKeys.P_SCREEN_SHARE_PROVIDER, screenShareProvider);
245
243
  var sharedVideoWindowDataSource = new _videoWindow.FcrUIVideoWindowDataSourceImpl(sharedSettingDataSource);
246
244
  objectManager.setObject(_objectManager.FcrUIObjectKeys.S_SHARED_VIDEO_WINDOW_DATA_SOURCE, sharedVideoWindowDataSource);
245
+ var screenShareProvider = new _provider6.FcrUIScreenShareProviderImpl(objectManager);
246
+ objectManager.setObject(_objectManager.FcrUIObjectKeys.P_SCREEN_SHARE_PROVIDER, screenShareProvider);
247
247
  var localVideoRenderProvider = new _rendererProvider.FcrUIMainLocalVideoRenderProviderImpl(deviceProvider, screenShareProvider);
248
248
  objectManager.setObject(_objectManager.FcrUIObjectKeys.P_LOCAL_VIDEO_RENDER_PROVIDER, localVideoRenderProvider);
249
249
  var multiDisplayProvider = new _multiDisplayProvider.FcrUIMultiDisplayProviderImpl({
@@ -13,6 +13,7 @@ require("core-js/modules/es.array.concat.js");
13
13
  require("core-js/modules/es.array.find.js");
14
14
  require("core-js/modules/es.array.for-each.js");
15
15
  require("core-js/modules/es.array.join.js");
16
+ require("core-js/modules/es.array.map.js");
16
17
  require("core-js/modules/es.date.to-json.js");
17
18
  require("core-js/modules/es.json.stringify.js");
18
19
  require("core-js/modules/es.object.keys.js");
@@ -22,6 +23,7 @@ require("core-js/modules/es.string.starts-with.js");
22
23
  require("core-js/modules/esnext.iterator.constructor.js");
23
24
  require("core-js/modules/esnext.iterator.find.js");
24
25
  require("core-js/modules/esnext.iterator.for-each.js");
26
+ require("core-js/modules/esnext.iterator.map.js");
25
27
  require("core-js/modules/esnext.json.parse.js");
26
28
  require("core-js/modules/web.dom-collections.for-each.js");
27
29
  require("core-js/modules/web.timers.js");
@@ -42,6 +44,7 @@ var _exitCodes = require("./exit-codes");
42
44
  var _struct = require("./struct");
43
45
  var _eventManager = require("./event-manager");
44
46
  var _until = require("./until");
47
+ var _hangDetection = require("./hang-detection");
45
48
  var _process$argv$find; // TODO 需要将其改造成 processManager --- stateManager 和 eventManager 的逻辑,保持兼容
46
49
  // processManager --- stateManager 和 eventManager
47
50
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -50,6 +53,7 @@ var mainWindow;
50
53
  var mainWindowReady = false;
51
54
  var userMinimize = false;
52
55
  var mainWindowDisplayState = _struct.DisplayState.HIDE;
56
+ var lastInitParams = '';
53
57
  (0, _main.initialize)();
54
58
  var port = (_process$argv$find = process.argv.find(function (arg) {
55
59
  return arg.startsWith('--port=');
@@ -98,7 +102,10 @@ ipcClient.addObserver({
98
102
  _eventManager.eventManager.startMeetingProcess(roomId);
99
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]));
100
104
  if (mainWindow) {
101
- mainWindow.webContents.send(_type.IPCMessageCMD.LaunchMeeting, message.data);
105
+ mainWindow.webContents.send(_type.IPCMessageCMD.LaunchMeeting, {
106
+ data: message.data,
107
+ lastInitParams: lastInitParams
108
+ });
102
109
  mainWindow.show();
103
110
  mainWindow.focus();
104
111
  mainWindow.moveTop();
@@ -119,7 +126,8 @@ ipcClient.addObserver({
119
126
  }
120
127
  break;
121
128
  case _type.IPCMessageCMD.InitCreator:
122
- (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);
123
131
 
124
132
  // 检查调用顺序:如果是 init -> launch 但 launch 在 PROCESSING 阶段,需要报错
125
133
  if (_eventManager.eventManager.launchState === _struct.FcrUISceneLaunchState.PROCESSING) {
@@ -139,7 +147,10 @@ ipcClient.addObserver({
139
147
  (0, _logger.getLogger)().error("InitCreator: ".concat(e));
140
148
  }
141
149
  if (mainWindow) {
150
+ (0, _logger.getLogger)().info("InitCreator: send InitCreator message to mainWindow");
142
151
  mainWindow.webContents.send(_type.IPCMessageCMD.InitCreator, message.data);
152
+ } else {
153
+ (0, _logger.getLogger)().error("InitCreator: mainWindow is not ready");
143
154
  }
144
155
  break;
145
156
  case _type.IPCMessageCMD.OpenSetting:
@@ -289,6 +300,9 @@ _electron.app.addListener('ready', function () {
289
300
  });
290
301
  mainWindow.addListener('hide', function () {
291
302
  (0, _logger.getLogger)().info("windows_release main window hidden, current launch state: ".concat(_struct.FcrUISceneLaunchState[_eventManager.eventManager.launchState]));
303
+ (0, _logger.getLogger)().info("windows_release the main window is hide, all window State: ".concat(_electron.BrowserWindow.getAllWindows().map(function (windowItem) {
304
+ return "the window id ".concat(windowItem.id, " ").concat(windowItem.getTitle(), " ").concat(windowItem.isVisible());
305
+ })));
292
306
  mainWindowDisplayState = _struct.DisplayState.HIDE;
293
307
  if (userMinimize) {
294
308
  (0, _logger.getLogger)().info('windows_release main window hidden, but user minimize, ignore this event');
@@ -317,6 +331,15 @@ _electron.app.addListener('ready', function () {
317
331
  if (_eventManager.eventManager.launchState !== _struct.FcrUISceneLaunchState.PROCESSING) {
318
332
  return;
319
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
+ }
320
343
  ipcClient.sendMessage({
321
344
  // TODO
322
345
  // cmd: IPCMessageCMD.ExitUiSceneFromMainProcess,
@@ -330,6 +353,8 @@ _electron.app.addListener('ready', function () {
330
353
  });
331
354
  mainWindow.addListener('closed', function () {
332
355
  (0, _logger.getLogger)().info('windows_release main window closed');
356
+ // 清理主窗口的hang detection状态
357
+ hangDetectionManager.handleWindowClosed(mainWindow.id);
333
358
  _electron.app.exit(_exitCodes.AppExitCode.NORMAL_EXIT);
334
359
  });
335
360
  mainWindow.addListener('close', function (e) {
@@ -355,18 +380,12 @@ _electron.app.addListener('ready', function () {
355
380
  });
356
381
  (0, _logger.getLogger)().info('main window close event prevented');
357
382
  setTimeout(function () {
358
- mainWindow.hide();
383
+ if (mainWindow && !mainWindow.isDestroyed()) {
384
+ mainWindow.hide();
385
+ }
359
386
  }, 300);
360
387
  }
361
388
  });
362
- mainWindow.addListener('unresponsive', function () {
363
- (0, _logger.getLogger)().warn("main window unresponsive in bootstrap-sdk");
364
- handleUnresponsive();
365
- });
366
- mainWindow.addListener('responsive', function () {
367
- (0, _logger.getLogger)().warn("main window responsive in bootstrap-sdk");
368
- handleResponsive();
369
- });
370
389
  if (_env.isDev) {
371
390
  mainWindow.webContents.openDevTools({
372
391
  mode: 'detach'
@@ -379,6 +398,22 @@ _electron.app.addListener('ready', function () {
379
398
  return mainWindow;
380
399
  });
381
400
  _electron.app.addListener('browser-window-created', function (_, window) {
401
+ var windowId = window.id;
402
+ (0, _logger.getLogger)().warn("window created: ".concat(windowId, " ,window title: ").concat(window.getTitle()));
403
+ window.webContents.addListener('unresponsive', function () {
404
+ (0, _logger.getLogger)().warn("browser window ".concat(windowId, " unresponsive in bootstrap-sdk"));
405
+ handleUnresponsive(windowId);
406
+ });
407
+ window.webContents.addListener('responsive', function () {
408
+ (0, _logger.getLogger)().warn("browser window ".concat(windowId, " responsive in bootstrap-sdk"));
409
+ handleResponsive(windowId);
410
+ });
411
+
412
+ // 监听窗口关闭事件,清理hang detection状态
413
+ window.addListener('closed', function () {
414
+ (0, _logger.getLogger)().info("browser window ".concat(windowId, " closed, cleaning hang detection state"));
415
+ hangDetectionManager.handleWindowClosed(windowId);
416
+ });
382
417
  (0, _main.enable)(window.webContents);
383
418
  });
384
419
 
@@ -393,31 +428,50 @@ _electron.app.addListener('quit', function (event, exitCode) {
393
428
  (0, _logger.getLogger)().info("app quit event triggered with exit code: ".concat(exitCode));
394
429
  // 清理 EventManager 资源
395
430
  _eventManager.eventManager.dispose();
431
+
432
+ // 清理所有hang detection计时器
433
+ hangDetectionManager.dispose();
396
434
  });
397
- var HANG_DETECTION_TIMEOUT = 60 * 1000; // 1分钟(毫s秒)
398
- var hangDetectionTimer = null;
399
- function handleUnresponsive() {
400
- (0, _logger.getLogger)().warn('Window became unresponsive, starting hang detection timer');
401
- clearHangDetectionTimer();
402
- hangDetectionTimer = setTimeout(function () {
403
- (0, _logger.getLogger)().error('Window has been unresponsive for 1 minute, forcing application exit');
404
- _eventManager.eventManager.onExitedMeeting(_eventManager.eventManager.roomId, _struct.FcrUISceneLaunchEndReason.HANG_DETECTION);
405
- ipcClient.sendMessage({
406
- cmd: _type.IPCMessageCMD.ExitedMeeting,
407
- data: {
408
- roomId: _eventManager.eventManager.roomId,
409
- reason: _until.hangDetectionErrorCode
410
- }
411
- });
412
- }, HANG_DETECTION_TIMEOUT);
413
- }
414
- function handleResponsive() {
415
- (0, _logger.getLogger)().info('Window became responsive again, clearing hang detection timer');
416
- clearHangDetectionTimer();
435
+ var onHangTimeout = function onHangTimeout(windowId) {
436
+ (0, _logger.getLogger)().error("Window ".concat(windowId, " hang timeout, triggering application exit"));
437
+ _eventManager.eventManager.onExitedMeeting(_eventManager.eventManager.roomId, _struct.FcrUISceneLaunchEndReason.HANG_DETECTION);
438
+ ipcClient.sendMessage({
439
+ cmd: _type.IPCMessageCMD.ExitedMeeting,
440
+ data: {
441
+ roomId: _eventManager.eventManager.roomId,
442
+ reason: _until.hangDetectionErrorCode
443
+ }
444
+ });
445
+ };
446
+ var onStateChange = function onStateChange(windowId, isUnresponsive, duration) {
447
+ if (isUnresponsive) {
448
+ (0, _logger.getLogger)().warn("Window ".concat(windowId, " became unresponsive"));
449
+ } else {
450
+ (0, _logger.getLogger)().info("Window ".concat(windowId, " became responsive").concat(duration ? " after ".concat(duration, "ms") : ''));
451
+ }
452
+ };
453
+ var hangDetectionManager = new _hangDetection.MultiWindowHangDetectionManager({
454
+ onHangTimeout: onHangTimeout,
455
+ onStateChange: onStateChange
456
+ }, {
457
+ timeout: _hangDetection.DEFAULT_HANG_DETECTION_TIMEOUT,
458
+ enableVerboseLogging: true
459
+ });
460
+ function handleUnresponsive(windowId) {
461
+ var _mainWindow;
462
+ var targetWindowId = windowId || ((_mainWindow = mainWindow) === null || _mainWindow === void 0 ? void 0 : _mainWindow.id);
463
+ if (!targetWindowId) {
464
+ (0, _logger.getLogger)().warn('Cannot handle unresponsive: no window ID available');
465
+ return;
466
+ }
467
+ hangDetectionManager.handleWindowUnresponsive(targetWindowId);
417
468
  }
418
- function clearHangDetectionTimer() {
419
- if (hangDetectionTimer) {
420
- clearTimeout(hangDetectionTimer);
421
- hangDetectionTimer = null;
469
+ function handleResponsive(windowId) {
470
+ var _mainWindow2;
471
+ var targetWindowId = windowId || ((_mainWindow2 = mainWindow) === null || _mainWindow2 === void 0 ? void 0 : _mainWindow2.id);
472
+ if (!targetWindowId) {
473
+ (0, _logger.getLogger)().warn('Cannot handle responsive: no window ID available');
474
+ return;
422
475
  }
476
+ hangDetectionManager.handleWindowResponsive(targetWindowId);
423
477
  }
@@ -0,0 +1,3 @@
1
+ export { MultiWindowHangDetectionManager } from './manager';
2
+ export type { WindowHangState, HangDetectionConfig, HangDetectionCallbacks } from './types';
3
+ export declare const DEFAULT_HANG_DETECTION_TIMEOUT: number;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.object.define-property.js");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.DEFAULT_HANG_DETECTION_TIMEOUT = void 0;
8
+ Object.defineProperty(exports, "MultiWindowHangDetectionManager", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _manager.MultiWindowHangDetectionManager;
12
+ }
13
+ });
14
+ var _manager = require("./manager");
15
+ var DEFAULT_HANG_DETECTION_TIMEOUT = exports.DEFAULT_HANG_DETECTION_TIMEOUT = 15 * 1000; // 15秒
@@ -0,0 +1,28 @@
1
+ import { WindowHangState, HangDetectionConfig, HangDetectionCallbacks } from './types';
2
+ /**
3
+ * 多窗口 Hang Detection 管理器
4
+ */
5
+ export declare class MultiWindowHangDetectionManager {
6
+ private windowStates;
7
+ private logger;
8
+ private config;
9
+ private callbacks;
10
+ constructor(callbacks: HangDetectionCallbacks, config?: HangDetectionConfig);
11
+ handleWindowUnresponsive(windowId: number): void;
12
+ /**
13
+ * 处理窗口变为responsive
14
+ */
15
+ handleWindowResponsive(windowId: number): void;
16
+ private clearWindowTimer;
17
+ clearAllTimers(): void;
18
+ getUnresponsiveWindowCount(): number;
19
+ getUnresponsiveWindowIds(): number[];
20
+ getWindowHangState(windowId: number): WindowHangState | undefined;
21
+ isWindowUnresponsive(windowId: number): boolean;
22
+ getWindowUnresponsiveDuration(windowId: number): number | null;
23
+ private logCurrentState;
24
+ handleWindowClosed(windowId: number): void;
25
+ updateConfig(config: Partial<HangDetectionConfig>): void;
26
+ getConfig(): Required<HangDetectionConfig>;
27
+ dispose(): void;
28
+ }
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.symbol.js");
4
+ require("core-js/modules/es.symbol.description.js");
5
+ require("core-js/modules/es.symbol.iterator.js");
6
+ require("core-js/modules/es.error.cause.js");
7
+ require("core-js/modules/es.error.to-string.js");
8
+ require("core-js/modules/es.array.filter.js");
9
+ require("core-js/modules/es.array.for-each.js");
10
+ require("core-js/modules/es.array.is-array.js");
11
+ require("core-js/modules/es.array.push.js");
12
+ require("core-js/modules/es.array.slice.js");
13
+ require("core-js/modules/es.date.to-string.js");
14
+ require("core-js/modules/es.function.name.js");
15
+ require("core-js/modules/es.object.define-properties.js");
16
+ require("core-js/modules/es.object.define-property.js");
17
+ require("core-js/modules/es.object.get-own-property-descriptor.js");
18
+ require("core-js/modules/es.object.get-own-property-descriptors.js");
19
+ require("core-js/modules/es.object.keys.js");
20
+ require("core-js/modules/es.regexp.exec.js");
21
+ require("core-js/modules/es.regexp.test.js");
22
+ require("core-js/modules/es.regexp.to-string.js");
23
+ require("core-js/modules/esnext.iterator.constructor.js");
24
+ require("core-js/modules/esnext.iterator.filter.js");
25
+ require("core-js/modules/esnext.iterator.for-each.js");
26
+ require("core-js/modules/web.dom-collections.for-each.js");
27
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
28
+ Object.defineProperty(exports, "__esModule", {
29
+ value: true
30
+ });
31
+ exports.MultiWindowHangDetectionManager = void 0;
32
+ require("core-js/modules/es.array.concat.js");
33
+ require("core-js/modules/es.array.from.js");
34
+ require("core-js/modules/es.array.iterator.js");
35
+ require("core-js/modules/es.array.join.js");
36
+ require("core-js/modules/es.date.now.js");
37
+ require("core-js/modules/es.date.to-json.js");
38
+ require("core-js/modules/es.json.stringify.js");
39
+ require("core-js/modules/es.map.js");
40
+ require("core-js/modules/es.object.to-string.js");
41
+ require("core-js/modules/es.string.iterator.js");
42
+ require("core-js/modules/esnext.map.delete-all.js");
43
+ require("core-js/modules/esnext.map.emplace.js");
44
+ require("core-js/modules/esnext.map.every.js");
45
+ require("core-js/modules/esnext.map.filter.js");
46
+ require("core-js/modules/esnext.map.find.js");
47
+ require("core-js/modules/esnext.map.find-key.js");
48
+ require("core-js/modules/esnext.map.includes.js");
49
+ require("core-js/modules/esnext.map.key-of.js");
50
+ require("core-js/modules/esnext.map.map-keys.js");
51
+ require("core-js/modules/esnext.map.map-values.js");
52
+ require("core-js/modules/esnext.map.merge.js");
53
+ require("core-js/modules/esnext.map.reduce.js");
54
+ require("core-js/modules/esnext.map.some.js");
55
+ require("core-js/modules/esnext.map.update.js");
56
+ require("core-js/modules/web.dom-collections.iterator.js");
57
+ require("core-js/modules/web.timers.js");
58
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
59
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
60
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
61
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
62
+ var _2 = require(".");
63
+ var _logger = require("../logger");
64
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
65
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
66
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
67
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
68
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
69
+ /**
70
+ * 多窗口 Hang Detection 管理器
71
+ */
72
+ var MultiWindowHangDetectionManager = exports.MultiWindowHangDetectionManager = /*#__PURE__*/function () {
73
+ function MultiWindowHangDetectionManager(callbacks, config) {
74
+ var _config$timeout, _config$enableVerbose;
75
+ (0, _classCallCheck2["default"])(this, MultiWindowHangDetectionManager);
76
+ (0, _defineProperty2["default"])(this, "windowStates", new Map());
77
+ (0, _defineProperty2["default"])(this, "logger", (0, _logger.getLogger)());
78
+ this.callbacks = callbacks;
79
+ this.config = {
80
+ timeout: (_config$timeout = config === null || config === void 0 ? void 0 : config.timeout) !== null && _config$timeout !== void 0 ? _config$timeout : _2.DEFAULT_HANG_DETECTION_TIMEOUT,
81
+ enableVerboseLogging: (_config$enableVerbose = config === null || config === void 0 ? void 0 : config.enableVerboseLogging) !== null && _config$enableVerbose !== void 0 ? _config$enableVerbose : true
82
+ };
83
+ }
84
+ return (0, _createClass2["default"])(MultiWindowHangDetectionManager, [{
85
+ key: "handleWindowUnresponsive",
86
+ value: function handleWindowUnresponsive(windowId) {
87
+ var _this = this;
88
+ this.logger.warn("Window ".concat(windowId, " became unresponsive, starting hang detection timer"));
89
+ this.clearWindowTimer(windowId);
90
+ var timer = setTimeout(function () {
91
+ _this.logger.error("Window ".concat(windowId, " has been unresponsive for ").concat(_this.config.timeout, "ms, triggering timeout callback"));
92
+ _this.callbacks.onHangTimeout(windowId);
93
+ }, this.config.timeout);
94
+ this.windowStates.set(windowId, {
95
+ windowId: windowId,
96
+ timer: timer,
97
+ isUnresponsive: true,
98
+ startTime: Date.now()
99
+ });
100
+ if (this.callbacks.onStateChange) {
101
+ this.callbacks.onStateChange(windowId, true);
102
+ }
103
+ if (this.config.enableVerboseLogging) {
104
+ this.logCurrentState();
105
+ }
106
+ }
107
+
108
+ /**
109
+ * 处理窗口变为responsive
110
+ */
111
+ }, {
112
+ key: "handleWindowResponsive",
113
+ value: function handleWindowResponsive(windowId) {
114
+ this.logger.info("Window ".concat(windowId, " became responsive again"));
115
+ var windowState = this.windowStates.get(windowId);
116
+ if (windowState) {
117
+ var duration = Date.now() - windowState.startTime;
118
+ this.logger.info("Window ".concat(windowId, " was unresponsive for ").concat(duration, "ms"));
119
+ this.clearWindowTimer(windowId);
120
+ if (this.callbacks.onStateChange) {
121
+ this.callbacks.onStateChange(windowId, false, duration);
122
+ }
123
+ this.windowStates["delete"](windowId);
124
+ }
125
+ if (this.config.enableVerboseLogging) {
126
+ this.logCurrentState();
127
+ }
128
+ }
129
+ }, {
130
+ key: "clearWindowTimer",
131
+ value: function clearWindowTimer(windowId) {
132
+ var windowState = this.windowStates.get(windowId);
133
+ if (windowState && windowState.timer) {
134
+ clearTimeout(windowState.timer);
135
+ windowState.timer = null;
136
+ }
137
+ }
138
+ }, {
139
+ key: "clearAllTimers",
140
+ value: function clearAllTimers() {
141
+ this.logger.info('Clearing all hang detection timers');
142
+ var _iterator = _createForOfIteratorHelper(this.windowStates),
143
+ _step;
144
+ try {
145
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
146
+ var _step$value = (0, _slicedToArray2["default"])(_step.value, 2),
147
+ _ = _step$value[0],
148
+ windowState = _step$value[1];
149
+ if (windowState.timer) {
150
+ clearTimeout(windowState.timer);
151
+ }
152
+ }
153
+ } catch (err) {
154
+ _iterator.e(err);
155
+ } finally {
156
+ _iterator.f();
157
+ }
158
+ this.windowStates.clear();
159
+ }
160
+ }, {
161
+ key: "getUnresponsiveWindowCount",
162
+ value: function getUnresponsiveWindowCount() {
163
+ return this.windowStates.size;
164
+ }
165
+ }, {
166
+ key: "getUnresponsiveWindowIds",
167
+ value: function getUnresponsiveWindowIds() {
168
+ return Array.from(this.windowStates.keys());
169
+ }
170
+ }, {
171
+ key: "getWindowHangState",
172
+ value: function getWindowHangState(windowId) {
173
+ return this.windowStates.get(windowId);
174
+ }
175
+ }, {
176
+ key: "isWindowUnresponsive",
177
+ value: function isWindowUnresponsive(windowId) {
178
+ return this.windowStates.has(windowId);
179
+ }
180
+ }, {
181
+ key: "getWindowUnresponsiveDuration",
182
+ value: function getWindowUnresponsiveDuration(windowId) {
183
+ var windowState = this.windowStates.get(windowId);
184
+ if (!windowState) {
185
+ return null;
186
+ }
187
+ return Date.now() - windowState.startTime;
188
+ }
189
+ }, {
190
+ key: "logCurrentState",
191
+ value: function logCurrentState() {
192
+ var unresponsiveCount = this.windowStates.size;
193
+ var windowIds = Array.from(this.windowStates.keys());
194
+ this.logger.info("Hang Detection State: ".concat(unresponsiveCount, " unresponsive windows [").concat(windowIds.join(', '), "]"));
195
+ }
196
+ }, {
197
+ key: "handleWindowClosed",
198
+ value: function handleWindowClosed(windowId) {
199
+ this.logger.info("Window ".concat(windowId, " closed, cleaning up hang detection state"));
200
+ var windowState = this.windowStates.get(windowId);
201
+ if (windowState) {
202
+ if (this.callbacks.onStateChange) {
203
+ var duration = Date.now() - windowState.startTime;
204
+ this.callbacks.onStateChange(windowId, false, duration);
205
+ }
206
+ }
207
+ this.clearWindowTimer(windowId);
208
+ this.windowStates["delete"](windowId);
209
+ if (this.config.enableVerboseLogging) {
210
+ this.logCurrentState();
211
+ }
212
+ }
213
+ }, {
214
+ key: "updateConfig",
215
+ value: function updateConfig(config) {
216
+ this.config = _objectSpread(_objectSpread({}, this.config), config);
217
+ this.logger.info("Hang detection config updated: ".concat(JSON.stringify(this.config)));
218
+ }
219
+ }, {
220
+ key: "getConfig",
221
+ value: function getConfig() {
222
+ return _objectSpread({}, this.config);
223
+ }
224
+ }, {
225
+ key: "dispose",
226
+ value: function dispose() {
227
+ this.logger.info('Disposing MultiWindowHangDetectionManager');
228
+ this.clearAllTimers();
229
+ }
230
+ }]);
231
+ }();
@@ -0,0 +1,14 @@
1
+ export interface WindowHangState {
2
+ windowId: number;
3
+ timer: NodeJS.Timeout | null;
4
+ isUnresponsive: boolean;
5
+ startTime: number;
6
+ }
7
+ export interface HangDetectionConfig {
8
+ timeout?: number;
9
+ enableVerboseLogging?: boolean;
10
+ }
11
+ export interface HangDetectionCallbacks {
12
+ onHangTimeout: (windowId: number) => void;
13
+ onStateChange?: (windowId: number, isUnresponsive: boolean, duration?: number) => void;
14
+ }
@@ -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) {
@@ -2,8 +2,7 @@ declare enum ServiceErrorCode {
2
2
  FcrUIScene = 800
3
3
  }
4
4
  declare enum UISceneErrorCode {
5
- Creator = 10,
6
- ProcessManager = 11
5
+ Creator = 10
7
6
  }
8
7
  declare enum DetailErrorCode {
9
8
  unknown = 1,
@@ -20,7 +19,6 @@ declare enum DetailErrorCode {
20
19
  mainWindowHidden = 82,
21
20
  closeWindowBeforeLaunchSuccess = 83,
22
21
  meetingLaunchProcessing = 84,
23
- mainWindowHiddenAfterLaunchSuccess = 85,
24
22
  crashed = 86,
25
23
  hangDetection = 87
26
24
  }
@@ -28,7 +26,6 @@ export declare const generaErrorCode: (serviceCode: ServiceErrorCode, uiSceneCod
28
26
  export declare const windowHideErrorCode: number;
29
27
  export declare const closeWindowBeforeLaunchSuccessErrorCode: number;
30
28
  export declare const meetingLaunchProcessingErrorCode: number;
31
- export declare const mainWindowHiddenOnLaunchSuccessErrorCode: number;
32
29
  export declare const crashedErrorCode: number;
33
30
  export declare const hangDetectionErrorCode: number;
34
31
  export {};