feat:新增公聊新消息过滤功能(只接收文本、图片、1081)

This commit is contained in:
max
2024-05-14 16:53:28 +08:00
parent 5a067ec0fd
commit 8135142287
5 changed files with 40 additions and 7 deletions

View File

@@ -135,10 +135,7 @@ class PublicChatRoomMessageWidget : FrameLayoutRoomWidget {
}
private fun filterMessageForMessageList(message: ChatRoomMessage): Boolean {
if (message.msgType == MsgTypeEnum.notification) {
return true
}
if (message.attachment is HeadlineChangedAttachment) {
if (message.msgType == MsgTypeEnum.custom && message.attachment is HeadlineChangedAttachment) {
val data = (message.attachment as HeadlineChangedAttachment).headlineData
if (data == null || !data.isValid()) {
return true

View File

@@ -42,7 +42,9 @@ open class ChatRoomClient(val sessionId: String) : ICleared, ILog {
private val receiveMessageObserver = Observer<List<ChatRoomMessage>> {
val list = it.filter { item ->
item.sessionId == sessionId
item.sessionId == sessionId && !ChatRoomClientManager.publicChatRoomReceiveMessageFilter.filter(
item
)
}
messagePublishSubject.onNext(list)
}

View File

@@ -1,11 +1,37 @@
package com.chwl.app.public_chat.core
import com.chwl.core.im.custom.bean.CustomAttachment
import com.chwl.core.im.custom.bean.HeadlineChangedAttachment
import com.chwl.core.initial.InitialModel
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum
object ChatRoomClientManager {
private val clients = HashMap<String, ChatRoomClient>()
val publicChatRoomReceiveMessageFilter: ChatRoomMessageFilter = object : ChatRoomMessageFilter {
override fun filter(message: ChatRoomMessage): Boolean {
if (message.msgType == MsgTypeEnum.image || message.msgType == MsgTypeEnum.text) {
return false
}
if (message.msgType == MsgTypeEnum.custom) {
val attachment: CustomAttachment =
(message.attachment as? CustomAttachment) ?: return true
when (attachment.first) {
CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED -> {
when (attachment.second) {
CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED_SUB -> {
return false
}
}
}
}
}
return true
}
}
fun getPublicChatClient(): ChatRoomClient? {
val sessionId = InitialModel.get().publicChatSessionId
return getClient(sessionId)

View File

@@ -0,0 +1,7 @@
package com.chwl.app.public_chat.core
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage
interface ChatRoomMessageFilter {
fun filter(message: ChatRoomMessage): Boolean
}

View File

@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.R;
import com.chwl.app.public_chat.core.ChatRoomClientManager;
import com.chwl.app.public_chat.core.ChatRoomMessageAdapter;
import com.chwl.core.im.custom.bean.HeadlineChangedAttachment;
import com.chwl.core.module_hall.im.HallAttachment;
@@ -368,10 +369,10 @@ public class PublicChatRoomMessageListPanel {
}
public boolean filterMessage(ChatRoomMessage message) {
if (message.getMsgType() == MsgTypeEnum.notification) {
if (ChatRoomClientManager.INSTANCE.getPublicChatRoomReceiveMessageFilter().filter(message)) {
return true;
}
if (message.getAttachment() instanceof HeadlineChangedAttachment) {
if (message.getMsgType() == MsgTypeEnum.custom && message.getAttachment() instanceof HeadlineChangedAttachment) {
HeadlineBean data = ((HeadlineChangedAttachment) message.getAttachment()).getHeadlineData();
if (data == null || !data.isValid()) {
return true;