From acf639aefb2e2a6aa9df8285f99d1bd88e1d662a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20M=C3=BCller?= Date: Sat, 10 Aug 2024 20:35:43 +0200 Subject: [PATCH] Fix re-joining a call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marcel Müller --- NextcloudTalk/NCCallController.m | 2 +- NextcloudTalk/NCExternalSignalingController.h | 2 +- NextcloudTalk/NCExternalSignalingController.m | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/NextcloudTalk/NCCallController.m b/NextcloudTalk/NCCallController.m index a1d952732..bc8cd82a4 100644 --- a/NextcloudTalk/NCCallController.m +++ b/NextcloudTalk/NCCallController.m @@ -319,7 +319,7 @@ - (void)forceReconnect self->_disableVideoAtStart = ![self isVideoEnabled]; if (self->_externalSignalingController) { - [self->_externalSignalingController forceReconnect]; + [self->_externalSignalingController forceReconnectForRejoin]; } else { [self rejoinCallUsingInternalSignaling]; } diff --git a/NextcloudTalk/NCExternalSignalingController.h b/NextcloudTalk/NCExternalSignalingController.h index 8896c0967..9f3517501 100644 --- a/NextcloudTalk/NCExternalSignalingController.h +++ b/NextcloudTalk/NCExternalSignalingController.h @@ -57,6 +57,6 @@ typedef void (^JoinRoomExternalSignalingCompletionBlock)(NSError *error); - (void)connect; - (void)forceConnect; - (void)disconnect; -- (void)forceReconnect; +- (void)forceReconnectForRejoin; @end diff --git a/NextcloudTalk/NCExternalSignalingController.m b/NextcloudTalk/NCExternalSignalingController.m index 02461b373..4a5737964 100644 --- a/NextcloudTalk/NCExternalSignalingController.m +++ b/NextcloudTalk/NCExternalSignalingController.m @@ -182,6 +182,17 @@ - (void)forceReconnect }); } +- (void)forceReconnectForRejoin +{ + // In case we force reconnect in order to rejoin the call again, we need to keep the currently joined room. + // In `helloResponseReceived` we determine that we were in a room and that the sessionId changed, in that case + // we trigger a re-join in `NCRoomsManager` which takes care of re-joining. + dispatch_async(dispatch_get_main_queue(), ^{ + self->_resumeId = nil; + [self reconnect]; + }); +} + - (void)disconnect { [NCUtils log:[NSString stringWithFormat:@"Disconnecting from: %@", _serverUrl]];