mirror of
https://github.com/nextcloud/talk-android
synced 2025-08-02 17:45:21 +01:00
Merge pull request #4448 from nextcloud/bugfix/noid/fixWebsocketConnectionForChat
Bugfix/noid/fix websocket connection for chat
This commit is contained in:
commit
89964c0725
@ -184,7 +184,9 @@ import com.stfalcon.chatkit.messages.MessageHolders.ContentChecker
|
|||||||
import com.stfalcon.chatkit.messages.MessagesListAdapter
|
import com.stfalcon.chatkit.messages.MessagesListAdapter
|
||||||
import com.stfalcon.chatkit.utils.DateFormatter
|
import com.stfalcon.chatkit.utils.DateFormatter
|
||||||
import io.reactivex.Observer
|
import io.reactivex.Observer
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.disposables.Disposable
|
import io.reactivex.disposables.Disposable
|
||||||
|
import io.reactivex.schedulers.Schedulers
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
@ -702,14 +704,8 @@ class ChatActivity :
|
|||||||
logConversationInfos("joinRoomWithPassword#onNext")
|
logConversationInfos("joinRoomWithPassword#onNext")
|
||||||
|
|
||||||
setupWebsocket()
|
setupWebsocket()
|
||||||
if (webSocketInstance != null) {
|
|
||||||
webSocketInstance?.joinRoomWithRoomTokenAndSession(
|
if (startCallFromNotification) {
|
||||||
roomToken,
|
|
||||||
sessionIdAfterRoomJoined,
|
|
||||||
externalSignalingServer?.federation
|
|
||||||
)
|
|
||||||
}
|
|
||||||
if (startCallFromNotification != null && startCallFromNotification) {
|
|
||||||
startCallFromNotification = false
|
startCallFromNotification = false
|
||||||
startACall(voiceOnly, false)
|
startACall(voiceOnly, false)
|
||||||
}
|
}
|
||||||
@ -2452,7 +2448,7 @@ class ChatActivity :
|
|||||||
currentlyPlayedVoiceMessage?.let { stopMediaPlayer(it) } // FIXME, mediaplayer can sometimes be null here
|
currentlyPlayedVoiceMessage?.let { stopMediaPlayer(it) } // FIXME, mediaplayer can sometimes be null here
|
||||||
|
|
||||||
adapter = null
|
adapter = null
|
||||||
Log.d(TAG, "inConversation was set to false!")
|
disposables.dispose()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun joinRoomWithPassword() {
|
private fun joinRoomWithPassword() {
|
||||||
@ -2477,13 +2473,6 @@ class ChatActivity :
|
|||||||
Log.d(TAG, "sessionID was valid -> skip joinRoom")
|
Log.d(TAG, "sessionID was valid -> skip joinRoom")
|
||||||
|
|
||||||
setupWebsocket()
|
setupWebsocket()
|
||||||
if (webSocketInstance != null) {
|
|
||||||
webSocketInstance?.joinRoomWithRoomTokenAndSession(
|
|
||||||
roomToken,
|
|
||||||
sessionIdAfterRoomJoined,
|
|
||||||
externalSignalingServer?.federation
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2514,57 +2503,78 @@ class ChatActivity :
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentConversation!!.remoteServer != null) {
|
if (currentConversation!!.remoteServer?.isNotEmpty() == true) {
|
||||||
val apiVersion = ApiUtils.getSignalingApiVersion(conversationUser!!, intArrayOf(ApiUtils.API_V3, 2, 1))
|
val apiVersion = ApiUtils.getSignalingApiVersion(conversationUser!!, intArrayOf(ApiUtils.API_V3, 2, 1))
|
||||||
ncApi.getSignalingSettings(
|
ncApi.getSignalingSettings(
|
||||||
credentials,
|
credentials,
|
||||||
ApiUtils.getUrlForSignalingSettings(apiVersion, conversationUser!!.baseUrl, roomToken)
|
ApiUtils.getUrlForSignalingSettings(apiVersion, conversationUser!!.baseUrl, roomToken)
|
||||||
).blockingSubscribe(object : Observer<SignalingSettingsOverall> {
|
)
|
||||||
override fun onSubscribe(d: Disposable) {
|
.subscribeOn(Schedulers.io())
|
||||||
// unused atm
|
?.observeOn(AndroidSchedulers.mainThread())
|
||||||
}
|
?.subscribe(object : Observer<SignalingSettingsOverall> {
|
||||||
|
override fun onSubscribe(d: Disposable) {
|
||||||
override fun onNext(signalingSettingsOverall: SignalingSettingsOverall) {
|
disposables.add(d)
|
||||||
if (signalingSettingsOverall.ocs!!.settings!!.externalSignalingServer == null ||
|
|
||||||
signalingSettingsOverall.ocs!!.settings!!.externalSignalingServer?.isEmpty() == true
|
|
||||||
) {
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
externalSignalingServer = ExternalSignalingServer()
|
override fun onNext(signalingSettingsOverall: SignalingSettingsOverall) {
|
||||||
externalSignalingServer!!.externalSignalingServer = signalingSettingsOverall.ocs!!.settings!!
|
if (signalingSettingsOverall.ocs!!.settings!!.externalSignalingServer == null ||
|
||||||
.externalSignalingServer
|
signalingSettingsOverall.ocs!!.settings!!.externalSignalingServer?.isEmpty() == true
|
||||||
externalSignalingServer!!.externalSignalingTicket = signalingSettingsOverall.ocs!!.settings!!
|
) {
|
||||||
.externalSignalingTicket
|
return
|
||||||
externalSignalingServer!!.federation = signalingSettingsOverall.ocs!!.settings!!.federation
|
}
|
||||||
|
|
||||||
webSocketInstance = WebSocketConnectionHelper.getExternalSignalingInstanceForServer(
|
externalSignalingServer = ExternalSignalingServer()
|
||||||
externalSignalingServer!!.externalSignalingServer,
|
externalSignalingServer!!.externalSignalingServer = signalingSettingsOverall.ocs!!.settings!!
|
||||||
conversationUser,
|
.externalSignalingServer
|
||||||
externalSignalingServer!!.externalSignalingTicket,
|
externalSignalingServer!!.externalSignalingTicket = signalingSettingsOverall.ocs!!.settings!!
|
||||||
TextUtils.isEmpty(credentials)
|
.externalSignalingTicket
|
||||||
)
|
externalSignalingServer!!.federation = signalingSettingsOverall.ocs!!.settings!!.federation
|
||||||
}
|
|
||||||
|
|
||||||
override fun onError(e: Throwable) {
|
webSocketInstance = WebSocketConnectionHelper.getExternalSignalingInstanceForServer(
|
||||||
Log.e(CallActivity.TAG, e.message, e)
|
externalSignalingServer!!.externalSignalingServer,
|
||||||
}
|
conversationUser,
|
||||||
|
externalSignalingServer!!.externalSignalingTicket,
|
||||||
|
TextUtils.isEmpty(credentials)
|
||||||
|
)
|
||||||
|
|
||||||
override fun onComplete() {
|
if (webSocketInstance != null) {
|
||||||
// unused atm
|
webSocketInstance?.joinRoomWithRoomTokenAndSession(
|
||||||
}
|
roomToken,
|
||||||
})
|
sessionIdAfterRoomJoined,
|
||||||
|
externalSignalingServer?.federation
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
signalingMessageSender = webSocketInstance?.signalingMessageSender
|
||||||
|
webSocketInstance?.getSignalingMessageReceiver()?.addListener(localParticipantMessageListener)
|
||||||
|
webSocketInstance?.getSignalingMessageReceiver()?.addListener(conversationMessageListener)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onError(e: Throwable) {
|
||||||
|
Log.e(TAG, e.message, e)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onComplete() {
|
||||||
|
// unused atm
|
||||||
|
}
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
webSocketInstance = WebSocketConnectionHelper.getWebSocketInstanceForUser(conversationUser!!)
|
webSocketInstance = WebSocketConnectionHelper.getWebSocketInstanceForUser(conversationUser!!)
|
||||||
}
|
|
||||||
|
|
||||||
if (webSocketInstance == null) {
|
if (webSocketInstance != null) {
|
||||||
Log.d(TAG, "webSocketInstance not set up. This should only happen when not using the HPB")
|
webSocketInstance?.joinRoomWithRoomTokenAndSession(
|
||||||
}
|
roomToken,
|
||||||
|
sessionIdAfterRoomJoined,
|
||||||
|
null
|
||||||
|
)
|
||||||
|
|
||||||
signalingMessageSender = webSocketInstance?.signalingMessageSender
|
signalingMessageSender = webSocketInstance?.signalingMessageSender
|
||||||
webSocketInstance?.getSignalingMessageReceiver()?.addListener(localParticipantMessageListener)
|
webSocketInstance?.getSignalingMessageReceiver()?.addListener(localParticipantMessageListener)
|
||||||
webSocketInstance?.getSignalingMessageReceiver()?.addListener(conversationMessageListener)
|
webSocketInstance?.getSignalingMessageReceiver()?.addListener(conversationMessageListener)
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "webSocketInstance not set up. This is only expected when not using the HPB")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun processCallStartedMessages(chatMessageList: List<ChatMessage>) {
|
private fun processCallStartedMessages(chatMessageList: List<ChatMessage>) {
|
||||||
|
@ -391,7 +391,7 @@ class WebSocketInstance internal constructor(
|
|||||||
roomToken == currentRoomToken &&
|
roomToken == currentRoomToken &&
|
||||||
normalBackendSession == currentNormalBackendSession &&
|
normalBackendSession == currentNormalBackendSession &&
|
||||||
federation?.roomId == currentFederation?.roomId &&
|
federation?.roomId == currentFederation?.roomId &&
|
||||||
federation?.nextcloudServer == federation?.nextcloudServer
|
federation?.nextcloudServer == currentFederation?.nextcloudServer
|
||||||
) {
|
) {
|
||||||
Log.d(TAG, "roomToken & session are unchanged. Joining locally without to send websocket message")
|
Log.d(TAG, "roomToken & session are unchanged. Joining locally without to send websocket message")
|
||||||
sendRoomJoinedEvent()
|
sendRoomJoinedEvent()
|
||||||
|
Loading…
Reference in New Issue
Block a user