From 66d996cbc126849415b1d387438561727ff93c25 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Tue, 25 Apr 2023 10:36:13 +0800 Subject: [PATCH 1/3] group --- pkg/rpcclient/notification2/group.go | 453 ++++++++++++++++++++++++--- 1 file changed, 402 insertions(+), 51 deletions(-) diff --git a/pkg/rpcclient/notification2/group.go b/pkg/rpcclient/notification2/group.go index e97784ca7..4257e333a 100644 --- a/pkg/rpcclient/notification2/group.go +++ b/pkg/rpcclient/notification2/group.go @@ -2,6 +2,8 @@ package notification2 import ( "context" + "encoding/json" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" @@ -10,10 +12,10 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" pbGroup "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/group" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" - "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" ) @@ -119,16 +121,17 @@ func (g *GroupNotificationSender) getFromToUserNickname(ctx context.Context, fro func (g *GroupNotificationSender) groupNotification(ctx context.Context, contentType int32, m proto.Message, sendID, groupID, recvUserID string) (err error) { var tips sdkws.TipsComm - tips.Detail, err = proto.Marshal(m) + tips.Detail, err = json.Marshal(m) if err != nil { return err } - marshaler := jsonpb.Marshaler{ - OrigName: true, - EnumsAsInts: false, - EmitDefaults: false, - } - tips.JsonDetail, err = marshaler.MarshalToString(m) + tips.JsonDetail = string(tips.Detail) + //marshaler := jsonpb.Marshaler{ + // OrigName: true, + // EnumsAsInts: false, + // EmitDefaults: false, + //} + //tips.JsonDetail, err = marshaler.MarshalToString(m) if err != nil { return err } @@ -183,7 +186,7 @@ func (g *GroupNotificationSender) groupNotification(ctx context.Context, content n.ContentType = contentType n.SessionType = constant.SingleChatType n.MsgFrom = constant.SysMsgType - n.Content, err = proto.Marshal(&tips) + n.Content, err = json.Marshal(&tips) if err != nil { return } @@ -194,7 +197,7 @@ func (g *GroupNotificationSender) GroupCreatedNotification(ctx context.Context, defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, "GroupCreatedNotification failed", err) + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() groupInfo, err := g.mergeGroupFull(ctx, group.GroupID, group, &members, &userMap) @@ -208,7 +211,7 @@ func (g *GroupNotificationSender) mergeGroupFull(ctx context.Context, groupID st defer log.ZDebug(ctx, "return") defer func() { if err != nil { - log.ZError(ctx, "mergeGroupFull failed", err) + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() if group == nil { @@ -273,7 +276,13 @@ func (g *GroupNotificationSender) mergeGroupFull(ctx context.Context, groupID st return groupInfo, nil } -func (g *GroupNotificationSender) GroupInfoSetNotification(ctx context.Context, group *relation.GroupModel, members []*relation.GroupMemberModel, needVerification *int32) error { +func (g *GroupNotificationSender) GroupInfoSetNotification(ctx context.Context, group *relation.GroupModel, members []*relation.GroupMemberModel, needVerification *int32) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() groupInfo, err := g.mergeGroupFull(ctx, group.GroupID, group, &members, nil) if err != nil { return err @@ -285,25 +294,13 @@ func (g *GroupNotificationSender) GroupInfoSetNotification(ctx context.Context, return g.groupNotification(ctx, constant.GroupInfoSetNotification, groupInfoChangedTips, mcontext.GetOpUserID(ctx), group.GroupID, "") } -//func (g *GroupNotificationSender) mergeGroupAndUser(ctx context.Context, groupID string, userIDs []string) (*sdkws.GroupInfo, map[string]*sdkws.UserInfo, error) { -// //g.groupDB2PB(group, opUserID, uint32(len(members)) -// groupInfo, err := g.db.TakeGroup(ctx, groupID) -// if err != nil { -// return nil, nil, err -// } -// owner, err := g.db.TakeGroupOwner(ctx, groupID) -// if err != nil { -// return nil, nil, err -// } -// memberUserIDs, err := g.db.FindGroupMemberUserID(ctx, groupID) -// if err != nil { -// return nil, nil, err -// } -// g.getUsersInfoMap(ctx, memberUserIDs) -// return nil, nil, nil -//} - -func (g *GroupNotificationSender) JoinGroupApplicationNotification(ctx context.Context, req *pbGroup.JoinGroupReq) error { +func (g *GroupNotificationSender) JoinGroupApplicationNotification(ctx context.Context, req *pbGroup.JoinGroupReq) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, &userMap) @@ -336,7 +333,13 @@ func (g *GroupNotificationSender) JoinGroupApplicationNotification(ctx context.C return nil } -func (g *GroupNotificationSender) MemberQuitNotification(ctx context.Context, req *pbGroup.QuitGroupReq) error { +func (g *GroupNotificationSender) MemberQuitNotification(ctx context.Context, req *pbGroup.QuitGroupReq) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, &userMap) @@ -364,7 +367,13 @@ func (g *GroupNotificationSender) MemberQuitNotification(ctx context.Context, re return nil } -func (g *GroupNotificationSender) GroupApplicationAcceptedNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) error { +func (g *GroupNotificationSender) GroupApplicationAcceptedNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, nil) if err != nil { @@ -373,21 +382,27 @@ func (g *GroupNotificationSender) GroupApplicationAcceptedNotification(ctx conte groupApplicationAcceptedTips := &sdkws.GroupApplicationAcceptedTips{Group: groupInfo.Group, OpUser: groupInfo.OpUser, HandleMsg: req.HandledMsg} err = g.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, groupApplicationAcceptedTips, mcontext.GetOpUserID(ctx), "", req.FromUserID) if err != nil { - log.ZError(ctx, "groupNotification failed", err) + log.ZError(ctx, "failed", err) } groupApplicationAcceptedTips.ReceiverAs = 1 for _, member := range members { if member.RoleLevel == constant.GroupOwner || member.RoleLevel == constant.GroupAdmin { err = g.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, groupApplicationAcceptedTips, mcontext.GetOpUserID(ctx), "", req.FromUserID) if err != nil { - log.ZError(ctx, "groupNotification failed", err) + log.ZError(ctx, "failed", err) } } } return nil } -func (g *GroupNotificationSender) GroupApplicationRejectedNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) error { +func (g *GroupNotificationSender) GroupApplicationRejectedNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, nil) if err != nil { @@ -395,19 +410,25 @@ func (g *GroupNotificationSender) GroupApplicationRejectedNotification(ctx conte } groupApplicationRejectedTips := sdkws.GroupApplicationRejectedTips{Group: groupInfo.Group, OpUser: groupInfo.OpUser, HandleMsg: req.HandledMsg} if err := g.groupNotification(ctx, constant.GroupApplicationRejectedNotification, &groupApplicationRejectedTips, mcontext.GetOpUserID(ctx), "", req.FromUserID); err != nil { - log.ZError(ctx, "groupNotification failed", err) + log.ZError(ctx, "failed", err) } for _, member := range members { if member.RoleLevel == constant.GroupOwner || member.RoleLevel == constant.GroupAdmin { if err := g.groupNotification(ctx, constant.GroupApplicationRejectedNotification, &groupApplicationRejectedTips, mcontext.GetOpUserID(ctx), "", req.FromUserID); err != nil { - log.ZError(ctx, "groupNotification failed", err) + log.ZError(ctx, "failed", err) } } } return nil } -func (g *GroupNotificationSender) GroupOwnerTransferredNotification(ctx context.Context, req *pbGroup.TransferGroupOwnerReq) error { +func (g *GroupNotificationSender) GroupOwnerTransferredNotification(ctx context.Context, req *pbGroup.TransferGroupOwnerReq) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, nil) if err != nil { @@ -417,7 +438,13 @@ func (g *GroupNotificationSender) GroupOwnerTransferredNotification(ctx context. return g.groupNotification(ctx, constant.GroupOwnerTransferredNotification, groupOwnerTransferredTips, mcontext.GetOpUserID(ctx), req.GroupID, "") } -func (g *GroupNotificationSender) MemberKickedNotification(ctx context.Context, req *pbGroup.KickGroupMemberReq, kickedUserIDList []string) error { +func (g *GroupNotificationSender) MemberKickedNotification(ctx context.Context, req *pbGroup.KickGroupMemberReq, kickedUserIDList []string) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, nil) if err != nil { @@ -434,7 +461,13 @@ func (g *GroupNotificationSender) MemberKickedNotification(ctx context.Context, return g.groupNotification(ctx, constant.MemberKickedNotification, memberKickedTips, mcontext.GetOpUserID(ctx), req.GroupID, "") } -func (g *GroupNotificationSender) MemberInvitedNotification(ctx context.Context, groupID, reason string, invitedUserIDList []string) error { +func (g *GroupNotificationSender) MemberInvitedNotification(ctx context.Context, groupID, reason string, invitedUserIDList []string) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) @@ -456,7 +489,13 @@ func (g *GroupNotificationSender) MemberInvitedNotification(ctx context.Context, return g.groupNotification(ctx, constant.MemberInvitedNotification, memberInvitedTips, mcontext.GetOpUserID(ctx), groupID, "") } -func (g *GroupNotificationSender) MemberEnterNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) error { +func (g *GroupNotificationSender) MemberEnterNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, &userMap) @@ -487,7 +526,13 @@ func (g *GroupNotificationSender) groupMemberFullInfo(members []*relation.GroupM return nil } -func (g *GroupNotificationSender) GroupDismissedNotification(ctx context.Context, req *pbGroup.DismissGroupReq) error { +func (g *GroupNotificationSender) GroupDismissedNotification(ctx context.Context, req *pbGroup.DismissGroupReq) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, &userMap) @@ -498,7 +543,13 @@ func (g *GroupNotificationSender) GroupDismissedNotification(ctx context.Context return g.groupNotification(ctx, constant.GroupDismissedNotification, tips, mcontext.GetOpUserID(ctx), req.GroupID, "") } -func (g *GroupNotificationSender) GroupMemberMutedNotification(ctx context.Context, groupID, groupMemberUserID string, mutedSeconds uint32) error { +func (g *GroupNotificationSender) GroupMemberMutedNotification(ctx context.Context, groupID, groupMemberUserID string, mutedSeconds uint32) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) @@ -511,7 +562,13 @@ func (g *GroupNotificationSender) GroupMemberMutedNotification(ctx context.Conte return g.groupNotification(ctx, constant.GroupMemberMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } -func (g *GroupNotificationSender) GroupMemberCancelMutedNotification(ctx context.Context, groupID, groupMemberUserID string) error { +func (g *GroupNotificationSender) GroupMemberCancelMutedNotification(ctx context.Context, groupID, groupMemberUserID string) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) @@ -523,7 +580,13 @@ func (g *GroupNotificationSender) GroupMemberCancelMutedNotification(ctx context return g.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } -func (g *GroupNotificationSender) GroupMutedNotification(ctx context.Context, groupID string) error { +func (g *GroupNotificationSender) GroupMutedNotification(ctx context.Context, groupID string) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) @@ -534,7 +597,13 @@ func (g *GroupNotificationSender) GroupMutedNotification(ctx context.Context, gr return g.groupNotification(ctx, constant.GroupMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } -func (g *GroupNotificationSender) GroupCancelMutedNotification(ctx context.Context, groupID string) error { +func (g *GroupNotificationSender) GroupCancelMutedNotification(ctx context.Context, groupID string) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) @@ -545,7 +614,13 @@ func (g *GroupNotificationSender) GroupCancelMutedNotification(ctx context.Conte return g.groupNotification(ctx, constant.GroupMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } -func (g *GroupNotificationSender) GroupMemberInfoSetNotification(ctx context.Context, groupID, groupMemberUserID string) error { +func (g *GroupNotificationSender) GroupMemberInfoSetNotification(ctx context.Context, groupID, groupMemberUserID string) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) @@ -557,7 +632,13 @@ func (g *GroupNotificationSender) GroupMemberInfoSetNotification(ctx context.Con return g.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } -func (g *GroupNotificationSender) GroupMemberSetToAdminNotification(ctx context.Context, groupID, groupMemberUserID string, notificationType int32) error { +func (g *GroupNotificationSender) GroupMemberSetToAdminNotification(ctx context.Context, groupID, groupMemberUserID string, notificationType int32) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) @@ -569,7 +650,13 @@ func (g *GroupNotificationSender) GroupMemberSetToAdminNotification(ctx context. return g.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } -func (g *GroupNotificationSender) MemberEnterDirectlyNotification(ctx context.Context, groupID string, entrantUserID string) error { +func (g *GroupNotificationSender) MemberEnterDirectlyNotification(ctx context.Context, groupID string, entrantUserID string) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() var members []*relation.GroupMemberModel var userMap map[string]*sdkws.UserInfo groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) @@ -591,7 +678,13 @@ type NotificationMsg struct { SenderFaceURL string } -func (g *GroupNotificationSender) SuperGroupNotification(ctx context.Context, sendID, recvID string) error { +func (g *GroupNotificationSender) SuperGroupNotification(ctx context.Context, sendID, recvID string) (err error) { + defer log.ZDebug(ctx, "return") + defer func() { + if err != nil { + log.ZError(ctx, utils.GetFuncName(1)+" failed", err) + } + }() n := &NotificationMsg{ SendID: sendID, RecvID: recvID, @@ -603,3 +696,261 @@ func (g *GroupNotificationSender) SuperGroupNotification(ctx context.Context, se //g.Notification(ctx, n) return nil } + +func (c *GroupNotificationSender) Notification(ctx context.Context, notificationMsg *NotificationMsg) error { + var err error + 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.msgClient.SendMsg(ctx, &req) + return err +} From 1fc2264028ab7b82f1336d64875a2a6558ceb23a Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Tue, 25 Apr 2023 14:18:26 +0800 Subject: [PATCH 2/3] group --- pkg/rpcclient/notification2/group.go | 383 +++++++++++++++++---------- 1 file changed, 241 insertions(+), 142 deletions(-) diff --git a/pkg/rpcclient/notification2/group.go b/pkg/rpcclient/notification2/group.go index 4257e333a..e8d3c044f 100644 --- a/pkg/rpcclient/notification2/group.go +++ b/pkg/rpcclient/notification2/group.go @@ -3,6 +3,7 @@ package notification2 import ( "context" "encoding/json" + "fmt" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" @@ -34,20 +35,47 @@ type GroupNotificationSender struct { db controller.GroupDatabase } +func (g *GroupNotificationSender) getUser(ctx context.Context, userID string) (*sdkws.PublicUserInfo, error) { + users, err := g.getUsersInfo(ctx, []string{userID}) + if err != nil { + return nil, err + } + if len(users) == 0 { + return nil, errs.ErrUserIDNotFound.Wrap(fmt.Sprintf("user %s not found", userID)) + } + return &sdkws.PublicUserInfo{ + UserID: users[0].GetUserID(), + Nickname: users[0].GetNickname(), + FaceURL: users[0].GetFaceURL(), + Ex: users[0].GetEx(), + }, nil +} + func (g *GroupNotificationSender) getGroupInfo(ctx context.Context, groupID string) (*sdkws.GroupInfo, error) { gm, err := g.db.TakeGroup(ctx, groupID) if err != nil { return nil, err } + userIDs, err := g.db.FindGroupMemberUserID(ctx, groupID) + if err != nil { + return nil, err + } + owner, err := g.db.FindGroupMember(ctx, []string{groupID}, nil, []int32{constant.GroupOwner}) + if err != nil { + return nil, err + } + if len(owner) == 0 { + return nil, errs.ErrInternalServer.Wrap(fmt.Sprintf("group %s owner not found", groupID)) + } return &sdkws.GroupInfo{ - GroupID: gm.GroupID, - GroupName: gm.GroupName, - Notification: gm.Notification, - Introduction: gm.Introduction, - FaceURL: gm.FaceURL, - //OwnerUserID: gm.OwnerUserID, - CreateTime: gm.CreateTime.UnixMilli(), - //MemberCount: gm.MemberCount, + GroupID: gm.GroupID, + GroupName: gm.GroupName, + Notification: gm.Notification, + Introduction: gm.Introduction, + FaceURL: gm.FaceURL, + OwnerUserID: owner[0].UserID, + CreateTime: gm.CreateTime.UnixMilli(), + MemberCount: uint32(len(userIDs)), Ex: gm.Ex, Status: gm.Status, CreatorUserID: gm.CreatorUserID, @@ -60,6 +88,76 @@ func (g *GroupNotificationSender) getGroupInfo(ctx context.Context, groupID stri }, nil } +func (g *GroupNotificationSender) getGroupMembers(ctx context.Context, groupID string, userIDs []string) ([]*sdkws.GroupMemberFullInfo, error) { + members, err := g.db.FindGroupMember(ctx, []string{groupID}, userIDs, []int32{constant.GroupOwner}) + if err != nil { + return nil, err + } + users, err := g.getUsersInfoMap(ctx, userIDs) + if err != nil { + return nil, err + } + res := make([]*sdkws.GroupMemberFullInfo, 0, len(members)) + for _, member := range members { + var appMangerLevel int32 + if user := users[member.UserID]; user != nil { + appMangerLevel = user.AppMangerLevel + if member.Nickname == "" { + member.Nickname = user.Nickname + } + if member.FaceURL == "" { + member.FaceURL = user.FaceURL + } + } + res = append(res, g.groupMemberDB2PB(member, appMangerLevel)) + delete(users, member.UserID) + } + for userID, info := range users { + if info.AppMangerLevel == constant.AppAdmin { + res = append(res, &sdkws.GroupMemberFullInfo{ + GroupID: groupID, + UserID: userID, + Nickname: info.Nickname, + FaceURL: info.FaceURL, + AppMangerLevel: info.AppMangerLevel, + }) + } + } + return res, nil +} + +func (g *GroupNotificationSender) getGroupMemberMap(ctx context.Context, groupID string, userIDs []string) (map[string]*sdkws.GroupMemberFullInfo, error) { + members, err := g.getGroupMembers(ctx, groupID, userIDs) + if err != nil { + return nil, err + } + m := make(map[string]*sdkws.GroupMemberFullInfo) + for i, member := range members { + m[member.UserID] = members[i] + } + return m, nil +} + +func (g *GroupNotificationSender) getGroupMember(ctx context.Context, groupID string, userID string) (*sdkws.GroupMemberFullInfo, error) { + members, err := g.getGroupMembers(ctx, groupID, []string{userID}) + if err != nil { + return nil, err + } + if len(members) == 0 { + return nil, errs.ErrInternalServer.Wrap(fmt.Sprintf("group %s member %s not found", groupID, userID)) + } + return members[0], nil +} + +func (g *GroupNotificationSender) getGroupOwnerAndAdminUserID(ctx context.Context, groupID string) ([]string, error) { + members, err := g.db.FindGroupMember(ctx, []string{groupID}, nil, []int32{constant.GroupOwner, constant.GroupAdmin}) + if err != nil { + return nil, err + } + fn := func(e *relation.GroupMemberModel) string { return e.UserID } + return utils.Slice(members, fn), nil +} + func (g *GroupNotificationSender) groupDB2PB(group *relation.GroupModel, ownerUserID string, memberCount uint32) *sdkws.GroupInfo { return &sdkws.GroupInfo{ GroupID: group.GroupID, @@ -271,7 +369,7 @@ func (g *GroupNotificationSender) mergeGroupFull(ctx context.Context, groupID st AppMangerLevel: opUser.AppMangerLevel, } } - groupInfo = &sdkws.GroupCreatedTips{Group: g.groupDB2PB(group, opUserID, uint32(len(members))), + groupInfo = &sdkws.GroupCreatedTips{Group: g.groupDB2PB(group, groupOwnerMember.UserID, uint32(len(members))), OpUser: opUserMember, GroupOwnerUser: groupOwnerMember} return groupInfo, nil } @@ -301,33 +399,23 @@ func (g *GroupNotificationSender) JoinGroupApplicationNotification(ctx context.C log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err } - joinGroupApplicationTips := &sdkws.JoinGroupApplicationTips{Group: groupInfo.Group} - for _, member := range members { - if member.UserID == req.InviterUserID { - if user := userMap[member.UserID]; user != nil { - joinGroupApplicationTips.Applicant = &sdkws.PublicUserInfo{ - UserID: user.UserID, - Nickname: user.Nickname, - FaceURL: user.FaceURL, - Ex: user.Ex, - } - } - break - } + user, err := g.getUser(ctx, req.InviterUserID) + if err != nil { + return err } - joinGroupApplicationTips.ReqMsg = req.ReqMessage - for _, member := range members { - if member.RoleLevel == constant.GroupOwner || member.RoleLevel == constant.GroupAdmin { - err := g.groupNotification(ctx, constant.JoinGroupApplicationNotification, joinGroupApplicationTips, mcontext.GetOpUserID(ctx), "", member.UserID) - if err != nil { - return err - } + userIDs, err := g.getGroupOwnerAndAdminUserID(ctx, req.GroupID) + if err != nil { + return err + } + joinGroupApplicationTips := &sdkws.JoinGroupApplicationTips{Group: group, Applicant: user, ReqMsg: req.ReqMessage} + for _, userID := range userIDs { + err := g.groupNotification(ctx, constant.JoinGroupApplicationNotification, joinGroupApplicationTips, mcontext.GetOpUserID(ctx), "", userID) + if err != nil { + log.ZError(ctx, "JoinGroupApplicationNotification failed", err, "group", req.GroupID, "userID", userID) } } return nil @@ -340,28 +428,30 @@ func (g *GroupNotificationSender) MemberQuitNotification(ctx context.Context, re log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err } + // todo 退群后查不到 opUserID := mcontext.GetOpUserID(ctx) - memberQuitTips := &sdkws.MemberQuitTips{Group: groupInfo.Group, QuitUser: &sdkws.GroupMemberFullInfo{}} - for _, member := range members { - if member.UserID == opUserID { - if user := userMap[member.UserID]; user != nil { - memberQuitTips.QuitUser = g.groupMemberDB2PB(member, user.AppMangerLevel) - } - break - } + user, err := g.getUser(ctx, opUserID) + if err != nil { + return err } - for _, member := range members { - if member.RoleLevel == constant.GroupOwner || member.RoleLevel == constant.GroupAdmin { - err := g.groupNotification(ctx, constant.JoinGroupApplicationNotification, memberQuitTips, mcontext.GetOpUserID(ctx), "", member.UserID) - if err != nil { - return err - } + userIDs, err := g.getGroupOwnerAndAdminUserID(ctx, req.GroupID) + if err != nil { + return err + } + memberQuitTips := &sdkws.MemberQuitTips{Group: group, QuitUser: &sdkws.GroupMemberFullInfo{ + GroupID: group.GroupID, + UserID: user.UserID, + Nickname: user.Nickname, + FaceURL: user.FaceURL, + }} + for _, userID := range append(userIDs, opUserID) { + err := g.groupNotification(ctx, constant.MemberQuitNotification, memberQuitTips, mcontext.GetOpUserID(ctx), "", userID) + if err != nil { + return err } } return nil @@ -374,23 +464,23 @@ func (g *GroupNotificationSender) GroupApplicationAcceptedNotification(ctx conte log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, nil) + group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err } - groupApplicationAcceptedTips := &sdkws.GroupApplicationAcceptedTips{Group: groupInfo.Group, OpUser: groupInfo.OpUser, HandleMsg: req.HandledMsg} - err = g.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, groupApplicationAcceptedTips, mcontext.GetOpUserID(ctx), "", req.FromUserID) + user, err := g.getGroupMember(ctx, req.GroupID, mcontext.GetOpUserID(ctx)) if err != nil { - log.ZError(ctx, "failed", err) + return err } - groupApplicationAcceptedTips.ReceiverAs = 1 - for _, member := range members { - if member.RoleLevel == constant.GroupOwner || member.RoleLevel == constant.GroupAdmin { - err = g.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, groupApplicationAcceptedTips, mcontext.GetOpUserID(ctx), "", req.FromUserID) - if err != nil { - log.ZError(ctx, "failed", err) - } + userIDs, err := g.getGroupOwnerAndAdminUserID(ctx, req.GroupID) + if err != nil { + return err + } + groupApplicationAcceptedTips := &sdkws.GroupApplicationAcceptedTips{Group: group, OpUser: user, HandleMsg: req.HandledMsg, ReceiverAs: 1} + for _, userID := range append(userIDs, mcontext.GetOpUserID(ctx)) { + err = g.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, groupApplicationAcceptedTips, mcontext.GetOpUserID(ctx), "", userID) + if err != nil { + log.ZError(ctx, "failed", err) } } return nil @@ -403,20 +493,23 @@ func (g *GroupNotificationSender) GroupApplicationRejectedNotification(ctx conte log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, nil) + group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err } - groupApplicationRejectedTips := sdkws.GroupApplicationRejectedTips{Group: groupInfo.Group, OpUser: groupInfo.OpUser, HandleMsg: req.HandledMsg} - if err := g.groupNotification(ctx, constant.GroupApplicationRejectedNotification, &groupApplicationRejectedTips, mcontext.GetOpUserID(ctx), "", req.FromUserID); err != nil { - log.ZError(ctx, "failed", err) + user, err := g.getGroupMember(ctx, req.GroupID, mcontext.GetOpUserID(ctx)) + if err != nil { + return err } - for _, member := range members { - if member.RoleLevel == constant.GroupOwner || member.RoleLevel == constant.GroupAdmin { - if err := g.groupNotification(ctx, constant.GroupApplicationRejectedNotification, &groupApplicationRejectedTips, mcontext.GetOpUserID(ctx), "", req.FromUserID); err != nil { - log.ZError(ctx, "failed", err) - } + userIDs, err := g.getGroupOwnerAndAdminUserID(ctx, req.GroupID) + if err != nil { + return err + } + groupApplicationAcceptedTips := &sdkws.GroupApplicationRejectedTips{Group: group, OpUser: user, HandleMsg: req.HandledMsg} + for _, userID := range append(userIDs, mcontext.GetOpUserID(ctx)) { + err = g.groupNotification(ctx, constant.GroupApplicationRejectedNotification, groupApplicationAcceptedTips, mcontext.GetOpUserID(ctx), "", userID) + if err != nil { + log.ZError(ctx, "failed", err) } } return nil @@ -429,12 +522,16 @@ func (g *GroupNotificationSender) GroupOwnerTransferredNotification(ctx context. log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, nil) + group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err } - groupOwnerTransferredTips := &sdkws.GroupOwnerTransferredTips{Group: groupInfo.Group, OpUser: groupInfo.OpUser, NewGroupOwner: groupInfo.GroupOwnerUser} + opUserID := mcontext.GetOpUserID(ctx) + member, err := g.getGroupMemberMap(ctx, req.GroupID, []string{opUserID, req.NewOwnerUserID}) + if err != nil { + return err + } + groupOwnerTransferredTips := &sdkws.GroupOwnerTransferredTips{Group: group, OpUser: member[opUserID], NewGroupOwner: member[req.NewOwnerUserID]} return g.groupNotification(ctx, constant.GroupOwnerTransferredNotification, groupOwnerTransferredTips, mcontext.GetOpUserID(ctx), req.GroupID, "") } @@ -445,12 +542,15 @@ func (g *GroupNotificationSender) MemberKickedNotification(ctx context.Context, log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, nil) + group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err } - memberKickedTips := &sdkws.MemberKickedTips{Group: groupInfo.Group, OpUser: groupInfo.OpUser} + user, err := g.getGroupMember(ctx, req.GroupID, mcontext.GetOpUserID(ctx)) + if err != nil { + return err + } + memberKickedTips := &sdkws.MemberKickedTips{Group: group, OpUser: user} //for _, v := range kickedUserIDList { // var groupMemberInfo sdkws.GroupMemberFullInfo // if err := c.setGroupMemberInfo(ctx, req.GroupID, v, &groupMemberInfo); err != nil { @@ -468,24 +568,19 @@ func (g *GroupNotificationSender) MemberInvitedNotification(ctx context.Context, log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err } - memberInvitedTips := &sdkws.MemberInvitedTips{Group: groupInfo.Group, OpUser: groupInfo.OpUser} - groupMembers, err := g.db.FindGroupMember(ctx, []string{groupID}, invitedUserIDList, nil) + opUser, err := g.getGroupMember(ctx, groupID, mcontext.GetOpUserID(ctx)) if err != nil { return err } - for _, member := range groupMembers { - user, ok := userMap[member.UserID] - if !ok { - continue - } - memberInvitedTips.InvitedUserList = append(memberInvitedTips.InvitedUserList, g.groupMemberDB2PB(member, user.AppMangerLevel)) + users, err := g.getGroupMembers(ctx, groupID, invitedUserIDList) + if err != nil { + return err } + memberInvitedTips := &sdkws.MemberInvitedTips{Group: group, OpUser: opUser, InvitedUserList: users} return g.groupNotification(ctx, constant.MemberInvitedNotification, memberInvitedTips, mcontext.GetOpUserID(ctx), groupID, "") } @@ -496,22 +591,16 @@ func (g *GroupNotificationSender) MemberEnterNotification(ctx context.Context, r log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err } - MemberEnterTips := sdkws.MemberEnterTips{Group: groupInfo.Group} - for _, member := range members { - if member.UserID == req.FromUserID { - if user := userMap[member.UserID]; user != nil { - MemberEnterTips.EntrantUser = g.groupMemberDB2PB(member, user.AppMangerLevel) - } - break - } + user, err := g.getGroupMember(ctx, req.GroupID, req.FromUserID) + if err != nil { + return err } - return g.groupNotification(ctx, constant.MemberEnterNotification, &MemberEnterTips, mcontext.GetOpUserID(ctx), req.GroupID, "") + memberEnterTips := sdkws.MemberEnterTips{Group: group, EntrantUser: user} + return g.groupNotification(ctx, constant.MemberEnterNotification, &memberEnterTips, mcontext.GetOpUserID(ctx), req.GroupID, "") } func (g *GroupNotificationSender) groupMemberFullInfo(members []*relation.GroupMemberModel, userMap map[string]*sdkws.UserInfo, userID string) *sdkws.GroupMemberFullInfo { @@ -533,13 +622,15 @@ func (g *GroupNotificationSender) GroupDismissedNotification(ctx context.Context log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, req.GroupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, req.GroupID) if err != nil { return err } - tips := &sdkws.GroupDismissedTips{Group: groupInfo.Group, OpUser: groupInfo.OpUser} + user, err := g.getGroupMember(ctx, req.GroupID, mcontext.GetOpUserID(ctx)) + if err != nil { + return err + } + tips := &sdkws.GroupDismissedTips{Group: group, OpUser: user} return g.groupNotification(ctx, constant.GroupDismissedNotification, tips, mcontext.GetOpUserID(ctx), req.GroupID, "") } @@ -550,15 +641,16 @@ func (g *GroupNotificationSender) GroupMemberMutedNotification(ctx context.Conte log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err } - tips := sdkws.GroupMemberMutedTips{Group: groupInfo.Group, MutedSeconds: mutedSeconds, - OpUser: groupInfo.OpUser, MutedUser: g.groupMemberFullInfo(members, userMap, groupMemberUserID)} - tips.MutedSeconds = mutedSeconds + user, err := g.getGroupMemberMap(ctx, groupID, []string{mcontext.GetOpUserID(ctx), groupMemberUserID}) + if err != nil { + return err + } + tips := sdkws.GroupMemberMutedTips{Group: group, MutedSeconds: mutedSeconds, + OpUser: user[mcontext.GetOpUserID(ctx)], MutedUser: user[groupMemberUserID]} return g.groupNotification(ctx, constant.GroupMemberMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } @@ -569,14 +661,15 @@ func (g *GroupNotificationSender) GroupMemberCancelMutedNotification(ctx context log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err } - tips := sdkws.GroupMemberCancelMutedTips{Group: groupInfo.Group, - OpUser: groupInfo.OpUser, MutedUser: g.groupMemberFullInfo(members, userMap, groupMemberUserID)} + user, err := g.getGroupMemberMap(ctx, groupID, []string{mcontext.GetOpUserID(ctx), groupMemberUserID}) + if err != nil { + return err + } + tips := sdkws.GroupMemberCancelMutedTips{Group: group, OpUser: user[mcontext.GetOpUserID(ctx)], MutedUser: user[groupMemberUserID]} return g.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } @@ -587,13 +680,15 @@ func (g *GroupNotificationSender) GroupMutedNotification(ctx context.Context, gr log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err } - tips := sdkws.GroupMutedTips{Group: groupInfo.Group, OpUser: groupInfo.OpUser} + user, err := g.getGroupMember(ctx, groupID, mcontext.GetOpUserID(ctx)) + if err != nil { + return err + } + tips := sdkws.GroupMutedTips{Group: group, OpUser: user} return g.groupNotification(ctx, constant.GroupMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } @@ -604,13 +699,15 @@ func (g *GroupNotificationSender) GroupCancelMutedNotification(ctx context.Conte log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err } - tips := sdkws.GroupCancelMutedTips{Group: groupInfo.Group, OpUser: groupInfo.OpUser} + user, err := g.getGroupMember(ctx, groupID, mcontext.GetOpUserID(ctx)) + if err != nil { + return err + } + tips := sdkws.GroupCancelMutedTips{Group: group, OpUser: user} return g.groupNotification(ctx, constant.GroupMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } @@ -621,14 +718,15 @@ func (g *GroupNotificationSender) GroupMemberInfoSetNotification(ctx context.Con log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err } - tips := sdkws.GroupMemberInfoSetTips{Group: groupInfo.Group, - OpUser: groupInfo.OpUser, ChangedUser: g.groupMemberFullInfo(members, userMap, groupMemberUserID)} + user, err := g.getGroupMemberMap(ctx, groupID, []string{mcontext.GetOpUserID(ctx), groupMemberUserID}) + if err != nil { + return err + } + tips := sdkws.GroupMemberInfoSetTips{Group: group, OpUser: user[mcontext.GetOpUserID(ctx)], ChangedUser: user[groupMemberUserID]} return g.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } @@ -639,14 +737,15 @@ func (g *GroupNotificationSender) GroupMemberSetToAdminNotification(ctx context. log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err } - tips := sdkws.GroupMemberInfoSetTips{Group: groupInfo.Group, - OpUser: groupInfo.OpUser, ChangedUser: g.groupMemberFullInfo(members, userMap, groupMemberUserID)} + user, err := g.getGroupMemberMap(ctx, groupID, []string{mcontext.GetOpUserID(ctx), groupMemberUserID}) + if err != nil { + return err + } + tips := sdkws.GroupMemberInfoSetTips{Group: group, OpUser: user[mcontext.GetOpUserID(ctx)], ChangedUser: user[groupMemberUserID]} return g.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } @@ -657,13 +756,15 @@ func (g *GroupNotificationSender) MemberEnterDirectlyNotification(ctx context.Co log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - var members []*relation.GroupMemberModel - var userMap map[string]*sdkws.UserInfo - groupInfo, err := g.mergeGroupFull(ctx, groupID, nil, &members, &userMap) + group, err := g.getGroupInfo(ctx, groupID) if err != nil { return err } - tips := sdkws.MemberEnterTips{Group: groupInfo.Group, EntrantUser: g.groupMemberFullInfo(members, userMap, entrantUserID)} + user, err := g.getGroupMember(ctx, groupID, entrantUserID) + if err != nil { + return err + } + tips := sdkws.MemberEnterTips{Group: group, EntrantUser: user} return g.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } @@ -692,12 +793,10 @@ func (g *GroupNotificationSender) SuperGroupNotification(ctx context.Context, se ContentType: constant.SuperGroupUpdateNotification, SessionType: constant.SingleChatType, } - _ = n // todo - //g.Notification(ctx, n) - return nil + return g.Notification(ctx, n) } -func (c *GroupNotificationSender) Notification(ctx context.Context, notificationMsg *NotificationMsg) error { +func (g *GroupNotificationSender) Notification(ctx context.Context, notificationMsg *NotificationMsg) error { var err error var req msg.SendMsgReq var msg sdkws.MsgData @@ -951,6 +1050,6 @@ func (c *GroupNotificationSender) Notification(ctx context.Context, notification offlineInfo.Ex = ex msg.OfflinePushInfo = &offlineInfo req.MsgData = &msg - _, err = c.msgClient.SendMsg(ctx, &req) + _, err = g.msgClient.SendMsg(ctx, &req) return err } From 64bb44d18139c94a37a73d96968ae52990dcf26e Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Tue, 25 Apr 2023 17:40:01 +0800 Subject: [PATCH 3/3] group --- pkg/rpcclient/notification2/group.go | 375 +++------------------------ 1 file changed, 30 insertions(+), 345 deletions(-) diff --git a/pkg/rpcclient/notification2/group.go b/pkg/rpcclient/notification2/group.go index e8d3c044f..b81230e83 100644 --- a/pkg/rpcclient/notification2/group.go +++ b/pkg/rpcclient/notification2/group.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "fmt" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" @@ -18,6 +17,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/golang/protobuf/proto" + "time" ) func NewGroupNotificationSender(db controller.GroupDatabase, sdr discoveryregistry.SvcDiscoveryRegistry, fn func(ctx context.Context, userIDs []string) ([]rpcclient.CommonUser, error)) *GroupNotificationSender { @@ -29,8 +29,7 @@ func NewGroupNotificationSender(db controller.GroupDatabase, sdr discoveryregist } type GroupNotificationSender struct { - msgClient *rpcclient.MsgClient - // 找不到报错 + msgClient *rpcclient.MsgClient getUsersInfo func(ctx context.Context, userIDs []string) ([]rpcclient.CommonUser, error) db controller.GroupDatabase } @@ -218,77 +217,19 @@ func (g *GroupNotificationSender) getFromToUserNickname(ctx context.Context, fro } func (g *GroupNotificationSender) groupNotification(ctx context.Context, contentType int32, m proto.Message, sendID, groupID, recvUserID string) (err error) { - var tips sdkws.TipsComm - tips.Detail, err = json.Marshal(m) + content, err := json.Marshal(m) if err != nil { return err } - tips.JsonDetail = string(tips.Detail) - //marshaler := jsonpb.Marshaler{ - // OrigName: true, - // EnumsAsInts: false, - // EmitDefaults: false, - //} - //tips.JsonDetail, err = marshaler.MarshalToString(m) - if err != nil { - return err + notificationMsg := rpcclient.NotificationMsg{ + SendID: sendID, + RecvID: recvUserID, + ContentType: contentType, + SessionType: constant.GroupChatType, + MsgFrom: constant.SysMsgType, + Content: content, } - fromUserNickname, toUserNickname, err := g.getFromToUserNickname(ctx, sendID, recvUserID) - if err != nil { - return err - } - //cn := config.Config.Notification - switch contentType { - case constant.GroupCreatedNotification: - tips.DefaultTips = fromUserNickname - case constant.GroupInfoSetNotification: - tips.DefaultTips = fromUserNickname - case constant.JoinGroupApplicationNotification: - tips.DefaultTips = fromUserNickname - case constant.MemberQuitNotification: - tips.DefaultTips = fromUserNickname - case constant.GroupApplicationAcceptedNotification: - tips.DefaultTips = toUserNickname - case constant.GroupApplicationRejectedNotification: - tips.DefaultTips = toUserNickname - case constant.GroupOwnerTransferredNotification: - tips.DefaultTips = toUserNickname - case constant.MemberKickedNotification: - tips.DefaultTips = toUserNickname - case constant.MemberInvitedNotification: - tips.DefaultTips = toUserNickname - case constant.MemberEnterNotification: - tips.DefaultTips = toUserNickname - case constant.GroupDismissedNotification: - tips.DefaultTips = toUserNickname - case constant.GroupMutedNotification: - tips.DefaultTips = toUserNickname - case constant.GroupCancelMutedNotification: - tips.DefaultTips = toUserNickname - case constant.GroupMemberMutedNotification: - tips.DefaultTips = toUserNickname - case constant.GroupMemberCancelMutedNotification: - tips.DefaultTips = toUserNickname - case constant.GroupMemberInfoSetNotification: - tips.DefaultTips = toUserNickname - case constant.GroupMemberSetToAdminNotification: - tips.DefaultTips = toUserNickname - case constant.GroupMemberSetToOrdinaryUserNotification: - tips.DefaultTips = toUserNickname - default: - return errs.ErrInternalServer.Wrap("unknown group notification type") - } - var n rpcclient.NotificationMsg - n.SendID = sendID - n.RecvID = recvUserID - n.ContentType = contentType - n.SessionType = constant.SingleChatType - n.MsgFrom = constant.SysMsgType - n.Content, err = json.Marshal(&tips) - if err != nil { - return - } - return g.msgClient.Notification(ctx, &n) + return g.msgClient.Notification(ctx, ¬ificationMsg) } func (g *GroupNotificationSender) GroupCreatedNotification(ctx context.Context, group *relation.GroupModel, members []*relation.GroupMemberModel, userMap map[string]*sdkws.UserInfo) (err error) { @@ -768,17 +709,6 @@ func (g *GroupNotificationSender) MemberEnterDirectlyNotification(ctx context.Co return g.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } -type NotificationMsg struct { - SendID string - RecvID string - Content []byte // sdkws.TipsComm - MsgFrom int32 - ContentType int32 - SessionType int32 - SenderNickname string - SenderFaceURL string -} - func (g *GroupNotificationSender) SuperGroupNotification(ctx context.Context, sendID, recvID string) (err error) { defer log.ZDebug(ctx, "return") defer func() { @@ -786,270 +716,25 @@ func (g *GroupNotificationSender) SuperGroupNotification(ctx context.Context, se log.ZError(ctx, utils.GetFuncName(1)+" failed", err) } }() - n := &NotificationMsg{ - SendID: sendID, - RecvID: recvID, - MsgFrom: constant.SysMsgType, - ContentType: constant.SuperGroupUpdateNotification, - SessionType: constant.SingleChatType, + req := &msg.SendMsgReq{ + MsgData: &sdkws.MsgData{ + SendID: sendID, + RecvID: recvID, + Content: nil, + MsgFrom: constant.SysMsgType, + ContentType: constant.SuperGroupUpdateNotification, + SessionType: constant.SingleChatType, + CreateTime: time.Now().UnixMilli(), + ClientMsgID: utils.GetMsgID(sendID), + SenderNickname: "", + SenderFaceURL: "", + OfflinePushInfo: &sdkws.OfflinePushInfo{ + Title: "", + Desc: "", + Ex: "", + }, + }, } - return g.Notification(ctx, n) -} - -func (g *GroupNotificationSender) Notification(ctx context.Context, notificationMsg *NotificationMsg) error { - var err error - 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 = g.msgClient.SendMsg(ctx, &req) + _, err = g.msgClient.SendMsg(ctx, req) return err }