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
package/public/index.html CHANGED
@@ -157,6 +157,7 @@
157
157
  }
158
158
  }
159
159
  };
160
+
160
161
  const setFullScreenFailureComp = (visible, errorMsg) => {
161
162
  setLoading(false);
162
163
  const dom = document.querySelector('#fcr-launch-failure-comp');
@@ -176,154 +177,6 @@
176
177
  }
177
178
  }
178
179
  };
179
-
180
- (async () => {
181
- let creator;
182
- let uiScene;
183
- let sendExitedEventFlag = true;
184
- window.cppSdkHelper.onCreatorInit = (config) => {
185
- if (creator) {
186
- creator.release();
187
- creator = undefined;
188
- }
189
-
190
- creator = new FcrUIScene.FcrUISceneCreator(config);
191
- };
192
-
193
- window.cppSdkHelper.onSettingOpen = () => {
194
- creator.openSetting();
195
- };
196
-
197
- window.cppSdkHelper.onSettingClose = () => {
198
- creator.closeSetting();
199
- };
200
-
201
- window.cppSdkHelper.onSetParameters = (parameters) => {
202
- creator.setParameters(parameters);
203
- };
204
-
205
- window.cppSdkHelper.onRenewUserToken = (token) => {
206
- creator.renewUserToken(token);
207
- };
208
-
209
- window.cppSdkHelper.onLaunchMeeting = (launchOptions) => {
210
- try {
211
- if (uiScene) {
212
- console.log('the previous sequence ui scene exists, exit it');
213
- uiScene.exit();
214
- sendExitedEventFlag = false;
215
- }
216
- } catch (error) {
217
- // 这里可能会有报错,但是不影响后续的流程
218
- console.error(
219
- ' the previous sequence ui scene exists, exit it,but exit has error',
220
- JSON.stringify(error),
221
- );
222
- }
223
- setFullScreenFailureComp(false);
224
- setLoading(true);
225
-
226
- // 定义事件处理函数,以便可以正确移除
227
- const handleConfirmClick = () => {
228
- setFullScreenFailureComp(false);
229
- console.log('windows_release error button clicked');
230
- window.runtime.getCurrentBrowserWindow().hide();
231
- };
232
-
233
- document
234
- .querySelector('#fcr-launch-failure-confirm-btn')
235
- .removeEventListener('click', handleConfirmClick);
236
- document
237
- .querySelector('#fcr-launch-failure-confirm-btn')
238
- .addEventListener('click', handleConfirmClick);
239
-
240
- const { widgets, ...others } = launchOptions;
241
-
242
- if (widgets && widgets instanceof Array) {
243
- widgets.forEach((w) => {
244
- creator.registerWidget(w);
245
- });
246
- }
247
- uiScene = creator.launch(
248
- others,
249
- () => {
250
- console.log('windows_release ui scene closed callback');
251
- window.runtime.getCurrentBrowserWindow().hide();
252
- },
253
- () => {},
254
- () => {},
255
- document.getElementById('root'),
256
- );
257
-
258
- window.cppSdkHelper.exitUiScene = () => {
259
- try {
260
- uiScene.exit();
261
- } catch (error) {
262
- window.cppSdkHelper.exitedMeeting(roomId, FcrUIExitReason.USER_QUIT);
263
- }
264
- };
265
-
266
- uiScene.addObserver({
267
- onLaunchSuccess: () => {
268
- setLoading(false);
269
- sendExitedEventFlag = true;
270
- const roomProvider = uiScene._objectManager.getObject('roomProvider');
271
- if (!roomProvider) {
272
- throw new Error('roomProvider not found in uiScene');
273
- }
274
- const currentRoomControl = roomProvider.currentRoomControl;
275
- if (!currentRoomControl) {
276
- throw new Error('currentRoomControl not found in uiScene');
277
- }
278
- const roomInfo = currentRoomControl.getRoomInfo();
279
-
280
- if (!roomInfo) {
281
- throw new Error('roomInfo not found in uiScene');
282
- }
283
- const { roomName, roomId } = roomInfo;
284
- document.querySelector('title').innerText = roomName;
285
- window.cppSdkHelper.launchSuccess(roomId);
286
- },
287
- onLaunchFailure: (roomId, error) => {
288
- const errorCode = Number(error.code);
289
- let errorMessage = error.message;
290
-
291
- if (errorCode === 732403100 || errorCode === 631735290) {
292
- errorMessage = window._transI18n('fmt_lock_error');
293
- } else if (errorCode === 732403101) {
294
- errorMessage = window._transI18n('fmt_pc_room_not_exist_error');
295
- } else if (errorCode === 732403103) {
296
- errorMessage = window._transI18n('fmt_host_leave_error');
297
- } else if (errorCode === 720410100) {
298
- errorMessage = window._transI18n('fmt_end_error');
299
- } else {
300
- errorMessage = `Error: code=${errorCode}, message=${errorMessage}`;
301
- }
302
-
303
- setFullScreenFailureComp(true, errorMessage);
304
- window.cppSdkHelper.launchFailure(roomId, errorCode);
305
- },
306
-
307
- onExited: (roomId, reason) => {
308
- if (!sendExitedEventFlag) {
309
- return;
310
- }
311
- console.log('the previous sequence ui scene : ui scene exited');
312
- window.cppSdkHelper.exitedMeeting(roomId, reason);
313
- uiScene = null;
314
- setTimeout(() => {
315
- console.log('windows_release ui scene exited callback');
316
- window.runtime.getCurrentBrowserWindow().hide();
317
- });
318
- },
319
- onWidgetClicked: (widgetId) => {
320
- window.cppSdkHelper.onWidgetClicked(widgetId);
321
- },
322
- onUserTokenWillExpire: () => {
323
- window.cppSdkHelper.onUserTokenWillExpire();
324
- },
325
- });
326
- };
327
- })();
328
180
  </script>
