Fix joining deleted call links leaving call active

Co-authored-by: ayumi-signal <143036029+ayumi-signal@users.noreply.github.com>
This commit is contained in:
automated-signal 2024-10-07 19:47:00 -05:00 committed by GitHub
parent b86663b1b7
commit a099c402ff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 68 additions and 24 deletions

View file

@ -2252,6 +2252,7 @@ const _startCallLinkLobby = async ({
return; return;
} }
let success = false;
try { try {
dispatch({ dispatch({
type: WAITING_FOR_CALL_LINK_LOBBY, type: WAITING_FOR_CALL_LINK_LOBBY,
@ -2342,22 +2343,25 @@ const _startCallLinkLobby = async ({
isConversationTooBigToRing: false, isConversationTooBigToRing: false,
}, },
}); });
success = true;
} catch (error) { } catch (error) {
log.error(`${logId}: Failed to start lobby`, Errors.toLogFormat(error)); log.error(`${logId}: Failed to start lobby`, Errors.toLogFormat(error));
} finally {
if (!success) {
try {
calling.stopCallingLobby(roomId);
} catch (innerError) {
log.error(
`${logId}: Failed to stop calling lobby`,
Errors.toLogFormat(innerError)
);
}
try { dispatch({
calling.stopCallingLobby(roomId); type: CALL_LOBBY_FAILED,
} catch (innerError) { payload: { conversationId: roomId },
log.error( });
`${logId}: Failed to stop calling lobby`,
Errors.toLogFormat(innerError)
);
} }
dispatch({
type: CALL_LOBBY_FAILED,
payload: { conversationId: roomId },
});
} }
}; };
@ -2437,6 +2441,7 @@ function startCallingLobby({
return; return;
} }
let success = false;
try { try {
dispatch({ dispatch({
type: WAITING_FOR_CALLING_LOBBY, type: WAITING_FOR_CALLING_LOBBY,
@ -2473,22 +2478,25 @@ function startCallingLobby({
isConversationTooBigToRing: isConversationTooBigToRing(conversation), isConversationTooBigToRing: isConversationTooBigToRing(conversation),
}, },
}); });
success = true;
} catch (error) { } catch (error) {
log.error(`${logId}: Failed to start lobby`, Errors.toLogFormat(error)); log.error(`${logId}: Failed to start lobby`, Errors.toLogFormat(error));
} finally {
if (!success) {
try {
calling.stopCallingLobby(conversationId);
} catch (innerError) {
log.error(
`${logId}: Failed to stop calling lobby`,
Errors.toLogFormat(innerError)
);
}
try { dispatch({
calling.stopCallingLobby(conversationId); type: CALL_LOBBY_FAILED,
} catch (innerError) { payload: { conversationId },
log.error( });
`${logId}: Failed to stop calling lobby`,
Errors.toLogFormat(innerError)
);
} }
dispatch({
type: CALL_LOBBY_FAILED,
payload: { conversationId },
});
} }
}; };
} }

View file

@ -1579,6 +1579,42 @@ describe('calling duck', () => {
}); });
}); });
describe('startCallLinkLobby for deleted links', () => {
beforeEach(function (this: Mocha.Context) {
this.callingServiceReadCallLink = this.sandbox
.stub(callingService, 'readCallLink')
.resolves(null);
});
const doAction = async (
payload: StartCallLinkLobbyType
): Promise<{ dispatch: sinon.SinonSpy }> => {
const { startCallLinkLobby } = actions;
const dispatch = sinon.spy();
await startCallLinkLobby(payload)(dispatch, getEmptyRootState, null);
return { dispatch };
};
it('fails', async function (this: Mocha.Context) {
const { roomId, rootKey } = FAKE_CALL_LINK;
const { dispatch } = await doAction({ rootKey });
sinon.assert.calledTwice(dispatch);
sinon.assert.calledWith(dispatch, {
type: 'calling/WAITING_FOR_CALL_LINK_LOBBY',
payload: {
roomId,
},
});
sinon.assert.calledWith(dispatch, {
type: 'calling/CALL_LOBBY_FAILED',
payload: {
conversationId: roomId,
},
});
});
});
describe('peekNotConnectedGroupCall', () => { describe('peekNotConnectedGroupCall', () => {
const { peekNotConnectedGroupCall } = actions; const { peekNotConnectedGroupCall } = actions;