Skip to content

Commit 66befa7

Browse files
committed
parse ChatMessage in SignalingMessageReceiver
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
1 parent 5e46a46 commit 66befa7

2 files changed

Lines changed: 43 additions & 46 deletions

File tree

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

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
*/
77
package com.nextcloud.talk.signaling
88

9+
import com.bluelinelabs.logansquare.LoganSquare
910
import com.nextcloud.talk.models.json.chat.ChatMessageJson
1011
import com.nextcloud.talk.models.json.converters.EnumActorTypeConverter
1112
import com.nextcloud.talk.models.json.converters.EnumParticipantTypeConverter
1213
import com.nextcloud.talk.models.json.participants.Participant
1314
import com.nextcloud.talk.models.json.signaling.NCSignalingMessage
1415
import com.nextcloud.talk.models.json.websocket.CallWebSocketMessage
16+
import org.json.JSONObject
1517
import kotlin.Any
1618
import kotlin.Int
1719
import kotlin.Long
@@ -158,8 +160,13 @@ abstract class SignalingMessageReceiver {
158160
fun onUnshareScreen()
159161
}
160162

161-
protected fun processChatMessageWebSocketMessage(chatMessage: ChatMessageJson) {
162-
conversationMessageNotifier.notifyMessageReceived(chatMessage)
163+
/**
164+
* Listener for conversation messages.
165+
*/
166+
interface ConversationMessageListener {
167+
fun onStartTyping(userId: String?, session: String?)
168+
fun onStopTyping(userId: String?, session: String?)
169+
fun onMessageReceived(chatMessage: ChatMessageJson?)
163170
}
164171

165172
/**
@@ -298,15 +305,6 @@ abstract class SignalingMessageReceiver {
298305
}
299306
}
300307

301-
/**
302-
* Listener for conversation messages.
303-
*/
304-
interface ConversationMessageListener {
305-
fun onStartTyping(userId: String?, session: String?)
306-
fun onStopTyping(userId: String?, session: String?)
307-
fun onMessageReceived(chatMessage: ChatMessageJson?)
308-
}
309-
310308
private fun processSwitchToEvent(eventMap: Map<String, Any>?) {
311309
// Message schema:
312310
// {
@@ -344,6 +342,29 @@ abstract class SignalingMessageReceiver {
344342
localParticipantMessageNotifier.notifySwitchTo(token)
345343
}
346344

345+
protected fun processChatMessageWebSocketMessage(jsonString: String) {
346+
fun parseChatMessage(jsonString: String): ChatMessageJson? {
347+
return try {
348+
val root = JSONObject(jsonString)
349+
val eventObj = root.optJSONObject("event") ?: return null
350+
val messageObj = eventObj.optJSONObject("message") ?: return null
351+
val dataObj = messageObj.optJSONObject("data") ?: return null
352+
val chatObj = dataObj.optJSONObject("chat") ?: return null
353+
val commentObj = chatObj.optJSONObject("comment") ?: return null
354+
355+
LoganSquare.parse(commentObj.toString(), ChatMessageJson::class.java)
356+
} catch (e: Exception) {
357+
null
358+
}
359+
}
360+
361+
val chatMessage = parseChatMessage(jsonString)
362+
363+
chatMessage?.let {
364+
conversationMessageNotifier.notifyMessageReceived(it)
365+
}
366+
}
367+
347368
private fun processUpdateEvent(eventMap: Map<String, Any>?) {
348369
val updateMap: Map<String, Any>?
349370
try {

app/src/main/java/com/nextcloud/talk/webrtc/WebSocketInstance.kt

Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA
1717
import com.nextcloud.talk.data.user.model.User
1818
import com.nextcloud.talk.events.NetworkEvent
1919
import com.nextcloud.talk.events.WebSocketCommunicationEvent
20-
import com.nextcloud.talk.models.json.chat.ChatMessageJson
2120
import com.nextcloud.talk.models.json.participants.Participant
2221
import com.nextcloud.talk.models.json.participants.Participant.ActorType
2322
import com.nextcloud.talk.models.json.signaling.NCSignalingMessage
@@ -184,7 +183,7 @@ class WebSocketInstance internal constructor(conversationUser: User, connectionU
184183
ncSignalingMessage.from = callWebSocketMessage.senderWebSocketMessage!!.sessionId
185184
}
186185

187-
signalingMessageReceiver.process(callWebSocketMessage)
186+
signalingMessageReceiver.processChatMessage(callWebSocketMessage)
188187
}
189188
}
190189

@@ -203,11 +202,11 @@ class WebSocketInstance internal constructor(conversationUser: User, connectionU
203202
} else if ("leave" == eventOverallWebSocketMessage.eventMap!!["type"]) {
204203
processRoomLeaveMessage(eventOverallWebSocketMessage)
205204
}
206-
signalingMessageReceiver.process(eventOverallWebSocketMessage.eventMap)
205+
signalingMessageReceiver.processChatMessage(eventOverallWebSocketMessage.eventMap)
207206
}
208207

209208
Globals.TARGET_PARTICIPANTS ->
210-
signalingMessageReceiver.process(eventOverallWebSocketMessage.eventMap)
209+
signalingMessageReceiver.processChatMessage(eventOverallWebSocketMessage.eventMap)
211210

212211
else ->
213212
Log.i(TAG, "Received unknown/ignored event target: $target")
@@ -218,25 +217,7 @@ class WebSocketInstance internal constructor(conversationUser: User, connectionU
218217
}
219218
}
220219

