Skip to content

Commit ff73495

Browse files
committed
show chat messages from signaling (temp. disabled longpolling for now)
known issues: mark chat as read not working (have to use separate endpoint to mark as read) Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
1 parent 66befa7 commit ff73495

6 files changed

Lines changed: 43 additions & 5 deletions

File tree

app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,9 @@ class ChatActivity :
477477
}
478478
}
479479

480-
override fun onMessageReceived(chatMessage: ChatMessageJson?) {
480+
override fun onChatMessageReceived(chatMessage: ChatMessageJson) {
481+
chatViewModel.onSignalingChatMessageReceived(chatMessage)
482+
481483
Log.d(
482484
TAG,
483485
"received message in ChatActivity. This is the chat message received via HPB. It would be " +

app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import android.os.Bundle
1111
import com.nextcloud.talk.chat.data.io.LifecycleAwareManager
1212
import com.nextcloud.talk.chat.data.model.ChatMessage
1313
import com.nextcloud.talk.models.domain.ConversationModel
14+
import com.nextcloud.talk.models.json.chat.ChatMessageJson
1415
import com.nextcloud.talk.models.json.chat.ChatOverallSingleMessage
1516
import kotlinx.coroutines.Job
1617
import kotlinx.coroutines.flow.Flow
@@ -116,4 +117,6 @@ interface ChatMessageRepository : LifecycleAwareManager {
116117
suspend fun sendUnsentChatMessages(credentials: String, url: String)
117118

118119
suspend fun deleteTempMessage(chatMessage: ChatMessage)
120+
121+
fun onSignalingChatMessageReceived(chatMessage: ChatMessageJson)
119122
}

app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ import kotlinx.coroutines.isActive
5050
import kotlinx.coroutines.launch
5151
import java.io.IOException
5252
import javax.inject.Inject
53+
import kotlin.collections.any
54+
import kotlin.collections.map
5355

5456
@Suppress("LargeClass", "TooManyFunctions")
5557
class OfflineFirstChatRepository @Inject constructor(
@@ -197,7 +199,8 @@ class OfflineFirstChatRepository @Inject constructor(
197199

198200
handleMessagesFromDb(newestMessageIdFromDb)
199201

200-
initMessagePolling(newestMessageIdFromDb)
202+
// temp disabled to test only signaling
203+
// initMessagePolling(newestMessageIdFromDb)
201204
}
202205

203206
private suspend fun handleMessagesFromDb(newestMessageIdFromDb: Long) {
@@ -349,6 +352,9 @@ class OfflineFirstChatRepository @Inject constructor(
349352

350353
updateUiForLastCommonRead()
351354

355+
// getNewestMessageIdFromChatBlocks wont work for insurance calls. we dont want newest message
356+
// but only the newest message that came from sync (not from signaling)
357+
// -> create new var to save newest message from sync (set for initial and long polling requests)
352358
val newestMessage = chatBlocksDao.getNewestMessageIdFromChatBlocks(
353359
internalConversationId,
354360
threadId
@@ -498,6 +504,7 @@ class OfflineFirstChatRepository @Inject constructor(
498504
Log.d(TAG, "Starting online request for single message (e.g. a reply)")
499505
sync(bundle)
500506
}
507+
// we cant just expect here that sync succeeded??
501508
return chatDao.getChatMessageForConversation(
502509
internalConversationId,
503510
messageId
@@ -670,7 +677,7 @@ class OfflineFirstChatRepository @Inject constructor(
670677
newestMessageId = newestMessageIdForNewChatBlock,
671678
hasHistory = hasHistory
672679
)
673-
chatBlocksDao.upsertChatBlock(newChatBlock) // crash when no conversation thread exists!
680+
chatBlocksDao.upsertChatBlock(newChatBlock)
674681

675682
updateBlocks(newChatBlock)
676683
return chatMessagesFromSyncToProcess
@@ -1020,6 +1027,27 @@ class OfflineFirstChatRepository @Inject constructor(
10201027
_removeMessageFlow.emit(chatMessage)
10211028
}
10221029

1030+
override fun onSignalingChatMessageReceived(chatMessage: ChatMessageJson) {
1031+
scope.launch {
1032+
val chatMessageEntities = updateMessagesData(
1033+
chatMessagesJson = listOf(chatMessage),
1034+
blockContainingQueriedMessage = null,
1035+
lookIntoFuture = true,
1036+
hasHistory = true
1037+
)
1038+
1039+
val chatMessages = chatMessageEntities.map(ChatMessageEntity::asModel)
1040+
1041+
handleNewAndTempMessages(
1042+
receivedChatMessages = chatMessages,
1043+
lookIntoFuture = true,
1044+
showUnreadMessagesMarker = false
1045+
)
1046+
1047+
updateUiForLastCommonRead()
1048+
}
1049+
}
1050+
10231051
@Suppress("Detekt.TooGenericExceptionCaught")
10241052
override suspend fun addTemporaryMessage(
10251053
message: CharSequence,

app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import com.nextcloud.talk.models.domain.ConversationModel
3535
import com.nextcloud.talk.models.domain.ReactionAddedModel
3636
import com.nextcloud.talk.models.domain.ReactionDeletedModel
3737
import com.nextcloud.talk.models.json.capabilities.SpreedCapability
38+
import com.nextcloud.talk.models.json.chat.ChatMessageJson
3839
import com.nextcloud.talk.models.json.chat.ChatOverallSingleMessage
3940
import com.nextcloud.talk.models.json.conversations.RoomOverall
4041
import com.nextcloud.talk.models.json.generic.GenericOverall
@@ -131,6 +132,10 @@ class ChatViewModel @Inject constructor(
131132
mediaPlayerManager.handleOnStop()
132133
}
133134

135+
fun onSignalingChatMessageReceived(chatMessage: ChatMessageJson) {
136+
chatRepository.onSignalingChatMessageReceived(chatMessage)
137+
}
138+
134139
val backgroundPlayUIFlow = mediaPlayerManager.backgroundPlayUIFlow
135140

136141
val mediaPlayerSeekbarObserver: Flow<ChatMessage>

app/src/main/java/com/nextcloud/talk/signaling/ConversationMessageNotifier.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ internal class ConversationMessageNotifier {
3333
@Synchronized
3434
fun notifyMessageReceived(chatMessage: ChatMessageJson) {
3535
for (listener in ArrayList(conversationMessageListeners)) {
36-
listener.onMessageReceived(chatMessage)
36+
listener.onChatMessageReceived(chatMessage)
3737
}
3838
}
3939

app/src/main/java/com/nextcloud/talk/signaling/SignalingMessageReceiver.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ abstract class SignalingMessageReceiver {
166166
interface ConversationMessageListener {
167167
fun onStartTyping(userId: String?, session: String?)
168168
fun onStopTyping(userId: String?, session: String?)
169-
fun onMessageReceived(chatMessage: ChatMessageJson?)
169+
fun onChatMessageReceived(chatMessage: ChatMessageJson)
170170
}
171171

172172
/**

0 commit comments

Comments
 (0)