mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-29 07:35:11 +01:00
Merge pull request #2808 from nextcloud/bugfix/2060/fixDuplicatedMessages
Avoid duplicated messages / Fix messages not being displayed
This commit is contained in:
commit
6536ebb9a3
@ -1591,7 +1591,7 @@ public class CallActivity extends CallBaseActivity {
|
||||
Log.d(TAG, " new callSession by joinRoom= " + callSession);
|
||||
|
||||
ApplicationWideCurrentRoomHolder.getInstance().setSession(callSession);
|
||||
ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomId(roomId);
|
||||
ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomId(conversation.getRoomId());
|
||||
ApplicationWideCurrentRoomHolder.getInstance().setCurrentRoomToken(roomToken);
|
||||
ApplicationWideCurrentRoomHolder.getInstance().setUserInRoom(conversationUser);
|
||||
callOrJoinRoomViaWebSocket();
|
||||
|
@ -251,12 +251,12 @@ class ChatController(args: Bundle) :
|
||||
|
||||
val disposables = DisposableSet()
|
||||
|
||||
var sessionIdAfterRoomJoined: String? = null
|
||||
var roomToken: String? = null
|
||||
val conversationUser: User?
|
||||
private val roomPassword: String
|
||||
var credentials: String? = null
|
||||
var currentConversation: Conversation? = null
|
||||
var inConversation = false
|
||||
private var historyRead = false
|
||||
private var globalLastKnownFutureMessageId = -1
|
||||
private var globalLastKnownPastMessageId = -1
|
||||
@ -388,7 +388,7 @@ class ChatController(args: Bundle) :
|
||||
checkShowMessageInputView()
|
||||
checkLobbyState()
|
||||
|
||||
if (!inConversation) {
|
||||
if (!validSessionId()) {
|
||||
joinRoomWithPassword()
|
||||
} else {
|
||||
Log.d(TAG, "already inConversation. joinRoomWithPassword is skipped")
|
||||
@ -527,13 +527,10 @@ class ChatController(args: Bundle) :
|
||||
override fun onViewBound(view: View) {
|
||||
Log.d(TAG, "onViewBound: " + System.identityHashCode(this).toString())
|
||||
actionBar?.show()
|
||||
var adapterWasNull = false
|
||||
|
||||
if (adapter == null) {
|
||||
binding?.progressBar?.visibility = View.VISIBLE
|
||||
|
||||
adapterWasNull = true
|
||||
|
||||
val messageHolders = MessageHolders()
|
||||
val profileBottomSheet = ProfileBottomSheet(ncApi, conversationUser!!, router)
|
||||
|
||||
@ -918,14 +915,6 @@ class ChatController(args: Bundle) :
|
||||
setTitle()
|
||||
}
|
||||
|
||||
if (adapterWasNull) {
|
||||
Log.d(TAG, "starting for the first time (because adapter was null)")
|
||||
if (TextUtils.isEmpty(roomToken)) {
|
||||
handleFromNotification()
|
||||
} else {
|
||||
getRoomInfo()
|
||||
}
|
||||
}
|
||||
super.onViewBound(view)
|
||||
}
|
||||
|
||||
@ -1788,8 +1777,8 @@ class ChatController(args: Bundle) :
|
||||
|
||||
private fun validSessionId(): Boolean {
|
||||
return currentConversation != null &&
|
||||
!TextUtils.isEmpty(currentConversation?.sessionId) &&
|
||||
currentConversation?.sessionId != "0"
|
||||
sessionIdAfterRoomJoined?.isNotEmpty() == true &&
|
||||
sessionIdAfterRoomJoined != "0"
|
||||
}
|
||||
|
||||
@Suppress("Detekt.TooGenericExceptionCaught")
|
||||
@ -1808,10 +1797,6 @@ class ChatController(args: Bundle) :
|
||||
activity?.findViewById<View>(R.id.toolbar)?.setOnClickListener { v -> showConversationInfoScreen() }
|
||||
}
|
||||
|
||||
ApplicationWideCurrentRoomHolder.getInstance().currentRoomId = roomId
|
||||
ApplicationWideCurrentRoomHolder.getInstance().currentRoomToken = roomToken
|
||||
ApplicationWideCurrentRoomHolder.getInstance().userInRoom = conversationUser
|
||||
|
||||
val smileyButton = binding?.messageInputView?.findViewById<ImageButton>(R.id.smileyButton)
|
||||
|
||||
emojiPopup = binding?.messageInputView?.inputEditText?.let {
|
||||
@ -1851,10 +1836,10 @@ class ChatController(args: Bundle) :
|
||||
|
||||
cancelNotificationsForCurrentConversation()
|
||||
|
||||
Log.d(TAG, "onAttach inConversation: $inConversation")
|
||||
if (inConversation) {
|
||||
Log.d(TAG, "execute joinRoomWithPassword in onAttach")
|
||||
joinRoomWithPassword()
|
||||
if (TextUtils.isEmpty(roomToken)) {
|
||||
handleFromNotification()
|
||||
} else {
|
||||
getRoomInfo()
|
||||
}
|
||||
}
|
||||
|
||||
@ -1901,7 +1886,7 @@ class ChatController(args: Bundle) :
|
||||
|
||||
if (conversationUser != null && isActivityNotChangingConfigurations() && isNotInCall()) {
|
||||
ApplicationWideCurrentRoomHolder.getInstance().clear()
|
||||
if (inConversation && validSessionId()) {
|
||||
if (validSessionId()) {
|
||||
leaveRoom(null, null)
|
||||
} else {
|
||||
Log.d(TAG, "not leaving room (inConversation is false and/or validSessionId is false)")
|
||||
@ -1952,11 +1937,21 @@ class ChatController(args: Bundle) :
|
||||
currentlyPlayedVoiceMessage?.let { stopMediaPlayer(it) }
|
||||
|
||||
adapter = null
|
||||
inConversation = false
|
||||
Log.d(TAG, "inConversation was set to false!")
|
||||
}
|
||||
|
||||
private fun joinRoomWithPassword() {
|
||||
// if ApplicationWideCurrentRoomHolder contains a session (because a call is active), then keep the sessionId
|
||||
if (ApplicationWideCurrentRoomHolder.getInstance().currentRoomId ==
|
||||
currentConversation!!.roomId
|
||||
) {
|
||||
sessionIdAfterRoomJoined = ApplicationWideCurrentRoomHolder.getInstance().session
|
||||
|
||||
ApplicationWideCurrentRoomHolder.getInstance().currentRoomId = roomId
|
||||
ApplicationWideCurrentRoomHolder.getInstance().currentRoomToken = roomToken
|
||||
ApplicationWideCurrentRoomHolder.getInstance().userInRoom = conversationUser
|
||||
}
|
||||
|
||||
if (!validSessionId()) {
|
||||
Log.d(TAG, "sessionID was not valid -> joinRoom")
|
||||
var apiVersion = 1
|
||||
@ -1983,13 +1978,11 @@ class ChatController(args: Bundle) :
|
||||
@Suppress("Detekt.TooGenericExceptionCaught")
|
||||
override fun onNext(roomOverall: RoomOverall) {
|
||||
Log.d(TAG, "joinRoomWithPassword - joinRoom - got response: $startNanoTime")
|
||||
inConversation = true
|
||||
currentConversation?.sessionId = roomOverall.ocs!!.data!!.sessionId
|
||||
sessionIdAfterRoomJoined = roomOverall.ocs!!.data!!.sessionId
|
||||
|
||||
logConversationInfos("joinRoomWithPassword#onNext")
|
||||
|
||||
ApplicationWideCurrentRoomHolder.getInstance().session =
|
||||
currentConversation?.sessionId
|
||||
ApplicationWideCurrentRoomHolder.getInstance().session = sessionIdAfterRoomJoined
|
||||
|
||||
// FIXME The web socket should be set up in onAttach(). It is currently setup after joining the
|
||||
// room to "ensure" (rather, increase the chances) that the WebsocketConnectionsWorker job
|
||||
@ -2011,7 +2004,7 @@ class ChatController(args: Bundle) :
|
||||
if (webSocketInstance != null) {
|
||||
webSocketInstance?.joinRoomWithRoomTokenAndSession(
|
||||
roomToken!!,
|
||||
currentConversation?.sessionId
|
||||
sessionIdAfterRoomJoined
|
||||
)
|
||||
}
|
||||
if (startCallFromNotification != null && startCallFromNotification ?: false) {
|
||||
@ -2035,12 +2028,10 @@ class ChatController(args: Bundle) :
|
||||
} else {
|
||||
Log.d(TAG, "sessionID was valid -> skip joinRoom")
|
||||
|
||||
inConversation = true
|
||||
ApplicationWideCurrentRoomHolder.getInstance().session = currentConversation?.sessionId
|
||||
if (webSocketInstance != null) {
|
||||
webSocketInstance?.joinRoomWithRoomTokenAndSession(
|
||||
roomToken!!,
|
||||
currentConversation?.sessionId
|
||||
sessionIdAfterRoomJoined
|
||||
)
|
||||
}
|
||||
checkLobbyState()
|
||||
@ -2094,7 +2085,7 @@ class ChatController(args: Bundle) :
|
||||
if (webSocketInstance != null && currentConversation != null) {
|
||||
webSocketInstance?.joinRoomWithRoomTokenAndSession(
|
||||
"",
|
||||
currentConversation?.sessionId
|
||||
sessionIdAfterRoomJoined
|
||||
)
|
||||
} else {
|
||||
Log.e(TAG, "magicWebSocketInstance or currentConversation were null! Failed to leave the room!")
|
||||
@ -2107,7 +2098,7 @@ class ChatController(args: Bundle) :
|
||||
}
|
||||
}
|
||||
|
||||
currentConversation?.sessionId = "0"
|
||||
sessionIdAfterRoomJoined = "0"
|
||||
|
||||
if (remapChatModel != null && funToCallWhenLeaveSuccessful != null) {
|
||||
Log.d(TAG, "a callback action was set and is now executed because room was left successfully")
|
||||
@ -2226,7 +2217,7 @@ class ChatController(args: Bundle) :
|
||||
}
|
||||
|
||||
fun pullChatMessages(lookIntoFuture: Int, setReadMarker: Int = 1, xChatLastCommonRead: Int? = null) {
|
||||
if (!inConversation) {
|
||||
if (!validSessionId()) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -2406,7 +2397,7 @@ class ChatController(args: Bundle) :
|
||||
|
||||
historyRead = true
|
||||
|
||||
if (!lookingIntoFuture && inConversation) {
|
||||
if (!lookingIntoFuture && validSessionId()) {
|
||||
pullChatMessages(1)
|
||||
}
|
||||
}
|
||||
@ -2442,7 +2433,7 @@ class ChatController(args: Bundle) :
|
||||
updateReadStatusOfAllMessages(xChatLastCommonRead)
|
||||
adapter?.notifyDataSetChanged()
|
||||
|
||||
if (inConversation) {
|
||||
if (validSessionId()) {
|
||||
pullChatMessages(1, 1, xChatLastCommonRead)
|
||||
}
|
||||
}
|
||||
@ -2638,7 +2629,7 @@ class ChatController(args: Bundle) :
|
||||
}
|
||||
|
||||
override fun onLoadMore(page: Int, totalItemsCount: Int) {
|
||||
if (!historyRead && inConversation) {
|
||||
if (!historyRead && validSessionId()) {
|
||||
pullChatMessages(0)
|
||||
}
|
||||
}
|
||||
@ -3503,8 +3494,7 @@ class ChatController(args: Bundle) :
|
||||
Log.d(TAG, " | ChatController: " + System.identityHashCode(this).toString())
|
||||
Log.d(TAG, " | roomToken: $roomToken")
|
||||
Log.d(TAG, " | currentConversation?.displayName: ${currentConversation?.displayName}")
|
||||
Log.d(TAG, " | currentConversation?.sessionId: ${currentConversation?.sessionId}")
|
||||
Log.d(TAG, " | inConversation: $inConversation")
|
||||
Log.d(TAG, " | sessionIdAfterRoomJoined: $sessionIdAfterRoomJoined")
|
||||
Log.d(TAG, " |-----------------------------------------------")
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user