diff --git a/broker/src/main/java/cn/wildfirechat/push/PushMessage.java b/broker/src/main/java/cn/wildfirechat/push/PushMessage.java index 93f12a71..dfb39dd5 100644 --- a/broker/src/main/java/cn/wildfirechat/push/PushMessage.java +++ b/broker/src/main/java/cn/wildfirechat/push/PushMessage.java @@ -12,9 +12,11 @@ package cn.wildfirechat.push; public class PushMessage { public String sender; public String senderName; + public String senderPortrait; public int convType; public String target; public String targetName; + public String targetPortrait; public String userId; public int line; public int cntType; @@ -34,12 +36,14 @@ public class PushMessage { public String language; public long messageId; - public PushMessage(String sender, int conversationType, String target, int line, int messageContentType, long serverTime, String senderName, String targetName, int unReceivedMsg, int mentionedType, boolean isHiddenDetail, String language) { + public PushMessage(String sender, int conversationType, String target, int line, int messageContentType, long serverTime, String senderName, String senderPortrait, String targetName, String targetPortrait, int unReceivedMsg, int mentionedType, boolean isHiddenDetail, String language) { this.sender = sender; this.convType = conversationType; this.target = target; this.senderName = senderName; + this.senderPortrait = senderPortrait; this.targetName = targetName; + this.targetPortrait = targetPortrait; this.line = line; this.cntType = messageContentType; this.serverTime = serverTime; diff --git a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java index 4d171261..76829c9f 100755 --- a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java +++ b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java @@ -35,14 +35,11 @@ import io.moquette.spi.ISessionsStore; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.handler.codec.mqtt.*; -import win.liyufan.im.GsonUtil; -import win.liyufan.im.HttpUtils; -import win.liyufan.im.IMTopic; +import win.liyufan.im.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import win.liyufan.im.Utility; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -168,6 +165,9 @@ public class MessagesPublisher { } WFCMessage.Message message = null; + String senderName = null; + String senderPortrait = null; + boolean sendNameLoaded = false; for (String user : receivers) { if (!user.equals(sender)) { WFCMessage.User userInfo = m_messagesStore.getUserInfo(user); @@ -207,10 +207,10 @@ public class MessagesPublisher { } Collection sessions = m_sessionsStore.sessionForUser(user); - String senderName = null; - String targetName = null; - boolean nameLoaded = false; + String targetName = null; + String targetPortrait = null; + boolean targetNameLoaded = false; Collection targetClients = null; if (pullType == ProtoConstants.PullType.Pull_ChatRoom) { @@ -386,10 +386,22 @@ public class MessagesPublisher { boolean isHiddenDetail = m_messagesStore.getUserPushHiddenDetail(user); - if(!nameLoaded) { - senderName = getUserDisplayName(sender, conversationType == ProtoConstants.ConversationType.ConversationType_Group ? target : null); - targetName = getTargetName(target, conversationType); - nameLoaded = true; + if(!sendNameLoaded) { + List list = new ArrayList<>(); + senderName = getUserDisplayName(sender, conversationType == ProtoConstants.ConversationType.ConversationType_Group ? target : null, list); + if(!list.isEmpty()) { + senderPortrait = list.get(0); + } + sendNameLoaded = true; + } + + if(!targetNameLoaded) { + List list = new ArrayList<>(); + targetName = getTargetName(target, conversationType, user, list); + if(!list.isEmpty()) { + targetPortrait = list.get(0); + } + targetNameLoaded = true; } String name = senderName; @@ -399,7 +411,7 @@ public class MessagesPublisher { name = fd.getAlias(); } } - this.messageSender.sendPush(sender, conversationType, target, line, messageId, targetSession.getClientID(), pushContent, pushData, messageContentType, serverTime, name, targetName, targetSession.getUnReceivedMsgs(), curMentionType, isHiddenDetail, targetSession.getLanguage()); + this.messageSender.sendPush(sender, conversationType, target, line, messageId, targetSession.getClientID(), pushContent, pushData, messageContentType, serverTime, name, senderPortrait, targetName, targetPortrait, targetSession.getUnReceivedMsgs(), curMentionType, isHiddenDetail, targetSession.getLanguage()); } } @@ -461,10 +473,13 @@ public class MessagesPublisher { } } - String getUserDisplayName(String userId, String groupId) { + String getUserDisplayName(String userId, String groupId, List portraitList) { WFCMessage.User user = m_messagesStore.getUserInfo(userId); String userName = null; if(user != null) { + if(portraitList != null && !StringUtil.isNullOrEmpty(user.getPortrait())) { + portraitList.add(user.getPortrait()); + } userName = user.getDisplayName(); } if (!StringUtil.isNullOrEmpty(groupId)) { @@ -476,17 +491,28 @@ public class MessagesPublisher { return userName; } - String getTargetName(String targetId, int cnvType) { + String getTargetName(String targetId, int cnvType, String fromUser, List portraitList) { if (cnvType == ProtoConstants.ConversationType.ConversationType_Private) { - return getUserDisplayName(targetId, null); + return getUserDisplayName(targetId, null, portraitList); } else if(cnvType == ProtoConstants.ConversationType.ConversationType_Group) { WFCMessage.GroupInfo group = m_messagesStore.getGroupInfo(targetId); if(group != null) { + if(!StringUtil.isNullOrEmpty(group.getPortrait())) { + portraitList.add(group.getPortrait()); + } + + WFCMessage.UserSettingEntry entry = m_messagesStore.getUserSetting(fromUser, UserSettingScope.kUserSettingGroupRemark, targetId); + if(entry != null && !StringUtil.isNullOrEmpty(entry.getValue())) { + return entry.getValue(); + } return group.getName(); } } else if(cnvType == ProtoConstants.ConversationType.ConversationType_Channel) { WFCMessage.ChannelInfo channelInfo = m_messagesStore.getChannelInfo(targetId); if (channelInfo != null) { + if(!StringUtil.isNullOrEmpty(channelInfo.getPortrait())) { + portraitList.add(channelInfo.getPortrait()); + } return channelInfo.getName(); } } diff --git a/broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java b/broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java index f8af901f..047c50ec 100755 --- a/broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java +++ b/broker/src/main/java/io/moquette/spi/impl/PersistentQueueMessageSender.java @@ -37,9 +37,9 @@ class PersistentQueueMessageSender { this.connectionDescriptorStore = connectionDescriptorStore; } - void sendPush(String sender, int conversationType, String target, int line, long messageId, String deviceId, String pushContent, String pushData, int messageContentType, long serverTime, String senderName, String targetName, int unReceivedMsg, int mentionType, boolean isHiddenDetail, String language) { + void sendPush(String sender, int conversationType, String target, int line, long messageId, String deviceId, String pushContent, String pushData, int messageContentType, long serverTime, String senderName, String senderPortrait, String targetName, String targetPortrait, int unReceivedMsg, int mentionType, boolean isHiddenDetail, String language) { LOG.info("Send push to {}, message from {}", deviceId, sender); - PushMessage pushMessage = new PushMessage(sender, conversationType, target, line, messageContentType, serverTime, senderName, targetName, unReceivedMsg, mentionType, isHiddenDetail, language); + PushMessage pushMessage = new PushMessage(sender, conversationType, target, line, messageContentType, serverTime, senderName, senderPortrait, targetName, targetPortrait, unReceivedMsg, mentionType, isHiddenDetail, language); pushMessage.pushContent = pushContent; pushMessage.pushData = pushData; pushMessage.messageId = messageId;