添加免打扰功能及优化推送逻辑

This commit is contained in:
imhao183
2020-10-28 09:51:45 +08:00
parent 8e894e49b3
commit 139042c8e7
4 changed files with 69 additions and 32 deletions
@@ -30,6 +30,7 @@ import io.netty.handler.codec.mqtt.MqttQoS;
import cn.wildfirechat.common.ErrorCode;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;
@@ -184,12 +185,12 @@ public interface IMessagesStore {
List<WFCMessage.UserSettingEntry> getUserSetting(String userId, int scope);
long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq request);
void clearUserSettings(String userId);
boolean getUserGlobalSilent(String userId);
boolean getUserGlobalSlient(String userId);
boolean getUserPushHiddenDetail(String userId);
boolean getUserConversationSlient(String userId, WFCMessage.Conversation conversation);
boolean getUserConversationSilent(String userId, WFCMessage.Conversation conversation);
boolean getSilentWhenPcOnline(String userId);
boolean isUserNoDisturbing(String userId);
ErrorCode createChannel(String operator, WFCMessage.ChannelInfo channelInfo);
void clearUserChannels(String userId);
ErrorCode modifyChannelInfo(String operator, String channelId, int modifyType, String value);
@@ -244,11 +244,13 @@ public class MessagesPublisher {
}
}
boolean isSlient;
boolean isSilent;
boolean isConvSilent = false;
if (pullType == ProtoConstants.PullType.Pull_ChatRoom) {
isSlient = true;
isSilent = true;
isConvSilent = true;
} else {
isSlient = false;
isSilent = false;
if (!user.equals(sender)) {
WFCMessage.Conversation conversation;
@@ -258,34 +260,32 @@ public class MessagesPublisher {
conversation = WFCMessage.Conversation.newBuilder().setType(conversationType).setLine(line).setTarget(target).build();
}
if (m_messagesStore.getUserConversationSlient(user, conversation)) {
if (m_messagesStore.getUserConversationSilent(user, conversation)) {
LOG.info("The conversation {}-{}-{} is slient", conversation.getType(), conversation.getTarget(), conversation.getLine());
isSlient = true;
isConvSilent = true;
}
if (m_messagesStore.getUserGlobalSlient(user)) {
if (m_messagesStore.getUserGlobalSilent(user)) {
LOG.info("The user {} is global sliented", user);
isSlient = true;
isSilent = true;
}
if (isPcOnline && m_messagesStore.getSilentWhenPcOnline(user)) {
if (!isSilent && isPcOnline && m_messagesStore.getSilentWhenPcOnline(user)) {
LOG.info("The user {} pc online and silent when pc online", user);
isSlient = true;
isSilent = true;
}
if (!isSilent && m_messagesStore.isUserNoDisturbing(user)) {
LOG.info("The user {} is no disturbing", user);
isSilent = true;
}
}
if (!StringUtil.isNullOrEmpty(pushContent) || messageContentType == 400) {
if (!isSlient && (persistFlag & 0x02) > 0) {
if (!isConvSilent && (persistFlag & 0x02) > 0) {
targetSession.setUnReceivedMsgs(targetSession.getUnReceivedMsgs() + 1);
}
}
if (isSlient) {
if (mentionType == 2 || (mentionType == 1 && mentionTargets.contains(user))) {
isSlient = false;
}
}
}
boolean needPush = !user.equals(sender);
@@ -316,11 +316,11 @@ public class MessagesPublisher {
int curMentionType = 0;
if (mentionType == 2) {
curMentionType = 2;
isSlient = false;
isConvSilent = false;
} else if (mentionType == 1){
if (mentionTargets != null && mentionTargets.contains(user)) {
curMentionType = 1;
isSlient = false;
isConvSilent = false;
}
}
@@ -334,8 +334,13 @@ public class MessagesPublisher {
continue;
}
if (isSlient) {
LOG.info("Slient of user or conversation");
if (isConvSilent) {
LOG.info("Silent of user or conversation");
continue;
}
if (isSilent) {
LOG.info("Silent of user");
continue;
}