181
+ <script src="meeting-manager.js"></script>
329
182
  </html>
@@ -0,0 +1,391 @@
1
+ /**
2
+ * 会议管理器 - 负责处理会议的生命周期管理
3
+ * 包括创建者初始化、会议启动、错误处理等功能
4
+ */
5
+ class MeetingManager {
6
+ constructor() {
7
+ this.creator = null;
8
+ this.uiScene = null;
9
+
10
+ this.sendExitedEventFlag = true;
11
+ this.lastInitParams = '';
12
+
13
+ this.bindGlobalMethods();
14
+ }
15
+
16
+ /**
17
+ * 重新加载创建者
18
+ * @param {string} stringInitParams - 初始化参数字符串
19
+ */
20
+ reloadCreator(stringInitParams) {
21
+ try {
22
+ const config = JSON.parse(stringInitParams);
23
+ this.creator = new FcrUIScene.FcrUISceneCreator(config);
24
+ this.logInfo('Creator reloaded successfully');
25
+ } catch (error) {
26
+ this.logError('Failed to parse init options:', error);
27
+ }
28
+ }
29
+
30
+ /**
31
+ * 创建或初始化创建者
32
+ * @param {Object} config - 配置对象
33
+ */
34
+ createOrInitCreator(config) {
35
+ try {
36
+ // 如果存在旧的创建者,先释放
37
+ if (this.creator) {
38
+ this.logInfo('Creator exists, releasing previous creator');
39
+ this.releasePreviousScene();
40
+ this.creator.release();
41
+ this.creator = undefined;
42
+ }
43
+ } catch (error) {
44
+ this.logError('Failed to release creator:', error);
45
+ }
46
+
47
+ // 创建新的创建者
48
+ this.lastInitParams = JSON.stringify(config);
49
+ this.logInfo(`Creating new creator with config: ${this.lastInitParams}`);
50
+ this.creator = new FcrUIScene.FcrUISceneCreator(config);
51
+ }
52
+
53
+ /**
54
+ * 释放之前的场景
55
+ */
56
+ releasePreviousScene() {
57
+ if (this.uiScene) {
58
+ this.sendExitedEventFlag = false;
59
+ this.uiScene.exit();
60
+ this.uiScene = null;
61
+ this.logInfo('Previous UI scene released');
62
+ }
63
+ }
64
+
65
+ /**
66
+ * 启动会议
67
+ * @param {Object} launchOptions - 启动选项
68
+ */
69
+ launchMeeting(launchOptions) {
70
+ const { data, lastInitParams: initParamsFromMainProcess } = launchOptions;
71
+
72
+ this.logInfo(`Launching meeting with params: ${initParamsFromMainProcess}`);
73
+
74
+ // 检查是否需要重新加载创建者
75
+ if (initParamsFromMainProcess !== this.lastInitParams) {
76
+ this.logInfo('Init params changed, reloading creator');
77
+ this.lastInitParams = initParamsFromMainProcess;
78
+ this.reloadCreator(initParamsFromMainProcess);
79
+ }
80
+
81
+ // 清理之前的场景
82
+ this.cleanupPreviousScene();
83
+
84
+ // 设置UI状态
85
+ this.setFullScreenFailureComp(false);
86
+ this.setLoading(true);
87
+
88
+ // 绑定错误处理事件
89
+ this.bindErrorHandlers();
90
+
91
+ // 注册小部件
92
+ this.registerWidgets(data);
93
+
94
+ // 启动场景
95
+ this.startUIScene(data);
96
+
97
+ // 添加观察者
98
+ this.addSceneObservers();
99
+ }
100
+
101
+ /**
102
+ * 清理之前的场景
103
+ */
104
+ cleanupPreviousScene() {
105
+ try {
106
+ if (this.uiScene) {
107
+ this.logInfo('Cleaning up previous UI scene');
108
+ this.uiScene.exit();
109
+ this.sendExitedEventFlag = false;
110
+ }
111
+ } catch (error) {
112
+ this.logError('Error during scene cleanup:', error);
113
+ }
114
+ }
115
+
116
+ /**
117
+ * 绑定错误处理事件
118
+ */
119
+ bindErrorHandlers() {
120
+ const confirmBtn = document.querySelector('#fcr-launch-failure-confirm-btn');
121
+ if (confirmBtn) {
122
+ confirmBtn.removeEventListener('click', this.handleConfirmClick);
123
+ confirmBtn.addEventListener('click', this.handleConfirmClick.bind(this));
124
+ }
125
+ }
126
+
127
+ /**
128
+ * 注册小部件
129
+ * @param {Object} data - 数据对象
130
+ */
131
+ registerWidgets(data) {
132
+ const { widgets, ...others } = data;
133
+ if (widgets && Array.isArray(widgets)) {
134
+ widgets.forEach(widget => {
135
+ this.creator.registerWidget(widget);
136
+ });
137
+ }
138
+ }
139
+
140
+ /**
141
+ * 启动UI场景
142
+ * @param {Object} data - 数据对象
143
+ */
144
+ startUIScene(data) {
145
+ const { widgets, ...others } = data;
146
+
147
+ this.uiScene = this.creator.launch(
148
+ others,
149
+ () => {
150
+ this.logInfo('UI scene closed callback');
151
+ window.runtime.getCurrentBrowserWindow().hide();
152
+ },
153
+ () => { }, // 空回调
154
+ () => { }, // 空回调
155
+ document.getElementById('root')
156
+ );
157
+ }
158
+
159
+ /**
160
+ * 添加场景观察者
161
+ */
162
+ addSceneObservers() {
163
+ this.uiScene.addObserver({
164
+ onLaunchSuccess: () => this.handleLaunchSuccess(),
165
+ onLaunchFailure: (roomId, error) => this.handleLaunchFailure(roomId, error),
166
+ onExited: (roomId, reason) => this.handleSceneExited(roomId, reason),
167
+ onWidgetClicked: (widgetId) => this.handleWidgetClicked(widgetId),
168
+ onUserTokenWillExpire: () => this.handleUserTokenWillExpire()
169
+ });
170
+ }
171
+
172
+ /**
173
+ * 处理启动成功
174
+ */
175
+ handleLaunchSuccess() {
176
+ this.setLoading(false);
177
+ this.sendExitedEventFlag = true;
178
+
179
+ try {
180
+ const roomProvider = this.uiScene._objectManager.getObject('roomProvider');
181
+ if (!roomProvider) {
182
+ throw new Error('roomProvider not found in uiScene');
183
+ }
184
+
185
+ const currentRoomControl = roomProvider.currentRoomControl;
186
+ if (!currentRoomControl) {
187
+ throw new Error('currentRoomControl not found in uiScene');
188
+ }
189
+
190
+ const roomInfo = currentRoomControl.getRoomInfo();
191
+ if (!roomInfo) {
192
+ throw new Error('roomInfo not found in uiScene');
193
+ }
194
+
195
+ const { roomName, roomId } = roomInfo;
196
+ document.querySelector('title').innerText = roomName;
197
+ window.cppSdkHelper.launchSuccess(roomId);
198
+ } catch (error) {
199
+ this.logError('Error in launch success handler:', error);
200
+ }
201
+ }
202
+
203
+ /**
204
+ * 处理启动失败
205
+ * @param {string} roomId - 房间ID
206
+ * @param {Object} error - 错误对象
207
+ */
208
+ handleLaunchFailure(roomId, error) {
209
+ const errorCode = Number(error.code);
210
+ let errorMessage = this.getErrorMessage(errorCode, error.message);
211
+
212
+ this.setFullScreenFailureComp(true, errorMessage);
213
+ window.cppSdkHelper.launchFailure(roomId, errorCode);
214
+ }
215
+
216
+ /**
217
+ * 获取错误消息
218
+ * @param {number} errorCode - 错误代码
219
+ * @param {string} defaultMessage - 默认错误消息
220
+ * @returns {string} 错误消息
221
+ */
222
+ getErrorMessage(errorCode, defaultMessage) {
223
+ const errorCodeMap = {
224
+ 732403100: 'fmt_lock_error',
225
+ 631735290: 'fmt_lock_error',
226
+ 732403101: 'fmt_pc_room_not_exist_error',
227
+ 732403103: 'fmt_host_leave_error',
228
+ 720410100: 'fmt_end_error'
229
+ };
230
+
231
+ const errorKey = errorCodeMap[errorCode];
232
+ if (errorKey) {
233
+ return window._transI18n(errorKey);
234
+ }
235
+
236
+ return `Error: code=${errorCode}, message=${defaultMessage}`;
237
+ }
238
+
239
+ /**
240
+ * 处理场景退出
241
+ * @param {string} roomId - 房间ID
242
+ * @param {string} reason - 退出原因
243
+ */
244
+ handleSceneExited(roomId, reason) {
245
+ if (!this.sendExitedEventFlag) {
246
+ return;
247
+ }
248
+
249
+ this.logInfo('UI scene exited');
250
+ window.cppSdkHelper.exitedMeeting(roomId, reason);
251
+ this.uiScene = null;
252
+
253
+ setTimeout(() => {
254
+ this.logInfo('UI scene exited callback');
255
+ window.runtime.getCurrentBrowserWindow().hide();
256
+ });
257
+ }
258
+
259
+ /**
260
+ * 处理小部件点击
261
+ * @param {string} widgetId - 小部件ID
262
+ */
263
+ handleWidgetClicked(widgetId) {
264
+ window.cppSdkHelper.onWidgetClicked(widgetId);
265
+ }
266
+
267
+ /**
268
+ * 处理用户令牌即将过期
269
+ */
270
+ handleUserTokenWillExpire() {
271
+ window.cppSdkHelper.onUserTokenWillExpire();
272
+ }
273
+
274
+ /**
275
+ * 退出UI场景
276
+ */
277
+ exitUiScene() {
278
+ try {
279
+ if (!this.uiScene) {
280
+ return;
281
+ }
282
+ this.uiScene.exit();
283
+ this.lastInitParams = '';
284
+ } catch (error) {
285
+ window.cppSdkHelper.exitedMeeting(roomId, FcrUIExitReason.USER_QUIT);
286
+ }
287
+ }
288
+
289
+ /**
290
+ * 处理确认按钮点击
291
+ */
292
+ handleConfirmClick() {
293
+ this.setFullScreenFailureComp(false);
294
+ this.logInfo('Error confirmation button clicked');
295
+ window.runtime.getCurrentBrowserWindow().hide();
296
+ }
297
+
298
+ /**
299
+ * 绑定全局方法
300
+ */
301
+ bindGlobalMethods() {
302
+ window.cppSdkHelper.onCreatorInit = (config) => {
303
+ window.__AgoraMutex.dispatch(() => {
304
+ this.createOrInitCreator(config);
305
+ });
306
+ };
307
+
308
+ window.cppSdkHelper.onSettingOpen = () => {
309
+ this.creator.openSetting();
310
+ };
311
+
312
+ window.cppSdkHelper.onSettingClose = () => {
313
+ this.creator.closeSetting();
314
+ };
315
+
316
+ window.cppSdkHelper.onSetParameters = (parameters) => {
317
+ this.creator.setParameters(parameters);
318
+ };
319
+
320
+ window.cppSdkHelper.onRenewUserToken = (token) => {
321
+ this.creator.renewUserToken(token);
322
+ };
323
+
324
+ window.cppSdkHelper.exitUiScene = () => {
325
+ window.__AgoraMutex.dispatch(() => {
326
+ this.exitUiScene();
327
+ });
328
+ };
329
+
330
+ window.cppSdkHelper.onLaunchMeeting = (launchOptions) => {
331
+ window.__AgoraMutex.dispatch(() => {
332
+ this.launchMeeting(launchOptions);
333
+ })
334
+ };
335
+ }
336
+
337
+ /**
338
+ * 设置加载状态
339
+ * @param {boolean} visible - 是否显示加载状态
340
+ */
341
+ setLoading(visible) {
342
+ const dom = document.querySelector('#launch-loading');
343
+ if (dom) {
344
+ dom.style.display = visible ? 'flex' : 'none';
345
+ }
346
+ }
347
+
348
+ /**
349
+ * 设置全屏失败组件
350
+ * @param {boolean} visible - 是否显示
351
+ * @param {string} errorMsg - 错误消息
352
+ */
353
+ setFullScreenFailureComp(visible, errorMsg) {
354
+ this.setLoading(false);
355
+ const dom = document.querySelector('#fcr-launch-failure-comp');
356
+ const btnTextDom = document.querySelector('#fcr-launch-failure-btn-text');
357
+
358
+ if (dom) {
359
+ if (visible) {
360
+ dom.style.display = 'flex';
361
+ btnTextDom.innerText = window.$$agora_language === 'zh' ? '我已知悉' : 'I know';
362
+ if (errorMsg) {
363
+ const msgDom = document.querySelector('#fcr-launch-failure-error-info');
364
+ msgDom.innerText = errorMsg;
365
+ }
366
+ } else {
367
+ dom.style.display = 'none';
368
+ }
369
+ }
370
+ }
371
+
372
+ /**
373
+ * 记录信息日志
374
+ * @param {string} message - 日志消息
375
+ */
376
+ logInfo(message) {
377
+ window.__AgoraLogger.info(`MEETING MANAGER: ${message}`);
378
+ }
379
+
380
+ /**
381
+ * 记录错误日志
382
+ * @param {string} message - 错误消息
383
+ * @param {Error} error - 错误对象
384
+ */
385
+ logError(message, error) {
386
+ window.__AgoraLogger.error(`MEETING MANAGER: ${message}`, error);
387
+ }
388
+ }
389
+
390
+ // 初始化会议管理器
391
+ const meetingManager = new MeetingManager();
Binary file
Binary file
Binary file
@@ -1,16 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>com.apple.security.cs.allow-jit</key>
6
- <true/>
7
- <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
8
- <true/>
9
- <key>com.apple.security.cs.allow-dyld-environment-variables</key>
10
- <true/>
11
- <key>com.apple.security.device.audio-input</key>
12
- <true/>
13
- <key>com.apple.security.device.camera</key>
14
- <true/>
15
- </dict>
16
- </plist>
package/lib/creator.d.ts DELETED
@@ -1,36 +0,0 @@
1
- import { FcrUISceneCancelCallback, FcrUISceneConfig, FcrUISceneCreatorConfig, FcrUISceneFailureCallback, FcrUISceneSuccessCallback, FcrUISettingConfig, FcrUIWebWidgetConfig } from './type';
2
- import { FcrUIDefaultScene } from './ui-scene';
3
- import SettingStore from './modules/setting/store';
4
- export interface FcrObservableSettingStore {
5
- value: SettingStore | null;
6
- }
7
- export declare class FcrUISceneCreator {
8
- private _config;
9
- accessor observableSettingStore: FcrObservableSettingStore;
10
- protected logger: import("agora-foundation/lib/logger").Logger;
11
- private _userSettingStorageProvider;
12
- private _registeredWidgetConfigs;
13
- private _released;
14
- private _scene;
15
- private _microphoneKeepRecording;
16
- private _sceneObserver;
17
- constructor(_config: FcrUISceneCreatorConfig);
18
- private _initProviders;
19
- launch(config: FcrUISceneConfig, onCancel: FcrUISceneCancelCallback, onSuccess: FcrUISceneSuccessCallback, onFailure: FcrUISceneFailureCallback, dom: HTMLElement): FcrUIDefaultScene;
20
- getSettingConfig(): FcrUISettingConfig;
21
- registerWidget(config: FcrUIWebWidgetConfig): void;
22
- unregisterWidget(widgetId: string): void;
23
- renewUserToken(token: string): void;
24
- setParameters(parameters: Record<string, unknown>): void;
25
- getVersion(): string;
26
- getDependencyVersions(): Record<string, string>;
27
- openSetting(): void;
28
- closeSetting(): void;
29
- private _releaseProviders;
30
- release(): void;
31
- private _resetScene;
32
- private _precheckState;
33
- private _filterKeepRecordingValueFromParameters;
34
- private _setKeepRecordingValueFromParameters;
35
- private _createSettingStore;
36
- }