处理最新消息显示
This commit is contained in:
69
app/src/main/java/com/aiosman/ravenow/utils/MessageParser.kt
Normal file
69
app/src/main/java/com/aiosman/ravenow/utils/MessageParser.kt
Normal file
@@ -0,0 +1,69 @@
|
||||
package com.aiosman.ravenow.utils
|
||||
|
||||
import com.aiosman.ravenow.AppState
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.JsonSyntaxException
|
||||
import io.openim.android.sdk.models.Message
|
||||
|
||||
/**
|
||||
* OpenIM 消息解析工具类
|
||||
* 用于解析 ConversationInfo 中的 latestMsg JSON 字符串
|
||||
*/
|
||||
object MessageParser {
|
||||
|
||||
/**
|
||||
* 解析最新消息的显示文本和发送者信息
|
||||
* @param latestMsgJson 最新消息的JSON字符串
|
||||
* @return Pair<displayText, isSelf> 显示文本和是否是自己发送的消息
|
||||
*/
|
||||
fun parseLatestMessage(latestMsgJson: String?): Pair<String, Boolean> {
|
||||
var displayText = ""
|
||||
var isSelf = false
|
||||
|
||||
try {
|
||||
if (!latestMsgJson.isNullOrEmpty()) {
|
||||
val gson = Gson()
|
||||
val message = gson.fromJson(latestMsgJson, Message::class.java)
|
||||
|
||||
// 判断是否是自己发送的消息
|
||||
isSelf = message.sendID == AppState.profile?.trtcUserId
|
||||
|
||||
// 根据消息类型生成显示文本
|
||||
displayText = getMessageDisplayText(message)
|
||||
} else {
|
||||
displayText = "[暂无消息]"
|
||||
}
|
||||
} catch (e: JsonSyntaxException) {
|
||||
// JSON 解析失败,使用原始文本
|
||||
displayText = latestMsgJson ?: "[消息解析失败]"
|
||||
} catch (e: Exception) {
|
||||
// 其他异常
|
||||
displayText = "[消息]"
|
||||
}
|
||||
|
||||
return Pair(displayText, isSelf)
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据消息类型获取显示文本
|
||||
* @param message OpenIM Message 对象
|
||||
* @return 消息的显示文本
|
||||
*/
|
||||
private fun getMessageDisplayText(message: Message): String {
|
||||
return when (message.contentType) {
|
||||
101 -> { // TEXT
|
||||
message.textElem?.content ?: "[文本消息]"
|
||||
}
|
||||
102 -> "[图片]" // IMAGE
|
||||
103 -> "[语音]" // AUDIO
|
||||
104 -> "[视频]" // VIDEO
|
||||
105 -> "[文件]" // FILE
|
||||
106 -> "[位置]" // LOCATION
|
||||
107 -> "[自定义消息]" // CUSTOM
|
||||
108 -> "[合并消息]" // MERGE
|
||||
109 -> "[名片]" // CARD
|
||||
110 -> "[引用消息]" // QUOTE
|
||||
else -> "[消息]"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user