@webex/plugin-meetings 3.0.0-beta.21 → 3.0.0-beta.211
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/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +3 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.js +179 -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 +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +106 -1
- 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 +366 -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 +359 -64
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.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 +219 -63
- 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 +48 -135
- 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 +90 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2770 -2547
- 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 +199 -193
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +532 -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 +357 -66
- 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 +121 -25
- 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 +52 -34
- 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/reconnection-manager/index.js +196 -155
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- 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/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- 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 +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1020 -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 +322 -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 +271 -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 +163 -0
- package/dist/types/meeting/index.d.ts +1482 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +72 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +257 -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 +79 -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 +367 -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 +207 -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/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +46 -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 +23 -20
- 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/common/queue.ts +22 -8
- package/src/config.ts +2 -7
- package/src/constants.ts +165 -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 +300 -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 +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +383 -61
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +48 -0
- package/src/locus-info/parser.ts +224 -39
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +87 -140
- package/src/media/properties.ts +49 -90
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +179 -3
- package/src/meeting/index.ts +2099 -2083
- package/src/meeting/locusMediaRequest.ts +311 -0
- package/src/meeting/muteState.ts +228 -132
- package/src/meeting/request.ts +105 -115
- package/src/meeting/util.ts +511 -397
- 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 +392 -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 +127 -25
- 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 +46 -24
- package/src/multistream/remoteMedia.ts +27 -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/reconnection-manager/index.ts +68 -43
- package/src/recording-controller/index.ts +20 -3
- 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/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- 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/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -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 +589 -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 +1169 -36
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +62 -22
- 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 +138 -28
- package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
- package/test/unit/spec/meeting/index.js +3573 -1663
- package/test/unit/spec/meeting/locusMediaRequest.ts +438 -0
- package/test/unit/spec/meeting/muteState.js +370 -208
- package/test/unit/spec/meeting/request.js +339 -44
- package/test/unit/spec/meeting/utils.js +456 -53
- 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 +867 -125
- 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 +479 -35
- package/test/unit/spec/members/index.js +319 -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/rtcMetrics/index.ts +60 -0
- 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 -16
- 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
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Simultaneous Interpretation
|
|
2
|
+
|
|
3
|
+
Simultaneous Interpretation (SI) feature provides support for interpretation of in-meeting audio. The host will specify the target languages at schedule time and assign language pairs to the desired interpreters. Each interpreter will use their client to indicate the language spoken at any point in time. For example, Alice might be translating between English and French. When an English speaker is talking in the meeting, Alice will use her client to indicate she is speaking French. When a French speaker is talking, Alice will indicate that she is speaking English. The host’s client will display the status of each interpreter including the current interpretation direction.
|
|
4
|
+
|
|
5
|
+
### Structure
|
|
6
|
+
SI languages are available in the siLanguages collection. List the languages which current meeting support to do simultaneous interpretation. Can subscribe the language's voice channel which you want to listen from the list.
|
|
7
|
+
|
|
8
|
+
```javascript
|
|
9
|
+
interpretation.siLanguages;
|
|
10
|
+
```
|
|
11
|
+
### Attendee functionality
|
|
12
|
+
```javascript
|
|
13
|
+
//subscribe this si language's voice channel
|
|
14
|
+
siLanguage.subscribe();
|
|
15
|
+
|
|
16
|
+
//unsubscribe this si language's voice channel
|
|
17
|
+
siLanguage.unsubscribe();
|
|
18
|
+
```
|
|
19
|
+
### Host functionality
|
|
20
|
+
The following are methods available to the host of a meeting.
|
|
21
|
+
|
|
22
|
+
```javascript
|
|
23
|
+
//get the support list of interpretation languages. only host is allowed to call it
|
|
24
|
+
interpretation.getSupportLanguages();
|
|
25
|
+
|
|
26
|
+
//get the interpreters list of the meeting
|
|
27
|
+
interpretation.getInterpreters();
|
|
28
|
+
|
|
29
|
+
//update the interpreters list, input parameter is an array of interpreters
|
|
30
|
+
interpretation.updateInterpreters([{
|
|
31
|
+
sourceLanguage : 'fr-FR',
|
|
32
|
+
targetLanguage : 'zh-ZH',
|
|
33
|
+
usingResource : {
|
|
34
|
+
id : 'a96747e2-1fc6-41d3-9ac7-512dd9478b6e'
|
|
35
|
+
},
|
|
36
|
+
order : 0
|
|
37
|
+
},]);
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Interpreter functionality
|
|
41
|
+
|
|
42
|
+
The following are methods available to the interpreters of a meeting.
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
//Change direction of interpretation for an interpreter participant
|
|
46
|
+
interpretation.changeDirection();
|
|
47
|
+
|
|
48
|
+
//Handoff between interpreters, input paramerter participantId is the target to handoff
|
|
49
|
+
interpretation.handoffInterpreter(participantId);
|
|
50
|
+
|
|
51
|
+
//in-active interpreter request to handoff to self
|
|
52
|
+
interpretation.requestHandoff();
|
|
53
|
+
|
|
54
|
+
//accept the request of handoff, input paramter url is from last approval event which generate by server side
|
|
55
|
+
interpretation.acceptRequest(url);
|
|
56
|
+
|
|
57
|
+
//decline the request of handoff, input paramter url is from last approval event which generate by server side
|
|
58
|
+
interpretation.declineRequest(url);
|
|
59
|
+
|
|
60
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import AmpCollection from 'ampersand-collection';
|
|
6
|
+
|
|
7
|
+
import {MEETINGS} from '../constants';
|
|
8
|
+
|
|
9
|
+
import SILanguage from './siLanguage';
|
|
10
|
+
|
|
11
|
+
const SILanguageCollection = AmpCollection.extend({
|
|
12
|
+
model: SILanguage,
|
|
13
|
+
|
|
14
|
+
namespace: MEETINGS,
|
|
15
|
+
|
|
16
|
+
mainIndex: 'languageName',
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
export default SILanguageCollection;
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
import {WebexPlugin} from '@webex/webex-core';
|
|
5
|
+
import LoggerProxy from '../common/logs/logger-proxy';
|
|
6
|
+
import {HTTP_VERBS, INTERPRETATION, MEETINGS} from '../constants';
|
|
7
|
+
|
|
8
|
+
import SILanguageCollection from './collection';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @class SimultaneousInterpretation
|
|
12
|
+
*/
|
|
13
|
+
const SimultaneousInterpretation = WebexPlugin.extend({
|
|
14
|
+
namespace: MEETINGS,
|
|
15
|
+
collections: {
|
|
16
|
+
siLanguages: SILanguageCollection,
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
props: {
|
|
20
|
+
locusUrl: 'string', // appears current meeting's locus url
|
|
21
|
+
approvalUrl: 'string', // appears current meeting's approval url for handoff between interpreters
|
|
22
|
+
originalLanguage: 'string', // appears current meeting's original language
|
|
23
|
+
sourceLanguage: 'string', // appears self interpreter's source language
|
|
24
|
+
targetLanguage: 'string', // appears self interpreter's target language
|
|
25
|
+
receiveLanguage: 'string', // appears self's receive language
|
|
26
|
+
order: 'number', // appears the order of self as interpreter
|
|
27
|
+
isActive: 'boolean', // appears self is interpreter and is active
|
|
28
|
+
selfParticipantId: 'string', // appears the self participant id
|
|
29
|
+
canManageInterpreters: 'boolean', // appears the ability to manage interpreters
|
|
30
|
+
supportLanguages: 'array', // appears the support languages
|
|
31
|
+
meetingSIEnabled: 'boolean', // appears the meeting support SI feature
|
|
32
|
+
hostSIEnabled: 'boolean', // appears the meeting host/interpreter feature of SI enabled
|
|
33
|
+
selfIsInterpreter: 'boolean', // current user is interpreter or not
|
|
34
|
+
},
|
|
35
|
+
derived: {
|
|
36
|
+
shouldQuerySupportLanguages: {
|
|
37
|
+
cache: false,
|
|
38
|
+
deps: ['canManageInterpreters', 'hostSIEnabled'],
|
|
39
|
+
/**
|
|
40
|
+
* Returns should query support languages or not
|
|
41
|
+
* @returns {boolean}
|
|
42
|
+
*/
|
|
43
|
+
fn() {
|
|
44
|
+
return !!(this.canManageInterpreters && this.hostSIEnabled);
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
/**
|
|
49
|
+
* initialize for interpretation
|
|
50
|
+
* @returns {void}
|
|
51
|
+
*/
|
|
52
|
+
initialize() {
|
|
53
|
+
this.listenTo(this, 'change:shouldQuerySupportLanguages', () => {
|
|
54
|
+
if (this.canManageInterpreters && !this.supportLanguages) {
|
|
55
|
+
this.querySupportLanguages();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
this.listenToHandoffRequests();
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Calls this to clean up listeners
|
|
63
|
+
* @returns {void}
|
|
64
|
+
*/
|
|
65
|
+
cleanUp() {
|
|
66
|
+
this.stopListening();
|
|
67
|
+
},
|
|
68
|
+
/**
|
|
69
|
+
* Update the current locus url of the meeting
|
|
70
|
+
* @param {string} locusUrl // locus url
|
|
71
|
+
* @returns {void}
|
|
72
|
+
*/
|
|
73
|
+
locusUrlUpdate(locusUrl) {
|
|
74
|
+
this.set('locusUrl', locusUrl);
|
|
75
|
+
},
|
|
76
|
+
/**
|
|
77
|
+
* Update the approval url for handoff
|
|
78
|
+
* @param {string} approvalUrl // approval url
|
|
79
|
+
* @returns {void}
|
|
80
|
+
*/
|
|
81
|
+
approvalUrlUpdate(approvalUrl) {
|
|
82
|
+
this.set('approvalUrl', approvalUrl);
|
|
83
|
+
},
|
|
84
|
+
/**
|
|
85
|
+
* Update whether self has capability to manage interpreters (only host can manage it)
|
|
86
|
+
* @param {boolean} canManageInterpreters
|
|
87
|
+
* @returns {void}
|
|
88
|
+
*/
|
|
89
|
+
updateCanManageInterpreters(canManageInterpreters) {
|
|
90
|
+
this.set('canManageInterpreters', canManageInterpreters);
|
|
91
|
+
},
|
|
92
|
+
/**
|
|
93
|
+
* Update whether the meeting's host si is enabled or not
|
|
94
|
+
* @param {boolean} hostSIEnabled
|
|
95
|
+
* @returns {void}
|
|
96
|
+
*/
|
|
97
|
+
updateHostSIEnabled(hostSIEnabled) {
|
|
98
|
+
this.set('hostSIEnabled', hostSIEnabled);
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Update whether the meeting support SI feature or not from meeting info
|
|
103
|
+
* @param {boolean} meetingSIEnabled
|
|
104
|
+
* @param {boolean} selfIsInterpreter
|
|
105
|
+
* @returns {void}
|
|
106
|
+
*/
|
|
107
|
+
updateMeetingSIEnabled(meetingSIEnabled: boolean, selfIsInterpreter): void {
|
|
108
|
+
this.set('meetingSIEnabled', meetingSIEnabled);
|
|
109
|
+
this.set('selfIsInterpreter', selfIsInterpreter);
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Update the interpretation languages channels which user can choose to subscribe
|
|
114
|
+
* @param {Object} interpretation
|
|
115
|
+
* @returns {void}
|
|
116
|
+
*/
|
|
117
|
+
updateInterpretation(interpretation) {
|
|
118
|
+
this.siLanguages.set(interpretation?.siLanguages || []);
|
|
119
|
+
},
|
|
120
|
+
/**
|
|
121
|
+
* Update self's interpretation information (self is interpreter)
|
|
122
|
+
* @param {Object} interpretation
|
|
123
|
+
* @param {String} selfParticipantId
|
|
124
|
+
* @returns {void}
|
|
125
|
+
*/
|
|
126
|
+
updateSelfInterpretation({interpretation, selfParticipantId}) {
|
|
127
|
+
const {originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage} =
|
|
128
|
+
interpretation || {};
|
|
129
|
+
this.set({originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage});
|
|
130
|
+
this.set('selfParticipantId', selfParticipantId);
|
|
131
|
+
},
|
|
132
|
+
/**
|
|
133
|
+
* query interpretation languages
|
|
134
|
+
* @returns {Promise}
|
|
135
|
+
*/
|
|
136
|
+
querySupportLanguages() {
|
|
137
|
+
return this.request({
|
|
138
|
+
method: HTTP_VERBS.GET,
|
|
139
|
+
uri: `${this.locusUrl}/languages/interpretation`,
|
|
140
|
+
})
|
|
141
|
+
.then((result) => {
|
|
142
|
+
this.set('supportLanguages', result.body?.siLanguages);
|
|
143
|
+
this.trigger(INTERPRETATION.EVENTS.SUPPORT_LANGUAGES_UPDATE);
|
|
144
|
+
})
|
|
145
|
+
.catch((error) => {
|
|
146
|
+
LoggerProxy.logger.error('Meeting:interpretation#querySupportLanguages failed', error);
|
|
147
|
+
throw error;
|
|
148
|
+
});
|
|
149
|
+
},
|
|
150
|
+
/**
|
|
151
|
+
* get interpreters of the meeting
|
|
152
|
+
* @returns {Promise}
|
|
153
|
+
*/
|
|
154
|
+
getInterpreters() {
|
|
155
|
+
return this.request({
|
|
156
|
+
method: HTTP_VERBS.GET,
|
|
157
|
+
uri: `${this.locusUrl}/interpretation/interpreters`,
|
|
158
|
+
}).catch((error) => {
|
|
159
|
+
LoggerProxy.logger.error('Meeting:interpretation#getInterpreters failed', error);
|
|
160
|
+
throw error;
|
|
161
|
+
});
|
|
162
|
+
},
|
|
163
|
+
/**
|
|
164
|
+
* update interpreters of the meeting
|
|
165
|
+
* @param {Array} interpreters
|
|
166
|
+
* @returns {Promise}
|
|
167
|
+
*/
|
|
168
|
+
updateInterpreters(interpreters) {
|
|
169
|
+
return this.request({
|
|
170
|
+
method: HTTP_VERBS.PATCH,
|
|
171
|
+
uri: `${this.locusUrl}/controls`,
|
|
172
|
+
body: {
|
|
173
|
+
interpretation: {
|
|
174
|
+
interpreters,
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
}).catch((error) => {
|
|
178
|
+
LoggerProxy.logger.error('Meeting:interpretation#updateInterpreters failed', error);
|
|
179
|
+
throw error;
|
|
180
|
+
});
|
|
181
|
+
},
|
|
182
|
+
/**
|
|
183
|
+
* Change direction of interpretation for an interpreter participant
|
|
184
|
+
* @returns {Promise}
|
|
185
|
+
*/
|
|
186
|
+
changeDirection() {
|
|
187
|
+
if (!this.sourceLanguage || !this.targetLanguage) {
|
|
188
|
+
return Promise.reject(new Error('Missing sourceLanguage or targetLanguage'));
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (!this.selfParticipantId) {
|
|
192
|
+
return Promise.reject(new Error('Missing self participant id'));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return this.request({
|
|
196
|
+
method: HTTP_VERBS.PATCH,
|
|
197
|
+
uri: `${this.locusUrl}/participant/${this.selfParticipantId}/controls`,
|
|
198
|
+
body: {
|
|
199
|
+
interpretation: {
|
|
200
|
+
sourceLanguage: this.targetLanguage,
|
|
201
|
+
targetLanguage: this.sourceLanguage,
|
|
202
|
+
isActive: this.isActive,
|
|
203
|
+
order: this.order,
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
}).catch((error) => {
|
|
207
|
+
LoggerProxy.logger.error('Meeting:interpretation#changeDirection failed', error);
|
|
208
|
+
throw error;
|
|
209
|
+
});
|
|
210
|
+
},
|
|
211
|
+
/**
|
|
212
|
+
* Sets up a listener for handoff requests from mercury
|
|
213
|
+
* @returns {void}
|
|
214
|
+
*/
|
|
215
|
+
listenToHandoffRequests() {
|
|
216
|
+
this.listenTo(this.webex.internal.mercury, 'event:locus.approval_request', (event) => {
|
|
217
|
+
if (event?.data?.approval?.resourceType === INTERPRETATION.RESOURCE_TYPE) {
|
|
218
|
+
const {receivers, initiator, actionType, url} = event.data.approval;
|
|
219
|
+
const receiverId = receivers?.[0]?.participantId;
|
|
220
|
+
const isReceiver = !!receiverId && receiverId === this.selfParticipantId;
|
|
221
|
+
const senderId = initiator?.participantId;
|
|
222
|
+
const isSender = !!senderId && senderId === this.selfParticipantId;
|
|
223
|
+
if (!isReceiver && !isSender) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
this.trigger(INTERPRETATION.EVENTS.HANDOFF_REQUESTS_ARRIVED, {
|
|
227
|
+
actionType,
|
|
228
|
+
isReceiver,
|
|
229
|
+
isSender,
|
|
230
|
+
senderId,
|
|
231
|
+
receiverId,
|
|
232
|
+
url,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
},
|
|
237
|
+
/**
|
|
238
|
+
* handoff the active interpreter role to another interpreter in same group, only the interpreter is allowed to call this api
|
|
239
|
+
* @param {string} participantId the participant id you want to hand off
|
|
240
|
+
* @returns {Promise}
|
|
241
|
+
*/
|
|
242
|
+
handoffInterpreter(participantId) {
|
|
243
|
+
if (!participantId) {
|
|
244
|
+
return Promise.reject(new Error('Missing target participant id'));
|
|
245
|
+
}
|
|
246
|
+
if (!this.approvalUrl) {
|
|
247
|
+
return Promise.reject(new Error('Missing approval url'));
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
return this.request({
|
|
251
|
+
method: HTTP_VERBS.POST,
|
|
252
|
+
uri: this.approvalUrl,
|
|
253
|
+
body: {
|
|
254
|
+
actionType: INTERPRETATION.ACTION_TYPE.OFFERED,
|
|
255
|
+
resourceType: INTERPRETATION.RESOURCE_TYPE,
|
|
256
|
+
receivers: [
|
|
257
|
+
{
|
|
258
|
+
participantId,
|
|
259
|
+
},
|
|
260
|
+
],
|
|
261
|
+
},
|
|
262
|
+
}).catch((error) => {
|
|
263
|
+
LoggerProxy.logger.error('Meeting:interpretation#handoffInterpreter failed', error);
|
|
264
|
+
throw error;
|
|
265
|
+
});
|
|
266
|
+
},
|
|
267
|
+
/**
|
|
268
|
+
* the in-active interpreter request to hand off the active role to self
|
|
269
|
+
* @returns {Promise}
|
|
270
|
+
*/
|
|
271
|
+
requestHandoff() {
|
|
272
|
+
if (!this.approvalUrl) {
|
|
273
|
+
return Promise.reject(new Error('Missing approval url'));
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return this.request({
|
|
277
|
+
method: HTTP_VERBS.POST,
|
|
278
|
+
uri: this.approvalUrl,
|
|
279
|
+
body: {
|
|
280
|
+
actionType: INTERPRETATION.ACTION_TYPE.REQUESTED,
|
|
281
|
+
resourceType: INTERPRETATION.RESOURCE_TYPE,
|
|
282
|
+
},
|
|
283
|
+
}).catch((error) => {
|
|
284
|
+
LoggerProxy.logger.error('Meeting:interpretation#requestHandoff failed', error);
|
|
285
|
+
throw error;
|
|
286
|
+
});
|
|
287
|
+
},
|
|
288
|
+
/**
|
|
289
|
+
* accept the request of handoff
|
|
290
|
+
* @param {String} url the url get from last approval event
|
|
291
|
+
* @returns {Promise}
|
|
292
|
+
*/
|
|
293
|
+
acceptRequest(url) {
|
|
294
|
+
if (!url) {
|
|
295
|
+
return Promise.reject(new Error('Missing the url to accept'));
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return this.request({
|
|
299
|
+
method: HTTP_VERBS.PUT,
|
|
300
|
+
uri: url,
|
|
301
|
+
body: {
|
|
302
|
+
actionType: INTERPRETATION.ACTION_TYPE.ACCEPTED,
|
|
303
|
+
},
|
|
304
|
+
}).catch((error) => {
|
|
305
|
+
LoggerProxy.logger.error('Meeting:interpretation#acceptRequest failed', error);
|
|
306
|
+
throw error;
|
|
307
|
+
});
|
|
308
|
+
},
|
|
309
|
+
/**
|
|
310
|
+
* decline the request of handoff
|
|
311
|
+
* @param {String} url the url get from last approval event
|
|
312
|
+
* @returns {Promise}
|
|
313
|
+
*/
|
|
314
|
+
declineRequest(url) {
|
|
315
|
+
if (!url) {
|
|
316
|
+
return Promise.reject(new Error('Missing the url to decline'));
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
return this.request({
|
|
320
|
+
method: HTTP_VERBS.PUT,
|
|
321
|
+
uri: url,
|
|
322
|
+
body: {
|
|
323
|
+
actionType: INTERPRETATION.ACTION_TYPE.DECLINED,
|
|
324
|
+
},
|
|
325
|
+
}).catch((error) => {
|
|
326
|
+
LoggerProxy.logger.error('Meeting:interpretation#declineRequest failed', error);
|
|
327
|
+
throw error;
|
|
328
|
+
});
|
|
329
|
+
},
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
export default SimultaneousInterpretation;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {WebexPlugin} from '@webex/webex-core';
|
|
6
|
+
import {MEETINGS} from '../constants';
|
|
7
|
+
|
|
8
|
+
const SILanguage = WebexPlugin.extend({
|
|
9
|
+
idAttribute: 'languageName',
|
|
10
|
+
|
|
11
|
+
namespace: MEETINGS,
|
|
12
|
+
props: {
|
|
13
|
+
languageCode: 'number',
|
|
14
|
+
languageName: 'string',
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export default SILanguage;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {isEqual} from 'lodash';
|
|
2
|
+
import {BREAKOUTS} from '../constants';
|
|
2
3
|
|
|
3
4
|
const ControlsUtils: any = {};
|
|
4
5
|
|
|
@@ -48,6 +49,41 @@ ControlsUtils.parse = (controls: any) => {
|
|
|
48
49
|
: null;
|
|
49
50
|
}
|
|
50
51
|
|
|
52
|
+
if (controls && controls.video) {
|
|
53
|
+
parsedControls.videoEnabled = controls.video.enabled;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (controls?.muteOnEntry) {
|
|
57
|
+
parsedControls.muteOnEntry = {enabled: controls.muteOnEntry.enabled};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (controls?.shareControl) {
|
|
61
|
+
parsedControls.shareControl = {control: controls.shareControl.control};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (controls?.disallowUnmute) {
|
|
65
|
+
parsedControls.disallowUnmute = {enabled: controls.disallowUnmute.enabled};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (controls?.reactions) {
|
|
69
|
+
parsedControls.reactions = {
|
|
70
|
+
enabled: controls.reactions.enabled,
|
|
71
|
+
showDisplayNameWithReactions: controls.reactions.showDisplayNameWithReactions,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (controls?.viewTheParticipantList) {
|
|
76
|
+
parsedControls.viewTheParticipantList = {enabled: controls.viewTheParticipantList.enabled};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (controls?.raiseHand) {
|
|
80
|
+
parsedControls.raiseHand = {enabled: controls.raiseHand.enabled};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (controls?.video) {
|
|
84
|
+
parsedControls.video = {enabled: controls.video.enabled};
|
|
85
|
+
}
|
|
86
|
+
|
|
51
87
|
return parsedControls;
|
|
52
88
|
};
|
|
53
89
|
|
|
@@ -65,6 +101,26 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
|
65
101
|
previous,
|
|
66
102
|
current,
|
|
67
103
|
updates: {
|
|
104
|
+
hasMuteOnEntryChanged: current?.muteOnEntry?.enabled !== previous?.muteOnEntry?.enabled,
|
|
105
|
+
|
|
106
|
+
hasShareControlChanged: current?.shareControl?.control !== previous?.shareControl?.control,
|
|
107
|
+
|
|
108
|
+
hasDisallowUnmuteChanged:
|
|
109
|
+
current?.disallowUnmute?.enabled !== previous?.disallowUnmute?.enabled,
|
|
110
|
+
|
|
111
|
+
hasReactionsChanged: current?.reactions?.enabled !== previous?.reactions?.enabled,
|
|
112
|
+
|
|
113
|
+
hasReactionDisplayNamesChanged:
|
|
114
|
+
current?.reactions?.showDisplayNameWithReactions !==
|
|
115
|
+
previous?.reactions?.showDisplayNameWithReactions,
|
|
116
|
+
|
|
117
|
+
hasViewTheParticipantListChanged:
|
|
118
|
+
current?.viewTheParticipantList?.enabled !== previous?.viewTheParticipantList?.enabled,
|
|
119
|
+
|
|
120
|
+
hasRaiseHandChanged: current?.raiseHand?.enabled !== previous?.raiseHand?.enabled,
|
|
121
|
+
|
|
122
|
+
hasVideoChanged: current?.video?.enabled !== previous?.video?.enabled,
|
|
123
|
+
|
|
68
124
|
hasRecordingPausedChanged:
|
|
69
125
|
current?.record &&
|
|
70
126
|
!isEqual(previous?.record?.paused, current.record.paused) &&
|
|
@@ -94,6 +150,12 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
|
94
150
|
),
|
|
95
151
|
|
|
96
152
|
hasBreakoutChanged: !isEqual(previous?.breakout, current?.breakout),
|
|
153
|
+
|
|
154
|
+
hasInterpretationChanged: !isEqual(previous?.interpretation, current?.interpretation),
|
|
155
|
+
|
|
156
|
+
hasVideoEnabledChanged:
|
|
157
|
+
newControls.video?.enabled !== undefined &&
|
|
158
|
+
!isEqual(previous?.videoEnabled, current?.videoEnabled),
|
|
97
159
|
},
|
|
98
160
|
};
|
|
99
161
|
};
|
|
@@ -111,4 +173,50 @@ ControlsUtils.getId = (controls: any) => {
|
|
|
111
173
|
return null;
|
|
112
174
|
};
|
|
113
175
|
|
|
176
|
+
/**
|
|
177
|
+
* check whether to replace the meeting's members or not.
|
|
178
|
+
* For case joined breakout session, need replace meeting's members
|
|
179
|
+
* @param {LocusControls} oldControls
|
|
180
|
+
* @param {LocusControls} controls
|
|
181
|
+
* @returns {Boolean}
|
|
182
|
+
*/
|
|
183
|
+
ControlsUtils.isNeedReplaceMembers = (oldControls: any, controls: any) => {
|
|
184
|
+
// no breakout case
|
|
185
|
+
if (!oldControls?.breakout || !controls?.breakout) {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return (
|
|
190
|
+
oldControls.breakout.groupId !== controls.breakout.groupId ||
|
|
191
|
+
oldControls.breakout.sessionId !== controls.breakout.sessionId
|
|
192
|
+
);
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* determine the switch status between breakout session and main session.
|
|
197
|
+
* @param {LocusControls} oldControls
|
|
198
|
+
* @param {LocusControls} controls
|
|
199
|
+
* @returns {Object}
|
|
200
|
+
*/
|
|
201
|
+
ControlsUtils.getSessionSwitchStatus = (oldControls: any, controls: any) => {
|
|
202
|
+
const status = {isReturnToMain: false, isJoinToBreakout: false};
|
|
203
|
+
// no breakout case
|
|
204
|
+
if (!oldControls?.breakout || !controls?.breakout) {
|
|
205
|
+
return status;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
status.isReturnToMain =
|
|
209
|
+
oldControls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT &&
|
|
210
|
+
controls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;
|
|
211
|
+
status.isJoinToBreakout =
|
|
212
|
+
oldControls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.MAIN &&
|
|
213
|
+
controls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;
|
|
214
|
+
|
|
215
|
+
return status;
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
ControlsUtils.isMainSessionDTO = (locus: any) => {
|
|
219
|
+
return locus?.controls?.breakout?.sessionType !== BREAKOUTS.SESSION_TYPES.BREAKOUT;
|
|
220
|
+
};
|
|
221
|
+
|
|
114
222
|
export default ControlsUtils;
|