@webex/plugin-meetings 3.0.0-beta.18 → 3.0.0-beta.180
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.
- package/README.md +45 -7
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +114 -14
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +841 -19
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/errors/webex-errors.js +3 -2
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/config.js +3 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.js +172 -30
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +300 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +352 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +302 -41
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +43 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +1 -1
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +39 -134
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +29 -90
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -493
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +76 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2610 -2465
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +229 -124
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +189 -146
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +478 -414
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +48 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +171 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +20 -5
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +22 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +350 -65
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +88 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +98 -2
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +86 -5
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +316 -233
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +3 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -468
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +238 -49
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +49 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +48 -30
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +173 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +4 -2
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/reachability/index.js +72 -27
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +12 -5
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.js +2 -2
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +18 -18
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +196 -155
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -1
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +21 -29
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +110 -89
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +93 -36
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -93
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +326 -311
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +90 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1016 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +315 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
- package/dist/types/meeting/index.d.ts +1467 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +270 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +77 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +62 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +365 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +159 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +208 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +36 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/package.json +26 -23
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +44 -14
- package/src/breakouts/breakout.ts +87 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +710 -10
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/webex-errors.ts +6 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/config.ts +2 -7
- package/src/constants.ts +157 -21
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +286 -0
- package/src/index.ts +39 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +318 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +316 -38
- package/src/locus-info/mediaSharesUtils.ts +48 -0
- package/src/locus-info/parser.ts +1 -1
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +77 -142
- package/src/media/properties.ts +49 -90
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +151 -3
- package/src/meeting/index.ts +1919 -2002
- package/src/meeting/locusMediaRequest.ts +309 -0
- package/src/meeting/muteState.ts +228 -132
- package/src/meeting/request.ts +96 -65
- package/src/meeting/util.ts +464 -396
- package/src/meeting-info/index.ts +54 -8
- package/src/meeting-info/meeting-info-v2.ts +148 -14
- package/src/meeting-info/utilv2.ts +13 -3
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +386 -84
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +103 -4
- package/src/member/index.ts +49 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +103 -0
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +107 -6
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +319 -240
- package/src/metrics/constants.ts +2 -4
- package/src/metrics/index.ts +1 -490
- package/src/multistream/mediaRequestManager.ts +289 -79
- package/src/multistream/receiveSlot.ts +55 -18
- package/src/multistream/receiveSlotManager.ts +42 -20
- package/src/multistream/remoteMedia.ts +28 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +113 -32
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/index.ts +62 -15
- package/src/reachability/request.ts +10 -5
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +3 -3
- package/src/reconnection-manager/index.ts +68 -43
- package/src/recording-controller/index.ts +20 -2
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +21 -30
- package/src/roap/request.ts +101 -95
- package/src/roap/turnDiscovery.ts +47 -25
- package/src/statsAnalyzer/global.ts +1 -94
- package/src/statsAnalyzer/index.ts +376 -386
- package/src/statsAnalyzer/mqaUtil.ts +100 -99
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +336 -259
- package/test/integration/spec/space-meeting.js +77 -4
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +142 -24
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1545 -48
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +518 -0
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +570 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +707 -22
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +129 -23
- package/test/unit/spec/meeting/in-meeting-actions.ts +75 -3
- package/test/unit/spec/meeting/index.js +2728 -1397
- package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
- package/test/unit/spec/meeting/muteState.js +370 -208
- package/test/unit/spec/meeting/request.js +338 -43
- package/test/unit/spec/meeting/utils.js +378 -55
- package/test/unit/spec/meeting-info/index.js +181 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +14 -0
- package/test/unit/spec/meetings/index.js +846 -121
- package/test/unit/spec/meetings/utils.js +206 -2
- package/test/unit/spec/member/index.js +58 -4
- package/test/unit/spec/member/util.js +415 -33
- package/test/unit/spec/members/index.js +320 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +184 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
- package/test/unit/spec/multistream/receiveSlot.ts +72 -13
- package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/index.ts +125 -8
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +59 -6
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +26 -51
- package/test/unit/spec/roap/request.ts +196 -85
- package/test/unit/spec/roap/turnDiscovery.ts +30 -7
- package/test/unit/spec/stats-analyzer/index.js +92 -41
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +6 -3
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -299
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -110
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/src/index.js +0 -15
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -495
- package/src/multistream/multistreamMedia.ts +0 -97
- package/test/unit/spec/meeting/effectsState.js +0 -285
package/src/locus-info/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {isEqual} from 'lodash';
|
|
1
|
+
import {isEqual, assignWith, cloneDeep} from 'lodash';
|
|
2
2
|
|
|
3
3
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
4
|
import EventsScope from '../common/events/events-scope';
|
|
@@ -17,8 +17,6 @@ import {
|
|
|
17
17
|
CALL_REMOVED_REASON,
|
|
18
18
|
RECORDING_STATE,
|
|
19
19
|
} from '../constants';
|
|
20
|
-
import Metrics from '../metrics';
|
|
21
|
-
import {eventType} from '../metrics/config';
|
|
22
20
|
import InfoUtils from './infoUtils';
|
|
23
21
|
import FullState from './fullState';
|
|
24
22
|
import SelfUtils from './selfUtils';
|
|
@@ -59,11 +57,19 @@ export default class LocusInfo extends EventsScope {
|
|
|
59
57
|
fullState: any;
|
|
60
58
|
host: any;
|
|
61
59
|
info: any;
|
|
60
|
+
roles: any;
|
|
62
61
|
mediaShares: any;
|
|
63
62
|
replace: any;
|
|
64
63
|
url: any;
|
|
65
64
|
services: any;
|
|
66
|
-
|
|
65
|
+
mainSessionLocusCache: any;
|
|
66
|
+
/**
|
|
67
|
+
* Constructor
|
|
68
|
+
* @param {boolean} updateMeeting true if the meeting should be updated
|
|
69
|
+
* @param {object} webex
|
|
70
|
+
* @param {string} meetingId
|
|
71
|
+
* @returns {undefined}
|
|
72
|
+
*/
|
|
67
73
|
constructor(updateMeeting, webex, meetingId) {
|
|
68
74
|
super();
|
|
69
75
|
this.parsedLocus = {
|
|
@@ -99,7 +105,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
99
105
|
meeting.meetingRequest
|
|
100
106
|
.getFullLocus({
|
|
101
107
|
desync: true,
|
|
102
|
-
locusUrl: meeting.locusUrl,
|
|
108
|
+
locusUrl: locus.url ? locus.url : meeting.locusUrl,
|
|
103
109
|
})
|
|
104
110
|
.then((res) => {
|
|
105
111
|
meeting.locusInfo.onFullLocus(res.body);
|
|
@@ -172,12 +178,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
172
178
|
*/
|
|
173
179
|
this.deltaParticipants = [];
|
|
174
180
|
|
|
181
|
+
this.updateLocusCache(locus);
|
|
175
182
|
// above section only updates the locusInfo object
|
|
176
183
|
// The below section makes sure it updates the locusInfo as well as updates the meeting object
|
|
177
184
|
this.updateParticipants(locus.participants);
|
|
178
185
|
// For 1:1 space meeting the conversation Url does not exist in locus.conversation
|
|
179
186
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
180
|
-
this.updateControls(locus.controls);
|
|
187
|
+
this.updateControls(locus.controls, locus.self);
|
|
181
188
|
this.updateLocusUrl(locus.url);
|
|
182
189
|
this.updateFullState(locus.fullState);
|
|
183
190
|
this.updateMeetingInfo(locus.info);
|
|
@@ -195,6 +202,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
195
202
|
* @memberof LocusInfo
|
|
196
203
|
*/
|
|
197
204
|
initialSetup(locus: object) {
|
|
205
|
+
this.updateLocusCache(locus);
|
|
198
206
|
this.onFullLocus(locus);
|
|
199
207
|
|
|
200
208
|
// Change it to true after it receives it first locus object
|
|
@@ -210,7 +218,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
210
218
|
parse(meeting: any, data: any) {
|
|
211
219
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
212
220
|
const {eventType} = data;
|
|
213
|
-
|
|
221
|
+
const locus = this.getTheLocusToUpdate(data.locus);
|
|
214
222
|
LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);
|
|
215
223
|
|
|
216
224
|
switch (eventType) {
|
|
@@ -228,16 +236,16 @@ export default class LocusInfo extends EventsScope {
|
|
|
228
236
|
case LOCUSEVENT.PARTICIPANT_DECLINED:
|
|
229
237
|
case LOCUSEVENT.FLOOR_GRANTED:
|
|
230
238
|
case LOCUSEVENT.FLOOR_RELEASED:
|
|
231
|
-
this.onFullLocus(
|
|
239
|
+
this.onFullLocus(locus, eventType);
|
|
232
240
|
break;
|
|
233
241
|
case LOCUSEVENT.DIFFERENCE:
|
|
234
|
-
this.handleLocusDelta(
|
|
242
|
+
this.handleLocusDelta(locus, meeting);
|
|
235
243
|
break;
|
|
236
244
|
|
|
237
245
|
default:
|
|
238
246
|
// Why will there be a event with no eventType ????
|
|
239
247
|
// we may not need this, we can get full locus
|
|
240
|
-
this.handleLocusDelta(
|
|
248
|
+
this.handleLocusDelta(locus, meeting);
|
|
241
249
|
}
|
|
242
250
|
}
|
|
243
251
|
|
|
@@ -269,8 +277,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
269
277
|
this.updateParticipantDeltas(locus.participants);
|
|
270
278
|
this.scheduledMeeting = locus.meeting || null;
|
|
271
279
|
this.participants = locus.participants;
|
|
280
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
272
281
|
this.updateLocusInfo(locus);
|
|
273
|
-
this.updateParticipants(locus.participants);
|
|
282
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
274
283
|
this.isMeetingActive();
|
|
275
284
|
this.handleOneOnOneEvent(eventType);
|
|
276
285
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
@@ -329,8 +338,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
329
338
|
* @memberof LocusInfo
|
|
330
339
|
*/
|
|
331
340
|
onDeltaLocus(locus: any) {
|
|
341
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
332
342
|
this.updateLocusInfo(locus);
|
|
333
|
-
this.updateParticipants(locus.participants);
|
|
343
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
334
344
|
this.isMeetingActive();
|
|
335
345
|
}
|
|
336
346
|
|
|
@@ -347,7 +357,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
347
357
|
return;
|
|
348
358
|
}
|
|
349
359
|
|
|
350
|
-
this.updateControls(locus.controls);
|
|
360
|
+
this.updateControls(locus.controls, locus.self);
|
|
351
361
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
352
362
|
this.updateCreated(locus.created);
|
|
353
363
|
this.updateFullState(locus.fullState);
|
|
@@ -418,10 +428,15 @@ export default class LocusInfo extends EventsScope {
|
|
|
418
428
|
LoggerProxy.logger.warn(
|
|
419
429
|
'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'
|
|
420
430
|
);
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
431
|
+
|
|
432
|
+
// @ts-ignore
|
|
433
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
434
|
+
name: 'client.call.remote-ended',
|
|
435
|
+
options: {
|
|
436
|
+
meetingId: this.meetingId,
|
|
437
|
+
},
|
|
424
438
|
});
|
|
439
|
+
|
|
425
440
|
this.emitScoped(
|
|
426
441
|
{
|
|
427
442
|
file: 'locus-info',
|
|
@@ -440,9 +455,12 @@ export default class LocusInfo extends EventsScope {
|
|
|
440
455
|
this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||
|
|
441
456
|
this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)
|
|
442
457
|
) {
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
458
|
+
// @ts-ignore
|
|
459
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
460
|
+
name: 'client.call.remote-ended',
|
|
461
|
+
options: {
|
|
462
|
+
meetingId: this.meetingId,
|
|
463
|
+
},
|
|
446
464
|
});
|
|
447
465
|
this.emitScoped(
|
|
448
466
|
{
|
|
@@ -464,10 +482,14 @@ export default class LocusInfo extends EventsScope {
|
|
|
464
482
|
partner.state === MEETING_STATE.STATES.NOTIFIED ||
|
|
465
483
|
partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media
|
|
466
484
|
) {
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
485
|
+
// @ts-ignore
|
|
486
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
487
|
+
name: 'client.call.remote-ended',
|
|
488
|
+
options: {
|
|
489
|
+
meetingId: this.meetingId,
|
|
490
|
+
},
|
|
470
491
|
});
|
|
492
|
+
|
|
471
493
|
this.emitScoped(
|
|
472
494
|
{
|
|
473
495
|
file: 'locus-info',
|
|
@@ -490,9 +512,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
490
512
|
LoggerProxy.logger.warn(
|
|
491
513
|
'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'
|
|
492
514
|
);
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
515
|
+
|
|
516
|
+
// @ts-ignore
|
|
517
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
518
|
+
name: 'client.call.remote-ended',
|
|
519
|
+
options: {
|
|
520
|
+
meetingId: this.meetingId,
|
|
521
|
+
},
|
|
496
522
|
});
|
|
497
523
|
this.emitScoped(
|
|
498
524
|
{
|
|
@@ -507,9 +533,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
507
533
|
);
|
|
508
534
|
} else if (this.fullState && this.fullState.removed) {
|
|
509
535
|
// user has been dropped from a meeting
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
536
|
+
|
|
537
|
+
// @ts-ignore
|
|
538
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
539
|
+
name: 'client.call.remote-ended',
|
|
540
|
+
options: {
|
|
541
|
+
meetingId: this.meetingId,
|
|
542
|
+
},
|
|
513
543
|
});
|
|
514
544
|
this.emitScoped(
|
|
515
545
|
{
|
|
@@ -646,13 +676,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
646
676
|
}
|
|
647
677
|
|
|
648
678
|
/**
|
|
649
|
-
*
|
|
679
|
+
* update meeting's members
|
|
650
680
|
* @param {Object} participants new participants object
|
|
651
|
-
* @param {
|
|
681
|
+
* @param {Boolean} isReplace is replace the whole members
|
|
652
682
|
* @returns {Array} updatedParticipants
|
|
653
683
|
* @memberof LocusInfo
|
|
654
684
|
*/
|
|
655
|
-
updateParticipants(participants: object) {
|
|
685
|
+
updateParticipants(participants: object, isReplace?: boolean) {
|
|
656
686
|
this.emitScoped(
|
|
657
687
|
{
|
|
658
688
|
file: 'locus-info',
|
|
@@ -665,16 +695,18 @@ export default class LocusInfo extends EventsScope {
|
|
|
665
695
|
selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
|
|
666
696
|
selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
|
|
667
697
|
hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
|
|
698
|
+
isReplace,
|
|
668
699
|
}
|
|
669
700
|
);
|
|
670
701
|
}
|
|
671
702
|
|
|
672
703
|
/**
|
|
673
704
|
* @param {Object} controls
|
|
705
|
+
* @param {Object} self
|
|
674
706
|
* @returns {undefined}
|
|
675
707
|
* @memberof LocusInfo
|
|
676
708
|
*/
|
|
677
|
-
updateControls(controls: object) {
|
|
709
|
+
updateControls(controls: object, self: object) {
|
|
678
710
|
if (controls && !isEqual(this.controls, controls)) {
|
|
679
711
|
this.parsedLocus.controls = ControlsUtils.parse(controls);
|
|
680
712
|
const {
|
|
@@ -685,10 +717,76 @@ export default class LocusInfo extends EventsScope {
|
|
|
685
717
|
hasTranscribeChanged,
|
|
686
718
|
hasEntryExitToneChanged,
|
|
687
719
|
hasBreakoutChanged,
|
|
720
|
+
hasVideoEnabledChanged,
|
|
721
|
+
hasMuteOnEntryChanged,
|
|
722
|
+
hasShareControlChanged,
|
|
723
|
+
hasDisallowUnmuteChanged,
|
|
724
|
+
hasReactionsChanged,
|
|
725
|
+
hasReactionDisplayNamesChanged,
|
|
726
|
+
hasViewTheParticipantListChanged,
|
|
727
|
+
hasRaiseHandChanged,
|
|
728
|
+
hasVideoChanged,
|
|
729
|
+
hasInterpretationChanged,
|
|
688
730
|
},
|
|
689
731
|
current,
|
|
690
732
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
691
733
|
|
|
734
|
+
if (hasMuteOnEntryChanged) {
|
|
735
|
+
this.emitScoped(
|
|
736
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
737
|
+
LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,
|
|
738
|
+
{state: current.muteOnEntry}
|
|
739
|
+
);
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
if (hasShareControlChanged) {
|
|
743
|
+
this.emitScoped(
|
|
744
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
745
|
+
LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,
|
|
746
|
+
{state: current.shareControl}
|
|
747
|
+
);
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
if (hasDisallowUnmuteChanged) {
|
|
751
|
+
this.emitScoped(
|
|
752
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
753
|
+
LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,
|
|
754
|
+
{state: current.disallowUnmute}
|
|
755
|
+
);
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
|
|
759
|
+
this.emitScoped(
|
|
760
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
761
|
+
LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,
|
|
762
|
+
{state: current.reactions}
|
|
763
|
+
);
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
if (hasViewTheParticipantListChanged) {
|
|
767
|
+
this.emitScoped(
|
|
768
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
769
|
+
LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,
|
|
770
|
+
{state: current.viewTheParticipantList}
|
|
771
|
+
);
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
if (hasRaiseHandChanged) {
|
|
775
|
+
this.emitScoped(
|
|
776
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
777
|
+
LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,
|
|
778
|
+
{state: current.raiseHand}
|
|
779
|
+
);
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
if (hasVideoChanged) {
|
|
783
|
+
this.emitScoped(
|
|
784
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
785
|
+
LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,
|
|
786
|
+
{state: current.video}
|
|
787
|
+
);
|
|
788
|
+
}
|
|
789
|
+
|
|
692
790
|
if (hasRecordingChanged || hasRecordingPausedChanged) {
|
|
693
791
|
let state = null;
|
|
694
792
|
|
|
@@ -750,7 +848,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
750
848
|
|
|
751
849
|
if (hasBreakoutChanged) {
|
|
752
850
|
const {breakout} = current;
|
|
753
|
-
|
|
851
|
+
breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(
|
|
852
|
+
self,
|
|
853
|
+
this.webex.internal.device.url
|
|
854
|
+
);
|
|
754
855
|
this.emitScoped(
|
|
755
856
|
{
|
|
756
857
|
file: 'locus-info',
|
|
@@ -763,9 +864,25 @@ export default class LocusInfo extends EventsScope {
|
|
|
763
864
|
);
|
|
764
865
|
}
|
|
765
866
|
|
|
867
|
+
if (hasInterpretationChanged) {
|
|
868
|
+
const {interpretation} = current;
|
|
869
|
+
this.emitScoped(
|
|
870
|
+
{
|
|
871
|
+
file: 'locus-info',
|
|
872
|
+
function: 'updateControls',
|
|
873
|
+
},
|
|
874
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,
|
|
875
|
+
{
|
|
876
|
+
interpretation,
|
|
877
|
+
}
|
|
878
|
+
);
|
|
879
|
+
}
|
|
880
|
+
|
|
766
881
|
if (hasEntryExitToneChanged) {
|
|
767
882
|
const {entryExitTone} = current;
|
|
768
883
|
|
|
884
|
+
this.updateMeeting({entryExitTone});
|
|
885
|
+
|
|
769
886
|
this.emitScoped(
|
|
770
887
|
{
|
|
771
888
|
file: 'locus-info',
|
|
@@ -776,8 +893,26 @@ export default class LocusInfo extends EventsScope {
|
|
|
776
893
|
entryExitTone,
|
|
777
894
|
}
|
|
778
895
|
);
|
|
896
|
+
}
|
|
779
897
|
|
|
780
|
-
|
|
898
|
+
// videoEnabled is handled differently than other controls,
|
|
899
|
+
// to fit with audio mute status logic
|
|
900
|
+
if (hasVideoEnabledChanged) {
|
|
901
|
+
const {videoEnabled} = current;
|
|
902
|
+
|
|
903
|
+
this.updateMeeting({unmuteVideoAllowed: videoEnabled});
|
|
904
|
+
|
|
905
|
+
this.emitScoped(
|
|
906
|
+
{
|
|
907
|
+
file: 'locus-info',
|
|
908
|
+
function: 'updateControls',
|
|
909
|
+
},
|
|
910
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
911
|
+
{
|
|
912
|
+
// muted: not part of locus.controls
|
|
913
|
+
unmuteAllowed: videoEnabled,
|
|
914
|
+
}
|
|
915
|
+
);
|
|
781
916
|
}
|
|
782
917
|
|
|
783
918
|
this.controls = controls;
|
|
@@ -918,8 +1053,11 @@ export default class LocusInfo extends EventsScope {
|
|
|
918
1053
|
* @memberof LocusInfo
|
|
919
1054
|
*/
|
|
920
1055
|
updateMeetingInfo(info: object, self?: object) {
|
|
921
|
-
|
|
922
|
-
|
|
1056
|
+
const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
|
|
1057
|
+
if (
|
|
1058
|
+
(info && !isEqual(this.info, info)) ||
|
|
1059
|
+
(roles.length && !isEqual(this.roles, roles) && info)
|
|
1060
|
+
) {
|
|
923
1061
|
const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
|
|
924
1062
|
const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
|
|
925
1063
|
|
|
@@ -958,6 +1096,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
958
1096
|
// Parses the info and adds necessary values
|
|
959
1097
|
this.updateMeeting(parsedInfo.current);
|
|
960
1098
|
}
|
|
1099
|
+
this.roles = roles;
|
|
961
1100
|
}
|
|
962
1101
|
|
|
963
1102
|
/**
|
|
@@ -998,6 +1137,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
998
1137
|
const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);
|
|
999
1138
|
|
|
1000
1139
|
this.updateMeeting(parsedMediaShares.current);
|
|
1140
|
+
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
1141
|
+
this.mediaShares = mediaShares;
|
|
1001
1142
|
this.emitScoped(
|
|
1002
1143
|
{
|
|
1003
1144
|
file: 'locus-info',
|
|
@@ -1009,8 +1150,6 @@ export default class LocusInfo extends EventsScope {
|
|
|
1009
1150
|
previous: parsedMediaShares.previous,
|
|
1010
1151
|
}
|
|
1011
1152
|
);
|
|
1012
|
-
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
1013
|
-
this.mediaShares = mediaShares;
|
|
1014
1153
|
}
|
|
1015
1154
|
}
|
|
1016
1155
|
|
|
@@ -1099,6 +1238,20 @@ export default class LocusInfo extends EventsScope {
|
|
|
1099
1238
|
);
|
|
1100
1239
|
}
|
|
1101
1240
|
|
|
1241
|
+
if (parsedSelves.updates.interpretationChanged) {
|
|
1242
|
+
this.emitScoped(
|
|
1243
|
+
{
|
|
1244
|
+
file: 'locus-info',
|
|
1245
|
+
function: 'updateSelf',
|
|
1246
|
+
},
|
|
1247
|
+
LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,
|
|
1248
|
+
{
|
|
1249
|
+
interpretation: parsedSelves.current.interpretation,
|
|
1250
|
+
selfParticipantId: parsedSelves.current.selfId,
|
|
1251
|
+
}
|
|
1252
|
+
);
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1102
1255
|
if (parsedSelves.updates.isMediaInactiveOrReleased) {
|
|
1103
1256
|
this.emitScoped(
|
|
1104
1257
|
{
|
|
@@ -1120,6 +1273,31 @@ export default class LocusInfo extends EventsScope {
|
|
|
1120
1273
|
self
|
|
1121
1274
|
);
|
|
1122
1275
|
}
|
|
1276
|
+
|
|
1277
|
+
if (parsedSelves.updates.isRolesChanged) {
|
|
1278
|
+
this.emitScoped(
|
|
1279
|
+
{
|
|
1280
|
+
file: 'locus-info',
|
|
1281
|
+
function: 'updateSelf',
|
|
1282
|
+
},
|
|
1283
|
+
LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,
|
|
1284
|
+
{oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}
|
|
1285
|
+
);
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
if (parsedSelves.updates.isVideoMutedByOthersChanged) {
|
|
1289
|
+
this.emitScoped(
|
|
1290
|
+
{
|
|
1291
|
+
file: 'locus-info',
|
|
1292
|
+
function: 'updateSelf',
|
|
1293
|
+
},
|
|
1294
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
1295
|
+
{
|
|
1296
|
+
muted: parsedSelves.current.remoteVideoMuted,
|
|
1297
|
+
// unmuteAllowed: not part of .self
|
|
1298
|
+
}
|
|
1299
|
+
);
|
|
1300
|
+
}
|
|
1123
1301
|
if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
|
|
1124
1302
|
this.emitScoped(
|
|
1125
1303
|
{
|
|
@@ -1334,4 +1512,104 @@ export default class LocusInfo extends EventsScope {
|
|
|
1334
1512
|
this.identities = identities;
|
|
1335
1513
|
}
|
|
1336
1514
|
}
|
|
1515
|
+
|
|
1516
|
+
/**
|
|
1517
|
+
* check the locus is main session's one or not, if is main session's, update main session cache
|
|
1518
|
+
* @param {Object} locus
|
|
1519
|
+
* @returns {undefined}
|
|
1520
|
+
* @memberof LocusInfo
|
|
1521
|
+
*/
|
|
1522
|
+
updateLocusCache(locus: any) {
|
|
1523
|
+
const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);
|
|
1524
|
+
if (isMainSessionDTO) {
|
|
1525
|
+
this.updateMainSessionLocusCache(locus);
|
|
1526
|
+
}
|
|
1527
|
+
}
|
|
1528
|
+
|
|
1529
|
+
/**
|
|
1530
|
+
* if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
|
|
1531
|
+
* if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
|
|
1532
|
+
* @param {Object} newLocus
|
|
1533
|
+
* @returns {Object}
|
|
1534
|
+
* @memberof LocusInfo
|
|
1535
|
+
*/
|
|
1536
|
+
getTheLocusToUpdate(newLocus: any) {
|
|
1537
|
+
const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus?.controls);
|
|
1538
|
+
if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
|
|
1539
|
+
return cloneDeep(this.mainSessionLocusCache);
|
|
1540
|
+
}
|
|
1541
|
+
if (switchStatus.isJoinToBreakout) {
|
|
1542
|
+
this.emitScoped(
|
|
1543
|
+
{
|
|
1544
|
+
file: 'locus-info',
|
|
1545
|
+
function: 'updateControls',
|
|
1546
|
+
},
|
|
1547
|
+
LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,
|
|
1548
|
+
{
|
|
1549
|
+
mainLocusUrl: this.url,
|
|
1550
|
+
}
|
|
1551
|
+
);
|
|
1552
|
+
}
|
|
1553
|
+
|
|
1554
|
+
return newLocus;
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1557
|
+
/**
|
|
1558
|
+
* merge participants by participant id
|
|
1559
|
+
* @param {Array} participants
|
|
1560
|
+
* @param {Array} sourceParticipants
|
|
1561
|
+
* @returns {Array} merged participants
|
|
1562
|
+
* @memberof LocusInfo
|
|
1563
|
+
*/
|
|
1564
|
+
// eslint-disable-next-line class-methods-use-this
|
|
1565
|
+
mergeParticipants(participants, sourceParticipants) {
|
|
1566
|
+
if (!sourceParticipants || !sourceParticipants.length) return participants;
|
|
1567
|
+
if (!participants || !participants.length) {
|
|
1568
|
+
return sourceParticipants;
|
|
1569
|
+
}
|
|
1570
|
+
sourceParticipants.forEach((participant) => {
|
|
1571
|
+
const existIndex = participants.findIndex((p) => p.id === participant.id);
|
|
1572
|
+
if (existIndex > -1) {
|
|
1573
|
+
participants.splice(existIndex, 1, participant);
|
|
1574
|
+
} else {
|
|
1575
|
+
participants.push(participant);
|
|
1576
|
+
}
|
|
1577
|
+
});
|
|
1578
|
+
|
|
1579
|
+
return participants;
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
/**
|
|
1583
|
+
* need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
|
|
1584
|
+
* @param {Object} mainLocus
|
|
1585
|
+
* @returns {undefined}
|
|
1586
|
+
* @memberof LocusInfo
|
|
1587
|
+
*/
|
|
1588
|
+
updateMainSessionLocusCache(mainLocus: any) {
|
|
1589
|
+
if (!mainLocus) {
|
|
1590
|
+
return;
|
|
1591
|
+
}
|
|
1592
|
+
const locusClone = cloneDeep(mainLocus);
|
|
1593
|
+
if (this.mainSessionLocusCache) {
|
|
1594
|
+
// shallow merge and do special merge for participants
|
|
1595
|
+
assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {
|
|
1596
|
+
if (key === 'participants') {
|
|
1597
|
+
return this.mergeParticipants(objValue, srcValue);
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
return srcValue || objValue;
|
|
1601
|
+
});
|
|
1602
|
+
} else {
|
|
1603
|
+
this.mainSessionLocusCache = locusClone;
|
|
1604
|
+
}
|
|
1605
|
+
}
|
|
1606
|
+
|
|
1607
|
+
/**
|
|
1608
|
+
* clear main session cache
|
|
1609
|
+
* @returns {undefined}
|
|
1610
|
+
* @memberof LocusInfo
|
|
1611
|
+
*/
|
|
1612
|
+
clearMainSessionLocusCache() {
|
|
1613
|
+
this.mainSessionLocusCache = null;
|
|
1614
|
+
}
|
|
1337
1615
|
}
|
|
@@ -13,6 +13,9 @@ MediaSharesUtils.parse = (mediaShares: object) => {
|
|
|
13
13
|
content: {
|
|
14
14
|
beneficiaryId: MediaSharesUtils.getContentBeneficiaryId(mediaShares),
|
|
15
15
|
disposition: MediaSharesUtils.getContentDisposition(mediaShares),
|
|
16
|
+
annotation: MediaSharesUtils.getContentAnnotation(mediaShares),
|
|
17
|
+
url: MediaSharesUtils.getContentUrl(mediaShares),
|
|
18
|
+
shareInstanceId: MediaSharesUtils.getShareInstanceId(mediaShares),
|
|
16
19
|
},
|
|
17
20
|
whiteboard: {
|
|
18
21
|
beneficiaryId: MediaSharesUtils.getWhiteboardBeneficiaryId(mediaShares),
|
|
@@ -140,6 +143,51 @@ MediaSharesUtils.getContentBeneficiaryId = (mediaShares: object) => {
|
|
|
140
143
|
return contentFloor.beneficiary.id;
|
|
141
144
|
};
|
|
142
145
|
|
|
146
|
+
/**
|
|
147
|
+
* get live annotation is sharing from media shares (content)
|
|
148
|
+
* @param {Object} mediaShares
|
|
149
|
+
* @returns {Object}
|
|
150
|
+
*/
|
|
151
|
+
MediaSharesUtils.getContentAnnotation = (mediaShares: object) => {
|
|
152
|
+
const extractContent = MediaSharesUtils.extractContent(mediaShares);
|
|
153
|
+
|
|
154
|
+
if (!extractContent || !extractContent.annotation) {
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return extractContent.annotation;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* get url is sharing from media shares (content)
|
|
163
|
+
* @param {Object} mediaShares
|
|
164
|
+
* @returns {Object}
|
|
165
|
+
*/
|
|
166
|
+
MediaSharesUtils.getContentUrl = (mediaShares: object) => {
|
|
167
|
+
const extractContent = MediaSharesUtils.extractContent(mediaShares);
|
|
168
|
+
|
|
169
|
+
if (!extractContent || !extractContent.url) {
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return extractContent.url;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* get shareInstanceId is sharing from media shares (content)
|
|
178
|
+
* @param {Object} mediaShares
|
|
179
|
+
* @returns {Object}
|
|
180
|
+
*/
|
|
181
|
+
MediaSharesUtils.getShareInstanceId = (mediaShares: object) => {
|
|
182
|
+
const extractContent = MediaSharesUtils.extractContent(mediaShares);
|
|
183
|
+
|
|
184
|
+
if (!extractContent || !extractContent.floor || !extractContent.floor.shareInstanceId) {
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return extractContent.floor.shareInstanceId;
|
|
189
|
+
};
|
|
190
|
+
|
|
143
191
|
/**
|
|
144
192
|
* get who is sharing from media shares (whiteboard)
|
|
145
193
|
* @param {Object} mediaShares
|
package/src/locus-info/parser.ts
CHANGED
|
@@ -478,7 +478,7 @@ export default class Parser {
|
|
|
478
478
|
* @param {Types~Locus} locus Locus delta
|
|
479
479
|
* @returns {undefined}
|
|
480
480
|
*/
|
|
481
|
-
// eslint-disable-next-line no-unused-vars
|
|
481
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
482
482
|
onDeltaAction(action: string, locus) {}
|
|
483
483
|
|
|
484
484
|
/**
|