Skip to content

Commit 7d39c80

Browse files
committed
[STREAM-1180] If media handling is downgrading with an active conversation, fallback to reducedMediaHeadsets
1 parent 79954a9 commit 7d39c80

7 files changed

Lines changed: 18 additions & 16 deletions

File tree

src/client.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -876,7 +876,7 @@ export class GenesysCloudWebrtcSdk extends (EventEmitter as { new(): StrictEvent
876876
* @param mediaHandling how softphone media should be handled
877877
*/
878878
setMediaHandling (mediaHandling: MediaHandling): void {
879-
const useHeadsets = !(mediaHandling === MediaHandling.reducedMediaNoHeadsets);
879+
const useHeadsets = !(mediaHandling === MediaHandling.reducedMedia);
880880

881881
if (!this.sessionManager) {
882882
this._mediaHandling = mediaHandling;
@@ -887,13 +887,15 @@ export class GenesysCloudWebrtcSdk extends (EventEmitter as { new(): StrictEvent
887887
const activeConversations = this.sessionManager.getAllActiveConversations();
888888

889889
if (activeConversations.length !== 0 && !useHeadsets) {
890+
this._mediaHandling = MediaHandling.reducedMediaHeadsets;
891+
this.setUseHeadsets(true);
890892
throw createAndEmitSdkError.call(this, SdkErrorTypes.not_supported, 'Cannot downgrade media handling to stop using headsets during an active call');
891893
}
892894

893895
this._mediaHandling = mediaHandling;
894896
this.setUseHeadsets(useHeadsets);
895897

896-
const reduceMediaHandling = mediaHandling === MediaHandling.reducedMediaHeadsets || mediaHandling === MediaHandling.reducedMediaNoHeadsets;
898+
const reduceMediaHandling = mediaHandling === MediaHandling.reducedMediaHeadsets || mediaHandling === MediaHandling.reducedMedia;
897899
if (reduceMediaHandling) {
898900
const conversationSessionIds = activeConversations.map(conversation => conversation.sessionId);
899901
// Disconnect connections that aren't associated with an active conversation.

src/headsets/headset.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ export class HeadsetProxyService implements ISdkHeadsetService {
4949
// TODO: PCM-2060 - remove this
5050
this.useHeadsetOrchestration = !this.sdk._config.disableHeadsetControlsOrchestration;
5151

52-
if (this.sdk._mediaHandling === MediaHandling.reducedMediaNoHeadsets) {
53-
this.sdk.logger.warn('setUseHeadsets was called with `true` but media handling is set to `reducedMediaNoHeadsets`; headsets are not supported in this configuration - not handling media. Not activating headsets.');
52+
if (this.sdk._mediaHandling === MediaHandling.reducedMedia) {
53+
this.sdk.logger.warn('setUseHeadsets was called with `true` but media handling is set to `reducedMedia`; headsets are not supported in this configuration - not handling media. Not activating headsets.');
5454
useHeadsets = false;
5555
}
5656

src/sessions/softphone-session-handler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export class SoftphoneSessionHandler extends BaseSessionHandler {
150150
const isPrivAnswerAuto = pendingSession.privAnswerMode === 'Auto';
151151
const eagerConnectionEstablishmentMode = this.sdk._config.eagerPersistentConnectionEstablishment;
152152
const logInfo = { sessionId: pendingSession?.id, conversationId: pendingSession.conversationId };
153-
const reducedMediaHandling = this.sdk._mediaHandling === MediaHandling.reducedMediaHeadsets || this.sdk._mediaHandling === MediaHandling.reducedMediaNoHeadsets;
153+
const reducedMediaHandling = this.sdk._mediaHandling === MediaHandling.reducedMediaHeadsets || this.sdk._mediaHandling === MediaHandling.reducedMedia;
154154

155155
if (reducedMediaHandling) {
156156
this.log('info', 'received a propose while the SDK is configured for reduced media handling', logInfo);

src/types/enums.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,19 +52,19 @@ export enum MediaHandling {
5252
/** Handle all media; headset controls follow alerting leader */
5353
alertingLeaderMedia = 'alerting-leader-media',
5454
/**
55-
* Handle some media (see below); headset controls use traditional orchestration
55+
* Handle some media (see below); headset controls are not used
5656
*
5757
* - New eager persistent connections will be ignored.
5858
* - Auto-answer calls will be handled, which could result in a
5959
* persistent connection being established.
6060
*/
61-
reducedMediaHeadsets = 'reduced-media-headsets',
61+
reducedMedia = 'reduced-media',
6262
/**
63-
* Handle some media (see below); headset controls are not used
63+
* Internal use only. Handle some media (see below); headset controls use traditional orchestration.
6464
*
6565
* - New eager persistent connections will be ignored.
6666
* - Auto-answer calls will be handled, which could result in a
6767
* persistent connection being established.
6868
*/
69-
reducedMediaNoHeadsets = 'reduced-media-no-headsets',
69+
reducedMediaHeadsets = 'reduced-media-headsets',
7070
}

test/unit/client.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,15 +1174,15 @@ describe('Client', () => {
11741174
expect(useHeadsetsSpy).toHaveBeenCalledWith(true);
11751175
});
11761176

1177-
it('should throw if media handling will not use headsets but there is an active conversation', () => {
1177+
it('should throw and reduce media handling if new media handling will not use headsets but there is an active conversation', () => {
11781178
sdk = constructSdk();
11791179
const conversations = [{ conversationId: 'test-conversation-id' }] as IActiveConversationDescription[];
11801180
sessionManagerMock.getAllActiveConversations.mockReturnValue(conversations);
11811181

11821182
expect(() => {
1183-
sdk.setMediaHandling(MediaHandling.reducedMediaNoHeadsets);
1183+
sdk.setMediaHandling(MediaHandling.reducedMedia);
11841184
}).toThrow();
1185-
expect(sdk._mediaHandling).toBe(MediaHandling.standardMedia);
1185+
expect(sdk._mediaHandling).toBe(MediaHandling.reducedMediaHeadsets);
11861186
});
11871187

11881188
it('should disconnect any sessions not connected to an active conversation when set to a reduced handling of media', () => {

test/unit/headset/headset.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,8 @@ describe('HeadsetProxyService', () => {
301301
expect(proxyService['currentHeadsetService']).toBeInstanceOf(SdkHeadsetServiceFake);
302302
});
303303

304-
it('should use fake service if useHeadsets and media is set to reducedMediaNoHeadsets', () => {
305-
proxyService['sdk']._mediaHandling = MediaHandling.reducedMediaNoHeadsets;
304+
it('should use fake service if useHeadsets and media is set to reducedMedia', () => {
305+
proxyService['sdk']._mediaHandling = MediaHandling.reducedMedia;
306306
const spy = jest.spyOn(proxyService, 'updateAudioInputDevice');
307307

308308
proxyService.setUseHeadsets(true);

test/unit/sessions/softphone-session-handler.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ describe('handlePropose()', () => {
8484
expect(superSpyHandlePropose).not.toHaveBeenCalled();
8585
expect(superSpyProceed).not.toHaveBeenCalled();
8686

87-
mockSdk._mediaHandling = MediaHandling.reducedMediaNoHeadsets;
87+
mockSdk._mediaHandling = MediaHandling.reducedMedia;
8888
await handler.handlePropose(pendingSession);
8989
expect(spy).not.toHaveBeenCalled();
9090
expect(superSpyHandlePropose).not.toHaveBeenCalled();
@@ -116,7 +116,7 @@ describe('handlePropose()', () => {
116116
mockSdk._config.disableAutoAnswer = false;
117117
const pendingSession = createPendingSession(SessionTypes.softphone);
118118
pendingSession.autoAnswer = true;
119-
mockSdk._mediaHandling = MediaHandling.reducedMediaNoHeadsets;
119+
mockSdk._mediaHandling = MediaHandling.reducedMedia;
120120

121121
await handler.handlePropose(pendingSession);
122122

0 commit comments

Comments
 (0)