221-
private fun processRoomMessageMessage(
222-
eventOverallWebSocketMessage: EventOverallWebSocketMessage,
223-
jsonString: String
224-
) {
225-
// fun parseChatMessage(jsonString: String): ChatMessageJson? {
226-
// return try {
227-
// val root = JSONObject(jsonString)
228-
// val eventObj = root.optJSONObject("event") ?: return null
229-
// val messageObj = eventObj.optJSONObject("message") ?: return null
230-
// val dataObj = messageObj.optJSONObject("data") ?: return null
231-
// val chatObj = dataObj.optJSONObject("chat") ?: return null
232-
// val commentObj = chatObj.optJSONObject("comment") ?: return null
233-
//
234-
// LoganSquare.parse(commentObj.toString(), ChatMessageJson::class.java)
235-
// } catch (e: Exception) {
236-
// null
237-
// }
238-
// }
239-
220+
private fun processRoomMessageMessage(eventOverallWebSocketMessage: EventOverallWebSocketMessage, text: String) {
240221
val messageHashMap = eventOverallWebSocketMessage.eventMap?.get("message") as Map<*, *>?
241222

242223
if (messageHashMap != null && messageHashMap.containsKey("data")) {
@@ -251,13 +232,9 @@ class WebSocketInstance internal constructor(conversationUser: User, connectionU
251232
eventBus!!.post(WebSocketCommunicationEvent("refreshChat", refreshChatHashMap))
252233
}
253234

254-
// if (chatMap != null && chatMap.containsKey("comment")) {
255-
// pass string through..
256-
// val chatMessage = parseChatMessage(jsonString)
257-
// chatMessage?.let {
258-
// signalingMessageReceiver.process(it)
259-
// }
260-
// }
235+
if (chatMap != null && chatMap.containsKey("comment")) {
236+
signalingMessageReceiver.processChatMessage(text)
237+
}
261238
} else if (dataHashMap != null && dataHashMap.containsKey("recording")) {
262239
val recordingMap = dataHashMap["recording"] as Map<*, *>?
263240
if (recordingMap != null && recordingMap.containsKey("status")) {
@@ -495,11 +472,11 @@ class WebSocketInstance internal constructor(conversationUser: User, connectionU
495472
* stays connected, but it may change whenever it is connected again.
496473
*/
497474
private class ExternalSignalingMessageReceiver : SignalingMessageReceiver() {
498-
fun process(eventMap: Map<String, Any>?) {
475+
fun processChatMessage(eventMap: Map<String, Any>?) {
499476
processEvent(eventMap)
500477
}
501478

502-
fun process(message: CallWebSocketMessage?) {
479+
fun processChatMessage(message: CallWebSocketMessage?) {
503480
if (message?.ncSignalingMessage?.type == "startedTyping" ||
504481
message?.ncSignalingMessage?.type == "stoppedTyping"
505482
) {
@@ -509,9 +486,8 @@ class WebSocketInstance internal constructor(conversationUser: User, connectionU
509486
}
510487
}
511488

512-
fun process(message: ChatMessageJson) {
513-
// pass string through..
514-
processChatMessageWebSocketMessage(message)
489+
fun processChatMessage(jsonString: String) {
490+
processChatMessageWebSocketMessage(jsonString)
515491
Log.d(TAG, "processing Received chat message")
516492
}
517493
}

0 commit comments

Comments
 (0)