You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
306 lines
18 KiB
306 lines
18 KiB
package notification
|
|
|
|
import (
|
|
"OpenIM/internal/common/check"
|
|
"OpenIM/pkg/common/config"
|
|
"OpenIM/pkg/common/constant"
|
|
"OpenIM/pkg/common/tracelog"
|
|
discoveryRegistry "OpenIM/pkg/discoveryregistry"
|
|
"OpenIM/pkg/proto/msg"
|
|
"OpenIM/pkg/proto/sdkws"
|
|
utils2 "OpenIM/pkg/utils"
|
|
"context"
|
|
utils "github.com/OpenIMSDK/open_utils"
|
|
)
|
|
|
|
type Check struct {
|
|
user *check.UserCheck
|
|
group *check.GroupChecker
|
|
Msg *check.MsgCheck
|
|
friend *check.FriendChecker
|
|
conversation *check.ConversationChecker
|
|
}
|
|
|
|
func NewCheck(zk discoveryRegistry.SvcDiscoveryRegistry) *Check {
|
|
return &Check{
|
|
user: check.NewUserCheck(zk),
|
|
group: check.NewGroupChecker(zk),
|
|
Msg: check.NewMsgCheck(zk),
|
|
friend: check.NewFriendChecker(zk),
|
|
conversation: check.NewConversationChecker(zk),
|
|
}
|
|
}
|
|
|
|
type NotificationMsg struct {
|
|
SendID string
|
|
RecvID string
|
|
Content []byte // sdkws.TipsComm
|
|
MsgFrom int32
|
|
ContentType int32
|
|
SessionType int32
|
|
SenderNickname string
|
|
SenderFaceURL string
|
|
}
|
|
|
|
func (c *Check) Notification(ctx context.Context, notificationMsg *NotificationMsg) error {
|
|
var err error
|
|
defer func() {
|
|
tracelog.SetCtxDebug(ctx, utils2.GetFuncName(1), err, "notificationMsg", notificationMsg)
|
|
}()
|
|
|
|
var req msg.SendMsgReq
|
|
var msg sdkws.MsgData
|
|
var offlineInfo sdkws.OfflinePushInfo
|
|
var title, desc, ex string
|
|
var pushSwitch, unReadCount bool
|
|
var reliabilityLevel int
|
|
msg.SendID = notificationMsg.SendID
|
|
msg.RecvID = notificationMsg.RecvID
|
|
msg.Content = notificationMsg.Content
|
|
msg.MsgFrom = notificationMsg.MsgFrom
|
|
msg.ContentType = notificationMsg.ContentType
|
|
msg.SessionType = notificationMsg.SessionType
|
|
msg.CreateTime = utils.GetCurrentTimestampByMill()
|
|
msg.ClientMsgID = utils.GetMsgID(notificationMsg.SendID)
|
|
msg.Options = make(map[string]bool, 7)
|
|
msg.SenderNickname = notificationMsg.SenderNickname
|
|
msg.SenderFaceURL = notificationMsg.SenderFaceURL
|
|
switch notificationMsg.SessionType {
|
|
case constant.GroupChatType, constant.SuperGroupChatType:
|
|
msg.RecvID = ""
|
|
msg.GroupID = notificationMsg.RecvID
|
|
}
|
|
offlineInfo.IOSBadgeCount = config.Config.IOSPush.BadgeCount
|
|
offlineInfo.IOSPushSound = config.Config.IOSPush.PushSound
|
|
switch msg.ContentType {
|
|
case constant.GroupCreatedNotification:
|
|
pushSwitch = config.Config.Notification.GroupCreated.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupCreated.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupCreated.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupCreated.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupCreated.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupCreated.Conversation.UnreadCount
|
|
case constant.GroupInfoSetNotification:
|
|
pushSwitch = config.Config.Notification.GroupInfoSet.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupInfoSet.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupInfoSet.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupInfoSet.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupInfoSet.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupInfoSet.Conversation.UnreadCount
|
|
case constant.JoinGroupApplicationNotification:
|
|
pushSwitch = config.Config.Notification.JoinGroupApplication.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.JoinGroupApplication.OfflinePush.Title
|
|
desc = config.Config.Notification.JoinGroupApplication.OfflinePush.Desc
|
|
ex = config.Config.Notification.JoinGroupApplication.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.JoinGroupApplication.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.JoinGroupApplication.Conversation.UnreadCount
|
|
case constant.MemberQuitNotification:
|
|
pushSwitch = config.Config.Notification.MemberQuit.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.MemberQuit.OfflinePush.Title
|
|
desc = config.Config.Notification.MemberQuit.OfflinePush.Desc
|
|
ex = config.Config.Notification.MemberQuit.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.MemberQuit.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.MemberQuit.Conversation.UnreadCount
|
|
case constant.GroupApplicationAcceptedNotification:
|
|
pushSwitch = config.Config.Notification.GroupApplicationAccepted.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupApplicationAccepted.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupApplicationAccepted.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupApplicationAccepted.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupApplicationAccepted.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupApplicationAccepted.Conversation.UnreadCount
|
|
case constant.GroupApplicationRejectedNotification:
|
|
pushSwitch = config.Config.Notification.GroupApplicationRejected.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupApplicationRejected.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupApplicationRejected.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupApplicationRejected.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupApplicationRejected.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupApplicationRejected.Conversation.UnreadCount
|
|
case constant.GroupOwnerTransferredNotification:
|
|
pushSwitch = config.Config.Notification.GroupOwnerTransferred.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupOwnerTransferred.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupOwnerTransferred.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupOwnerTransferred.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupOwnerTransferred.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupOwnerTransferred.Conversation.UnreadCount
|
|
case constant.MemberKickedNotification:
|
|
pushSwitch = config.Config.Notification.MemberKicked.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.MemberKicked.OfflinePush.Title
|
|
desc = config.Config.Notification.MemberKicked.OfflinePush.Desc
|
|
ex = config.Config.Notification.MemberKicked.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.MemberKicked.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.MemberKicked.Conversation.UnreadCount
|
|
case constant.MemberInvitedNotification:
|
|
pushSwitch = config.Config.Notification.MemberInvited.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.MemberInvited.OfflinePush.Title
|
|
desc = config.Config.Notification.MemberInvited.OfflinePush.Desc
|
|
ex = config.Config.Notification.MemberInvited.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.MemberInvited.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.MemberInvited.Conversation.UnreadCount
|
|
case constant.MemberEnterNotification:
|
|
pushSwitch = config.Config.Notification.MemberEnter.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.MemberEnter.OfflinePush.Title
|
|
desc = config.Config.Notification.MemberEnter.OfflinePush.Desc
|
|
ex = config.Config.Notification.MemberEnter.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.MemberEnter.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.MemberEnter.Conversation.UnreadCount
|
|
case constant.UserInfoUpdatedNotification:
|
|
pushSwitch = config.Config.Notification.UserInfoUpdated.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.UserInfoUpdated.OfflinePush.Title
|
|
desc = config.Config.Notification.UserInfoUpdated.OfflinePush.Desc
|
|
ex = config.Config.Notification.UserInfoUpdated.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.UserInfoUpdated.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.UserInfoUpdated.Conversation.UnreadCount
|
|
case constant.FriendApplicationNotification:
|
|
pushSwitch = config.Config.Notification.FriendApplication.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.FriendApplication.OfflinePush.Title
|
|
desc = config.Config.Notification.FriendApplication.OfflinePush.Desc
|
|
ex = config.Config.Notification.FriendApplication.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.FriendApplication.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.FriendApplication.Conversation.UnreadCount
|
|
case constant.FriendApplicationApprovedNotification:
|
|
pushSwitch = config.Config.Notification.FriendApplicationApproved.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.FriendApplicationApproved.OfflinePush.Title
|
|
desc = config.Config.Notification.FriendApplicationApproved.OfflinePush.Desc
|
|
ex = config.Config.Notification.FriendApplicationApproved.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.FriendApplicationApproved.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.FriendApplicationApproved.Conversation.UnreadCount
|
|
case constant.FriendApplicationRejectedNotification:
|
|
pushSwitch = config.Config.Notification.FriendApplicationRejected.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.FriendApplicationRejected.OfflinePush.Title
|
|
desc = config.Config.Notification.FriendApplicationRejected.OfflinePush.Desc
|
|
ex = config.Config.Notification.FriendApplicationRejected.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.FriendApplicationRejected.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.FriendApplicationRejected.Conversation.UnreadCount
|
|
case constant.FriendAddedNotification:
|
|
pushSwitch = config.Config.Notification.FriendAdded.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.FriendAdded.OfflinePush.Title
|
|
desc = config.Config.Notification.FriendAdded.OfflinePush.Desc
|
|
ex = config.Config.Notification.FriendAdded.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.FriendAdded.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.FriendAdded.Conversation.UnreadCount
|
|
case constant.FriendDeletedNotification:
|
|
pushSwitch = config.Config.Notification.FriendDeleted.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.FriendDeleted.OfflinePush.Title
|
|
desc = config.Config.Notification.FriendDeleted.OfflinePush.Desc
|
|
ex = config.Config.Notification.FriendDeleted.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.FriendDeleted.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.FriendDeleted.Conversation.UnreadCount
|
|
case constant.FriendRemarkSetNotification:
|
|
pushSwitch = config.Config.Notification.FriendRemarkSet.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.FriendRemarkSet.OfflinePush.Title
|
|
desc = config.Config.Notification.FriendRemarkSet.OfflinePush.Desc
|
|
ex = config.Config.Notification.FriendRemarkSet.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.FriendRemarkSet.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.FriendRemarkSet.Conversation.UnreadCount
|
|
case constant.BlackAddedNotification:
|
|
pushSwitch = config.Config.Notification.BlackAdded.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.BlackAdded.OfflinePush.Title
|
|
desc = config.Config.Notification.BlackAdded.OfflinePush.Desc
|
|
ex = config.Config.Notification.BlackAdded.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.BlackAdded.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.BlackAdded.Conversation.UnreadCount
|
|
case constant.BlackDeletedNotification:
|
|
pushSwitch = config.Config.Notification.BlackDeleted.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.BlackDeleted.OfflinePush.Title
|
|
desc = config.Config.Notification.BlackDeleted.OfflinePush.Desc
|
|
ex = config.Config.Notification.BlackDeleted.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.BlackDeleted.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.BlackDeleted.Conversation.UnreadCount
|
|
case constant.ConversationOptChangeNotification:
|
|
pushSwitch = config.Config.Notification.ConversationOptUpdate.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.ConversationOptUpdate.OfflinePush.Title
|
|
desc = config.Config.Notification.ConversationOptUpdate.OfflinePush.Desc
|
|
ex = config.Config.Notification.ConversationOptUpdate.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.ConversationOptUpdate.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.ConversationOptUpdate.Conversation.UnreadCount
|
|
|
|
case constant.GroupDismissedNotification:
|
|
pushSwitch = config.Config.Notification.GroupDismissed.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupDismissed.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupDismissed.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupDismissed.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupDismissed.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupDismissed.Conversation.UnreadCount
|
|
|
|
case constant.GroupMutedNotification:
|
|
pushSwitch = config.Config.Notification.GroupMuted.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupMuted.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupMuted.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupMuted.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupMuted.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupMuted.Conversation.UnreadCount
|
|
|
|
case constant.GroupCancelMutedNotification:
|
|
pushSwitch = config.Config.Notification.GroupCancelMuted.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupCancelMuted.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupCancelMuted.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupCancelMuted.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupCancelMuted.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupCancelMuted.Conversation.UnreadCount
|
|
|
|
case constant.GroupMemberMutedNotification:
|
|
pushSwitch = config.Config.Notification.GroupMemberMuted.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupMemberMuted.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupMemberMuted.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupMemberMuted.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupMemberMuted.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupMemberMuted.Conversation.UnreadCount
|
|
|
|
case constant.GroupMemberCancelMutedNotification:
|
|
pushSwitch = config.Config.Notification.GroupMemberCancelMuted.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupMemberCancelMuted.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupMemberCancelMuted.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupMemberCancelMuted.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupMemberCancelMuted.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupMemberCancelMuted.Conversation.UnreadCount
|
|
|
|
case constant.GroupMemberInfoSetNotification:
|
|
pushSwitch = config.Config.Notification.GroupMemberInfoSet.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.GroupMemberInfoSet.OfflinePush.Title
|
|
desc = config.Config.Notification.GroupMemberInfoSet.OfflinePush.Desc
|
|
ex = config.Config.Notification.GroupMemberInfoSet.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.GroupMemberInfoSet.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.GroupMemberInfoSet.Conversation.UnreadCount
|
|
|
|
case constant.ConversationPrivateChatNotification:
|
|
pushSwitch = config.Config.Notification.ConversationSetPrivate.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.ConversationSetPrivate.OfflinePush.Title
|
|
desc = config.Config.Notification.ConversationSetPrivate.OfflinePush.Desc
|
|
ex = config.Config.Notification.ConversationSetPrivate.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.ConversationSetPrivate.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.ConversationSetPrivate.Conversation.UnreadCount
|
|
case constant.FriendInfoUpdatedNotification:
|
|
pushSwitch = config.Config.Notification.FriendInfoUpdated.OfflinePush.PushSwitch
|
|
title = config.Config.Notification.FriendInfoUpdated.OfflinePush.Title
|
|
desc = config.Config.Notification.FriendInfoUpdated.OfflinePush.Desc
|
|
ex = config.Config.Notification.FriendInfoUpdated.OfflinePush.Ext
|
|
reliabilityLevel = config.Config.Notification.FriendInfoUpdated.Conversation.ReliabilityLevel
|
|
unReadCount = config.Config.Notification.FriendInfoUpdated.Conversation.UnreadCount
|
|
case constant.DeleteMessageNotification:
|
|
reliabilityLevel = constant.ReliableNotificationNoMsg
|
|
case constant.ConversationUnreadNotification, constant.SuperGroupUpdateNotification:
|
|
reliabilityLevel = constant.UnreliableNotification
|
|
}
|
|
switch reliabilityLevel {
|
|
case constant.UnreliableNotification:
|
|
utils.SetSwitchFromOptions(msg.Options, constant.IsHistory, false)
|
|
utils.SetSwitchFromOptions(msg.Options, constant.IsPersistent, false)
|
|
utils.SetSwitchFromOptions(msg.Options, constant.IsConversationUpdate, false)
|
|
utils.SetSwitchFromOptions(msg.Options, constant.IsSenderConversationUpdate, false)
|
|
case constant.ReliableNotificationNoMsg:
|
|
utils.SetSwitchFromOptions(msg.Options, constant.IsConversationUpdate, false)
|
|
utils.SetSwitchFromOptions(msg.Options, constant.IsSenderConversationUpdate, false)
|
|
case constant.ReliableNotificationMsg:
|
|
|
|
}
|
|
utils.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, unReadCount)
|
|
utils.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, pushSwitch)
|
|
offlineInfo.Title = title
|
|
offlineInfo.Desc = desc
|
|
offlineInfo.Ex = ex
|
|
msg.OfflinePushInfo = &offlineInfo
|
|
req.MsgData = &msg
|
|
_, err = c.Msg.SendMsg(ctx, &req)
|
|
return err
|
|
}
|