mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-10-26 21:22:16 +08:00 
			
		
		
		
	fix: solve uncorrect notification when set group info (#3172)
* fix: setGroupInfoEx uncorrect call. * update notification logic. * update group notification logic. * update update group announcement notication. * fix errror. * refresh * solve conflict. * update args.
This commit is contained in:
		
							parent
							
								
									4890487429
								
							
						
					
					
						commit
						62583b32a7
					
				| @ -16,6 +16,7 @@ package group | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
|  | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	pbgroup "github.com/openimsdk/protocol/group" | 	pbgroup "github.com/openimsdk/protocol/group" | ||||||
| @ -55,41 +56,52 @@ func UpdateGroupInfoMap(ctx context.Context, group *sdkws.GroupInfoForSet) map[s | |||||||
| 	return m | 	return m | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func UpdateGroupInfoExMap(ctx context.Context, group *pbgroup.SetGroupInfoExReq) (map[string]any, error) { | func UpdateGroupInfoExMap(ctx context.Context, group *pbgroup.SetGroupInfoExReq) (m map[string]any, normalFlag, groupNameFlag, notificationFlag bool, err error) { | ||||||
| 	m := make(map[string]any) | 	m = make(map[string]any) | ||||||
| 
 | 
 | ||||||
| 	if group.GroupName != nil { | 	if group.GroupName != nil { | ||||||
| 		if group.GroupName.Value != "" { | 		if strings.TrimSpace(group.GroupName.Value) != "" { | ||||||
| 			m["group_name"] = group.GroupName.Value | 			m["group_name"] = group.GroupName.Value | ||||||
|  | 			groupNameFlag = true | ||||||
| 		} else { | 		} else { | ||||||
| 			return nil, errs.ErrArgs.WrapMsg("group name is empty") | 			return nil, normalFlag, notificationFlag, groupNameFlag, errs.ErrArgs.WrapMsg("group name is empty") | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
| 	if group.Notification != nil { | 	if group.Notification != nil { | ||||||
|  | 		notificationFlag = true | ||||||
|  | 		group.Notification.Value = strings.TrimSpace(group.Notification.Value) // if Notification only contains spaces, set it to empty string | ||||||
|  | 
 | ||||||
| 		m["notification"] = group.Notification.Value | 		m["notification"] = group.Notification.Value | ||||||
| 		m["notification_update_time"] = time.Now() |  | ||||||
| 		m["notification_user_id"] = mcontext.GetOpUserID(ctx) | 		m["notification_user_id"] = mcontext.GetOpUserID(ctx) | ||||||
|  | 		m["notification_update_time"] = time.Now() | ||||||
| 	} | 	} | ||||||
| 	if group.Introduction != nil { | 	if group.Introduction != nil { | ||||||
| 		m["introduction"] = group.Introduction.Value | 		m["introduction"] = group.Introduction.Value | ||||||
|  | 		normalFlag = true | ||||||
| 	} | 	} | ||||||
| 	if group.FaceURL != nil { | 	if group.FaceURL != nil { | ||||||
| 		m["face_url"] = group.FaceURL.Value | 		m["face_url"] = group.FaceURL.Value | ||||||
|  | 		normalFlag = true | ||||||
| 	} | 	} | ||||||
| 	if group.NeedVerification != nil { | 	if group.NeedVerification != nil { | ||||||
| 		m["need_verification"] = group.NeedVerification.Value | 		m["need_verification"] = group.NeedVerification.Value | ||||||
|  | 		normalFlag = true | ||||||
| 	} | 	} | ||||||
| 	if group.LookMemberInfo != nil { | 	if group.LookMemberInfo != nil { | ||||||
| 		m["look_member_info"] = group.LookMemberInfo.Value | 		m["look_member_info"] = group.LookMemberInfo.Value | ||||||
|  | 		normalFlag = true | ||||||
| 	} | 	} | ||||||
| 	if group.ApplyMemberFriend != nil { | 	if group.ApplyMemberFriend != nil { | ||||||
| 		m["apply_member_friend"] = group.ApplyMemberFriend.Value | 		m["apply_member_friend"] = group.ApplyMemberFriend.Value | ||||||
|  | 		normalFlag = true | ||||||
| 	} | 	} | ||||||
| 	if group.Ex != nil { | 	if group.Ex != nil { | ||||||
| 		m["ex"] = group.Ex.Value | 		m["ex"] = group.Ex.Value | ||||||
|  | 		normalFlag = true | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return m, nil | 	return m, normalFlag, groupNameFlag, notificationFlag, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func UpdateGroupStatusMap(status int) map[string]any { | func UpdateGroupStatusMap(status int) map[string]any { | ||||||
|  | |||||||
| @ -292,10 +292,11 @@ func (g *groupServer) CreateGroup(ctx context.Context, req *pbgroup.CreateGroupR | |||||||
| 	g.notification.GroupCreatedNotification(ctx, tips, req.SendMessage) | 	g.notification.GroupCreatedNotification(ctx, tips, req.SendMessage) | ||||||
| 
 | 
 | ||||||
| 	if req.GroupInfo.Notification != "" { | 	if req.GroupInfo.Notification != "" { | ||||||
|  | 		notificationFlag := true | ||||||
| 		g.notification.GroupInfoSetAnnouncementNotification(ctx, &sdkws.GroupInfoSetAnnouncementTips{ | 		g.notification.GroupInfoSetAnnouncementNotification(ctx, &sdkws.GroupInfoSetAnnouncementTips{ | ||||||
| 			Group:  tips.Group, | 			Group:  tips.Group, | ||||||
| 			OpUser: tips.OpUser, | 			OpUser: tips.OpUser, | ||||||
| 		}) | 		}, ¬ificationFlag) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	reqCallBackAfter := &pbgroup.CreateGroupReq{ | 	reqCallBackAfter := &pbgroup.CreateGroupReq{ | ||||||
| @ -1036,7 +1037,8 @@ func (g *groupServer) SetGroupInfo(ctx context.Context, req *pbgroup.SetGroupInf | |||||||
| 				log.ZWarn(ctx, "SetConversations", err, "UserIDs", resp.UserIDs, "conversation", conversation) | 				log.ZWarn(ctx, "SetConversations", err, "UserIDs", resp.UserIDs, "conversation", conversation) | ||||||
| 			} | 			} | ||||||
| 		}() | 		}() | ||||||
| 		g.notification.GroupInfoSetAnnouncementNotification(ctx, &sdkws.GroupInfoSetAnnouncementTips{Group: tips.Group, OpUser: tips.OpUser}) | 		notficationFlag := true | ||||||
|  | 		g.notification.GroupInfoSetAnnouncementNotification(ctx, &sdkws.GroupInfoSetAnnouncementTips{Group: tips.Group, OpUser: tips.OpUser}, ¬ficationFlag) | ||||||
| 	} | 	} | ||||||
| 	if req.GroupInfoForSet.GroupName != "" { | 	if req.GroupInfoForSet.GroupName != "" { | ||||||
| 		num-- | 		num-- | ||||||
| @ -1097,7 +1099,7 @@ func (g *groupServer) SetGroupInfoEx(ctx context.Context, req *pbgroup.SetGroupI | |||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	updatedData, err := UpdateGroupInfoExMap(ctx, req) | 	updatedData, normalFlag, groupNameFlag, notificationFlag, err := UpdateGroupInfoExMap(ctx, req) | ||||||
| 	if len(updatedData) == 0 { | 	if len(updatedData) == 0 { | ||||||
| 		return &pbgroup.SetGroupInfoExResp{}, nil | 		return &pbgroup.SetGroupInfoExResp{}, nil | ||||||
| 	} | 	} | ||||||
| @ -1125,41 +1127,38 @@ func (g *groupServer) SetGroupInfoEx(ctx context.Context, req *pbgroup.SetGroupI | |||||||
| 		tips.OpUser = g.groupMemberDB2PB(opMember, 0) | 		tips.OpUser = g.groupMemberDB2PB(opMember, 0) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	num := len(updatedData) | 	if notificationFlag { | ||||||
| 
 |  | ||||||
| 	if req.Notification != nil { |  | ||||||
| 		num -= 3 |  | ||||||
| 
 |  | ||||||
| 		if req.Notification.Value != "" { | 		if req.Notification.Value != "" { | ||||||
| 			func() { | 			conversation := &pbconv.ConversationReq{ | ||||||
| 				conversation := &pbconversation.ConversationReq{ | 				ConversationID:   msgprocessor.GetConversationIDBySessionType(constant.ReadGroupChatType, req.GroupID), | ||||||
| 					ConversationID:   msgprocessor.GetConversationIDBySessionType(constant.ReadGroupChatType, req.GroupID), | 				ConversationType: constant.ReadGroupChatType, | ||||||
| 					ConversationType: constant.ReadGroupChatType, | 				GroupID:          req.GroupID, | ||||||
| 					GroupID:          req.GroupID, | 			} | ||||||
| 				} |  | ||||||
| 
 | 
 | ||||||
| 				resp, err := g.GetGroupMemberUserIDs(ctx, &pbgroup.GetGroupMemberUserIDsReq{GroupID: req.GroupID}) | 			resp, err := g.GetGroupMemberUserIDs(ctx, &pbgroup.GetGroupMemberUserIDsReq{GroupID: req.GroupID}) | ||||||
| 				if err != nil { | 			if err != nil { | ||||||
| 					log.ZWarn(ctx, "GetGroupMemberIDs is failed.", err) | 				log.ZWarn(ctx, "GetGroupMemberIDs is failed.", err) | ||||||
| 					return | 				return nil, err | ||||||
| 				} | 			} | ||||||
| 
 | 
 | ||||||
| 				conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.GroupNotification} | 			conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.GroupNotification} | ||||||
| 				if err := g.conversationClient.SetConversations(ctx, resp.UserIDs, conversation); err != nil { | 			if err := g.conversationClient.SetConversations(ctx, resp.UserIDs, conversation); err != nil { | ||||||
| 					log.ZWarn(ctx, "SetConversations", err, "UserIDs", resp.UserIDs, "conversation", conversation) | 				log.ZWarn(ctx, "SetConversations", err, "UserIDs", resp.UserIDs, "conversation", conversation) | ||||||
| 				} | 			} | ||||||
| 			}() |  | ||||||
| 
 | 
 | ||||||
| 			g.notification.GroupInfoSetAnnouncementNotification(ctx, &sdkws.GroupInfoSetAnnouncementTips{Group: tips.Group, OpUser: tips.OpUser}) | 			g.notification.GroupInfoSetAnnouncementNotification(ctx, &sdkws.GroupInfoSetAnnouncementTips{Group: tips.Group, OpUser: tips.OpUser}, ¬ificationFlag) | ||||||
|  | 		} else { | ||||||
|  | 			notificationFlag = false | ||||||
|  | 			g.notification.GroupInfoSetAnnouncementNotification(ctx, &sdkws.GroupInfoSetAnnouncementTips{Group: tips.Group, OpUser: tips.OpUser}, ¬ificationFlag) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if req.GroupName != nil { | 	if groupNameFlag { | ||||||
| 		num-- |  | ||||||
| 		g.notification.GroupInfoSetNameNotification(ctx, &sdkws.GroupInfoSetNameTips{Group: tips.Group, OpUser: tips.OpUser}) | 		g.notification.GroupInfoSetNameNotification(ctx, &sdkws.GroupInfoSetNameTips{Group: tips.Group, OpUser: tips.OpUser}) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if num > 0 { | 	// if updatedData > 0, send the normal notification | ||||||
|  | 	if normalFlag { | ||||||
| 		g.notification.GroupInfoSetNotification(ctx, tips) | 		g.notification.GroupInfoSetNotification(ctx, tips) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -349,7 +349,7 @@ func (g *NotificationSender) GroupInfoSetNameNotification(ctx context.Context, t | |||||||
| 	g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.GroupInfoSetNameNotification, tips) | 	g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.GroupInfoSetNameNotification, tips) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (g *NotificationSender) GroupInfoSetAnnouncementNotification(ctx context.Context, tips *sdkws.GroupInfoSetAnnouncementTips) { | func (g *NotificationSender) GroupInfoSetAnnouncementNotification(ctx context.Context, tips *sdkws.GroupInfoSetAnnouncementTips, sendMessage *bool) { | ||||||
| 	var err error | 	var err error | ||||||
| 	defer func() { | 	defer func() { | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| @ -360,7 +360,7 @@ func (g *NotificationSender) GroupInfoSetAnnouncementNotification(ctx context.Co | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	g.setVersion(ctx, &tips.GroupMemberVersion, &tips.GroupMemberVersionID, database.GroupMemberVersionName, tips.Group.GroupID) | 	g.setVersion(ctx, &tips.GroupMemberVersion, &tips.GroupMemberVersionID, database.GroupMemberVersionName, tips.Group.GroupID) | ||||||
| 	g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.GroupInfoSetAnnouncementNotification, tips, rpcclient.WithRpcGetUserName()) | 	g.Notification(ctx, mcontext.GetOpUserID(ctx), tips.Group.GroupID, constant.GroupInfoSetAnnouncementNotification, tips, notification.WithRpcGetUserName(), notification.WithSendMessage(sendMessage)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (g *NotificationSender) JoinGroupApplicationNotification(ctx context.Context, req *pbgroup.JoinGroupReq) { | func (g *NotificationSender) JoinGroupApplicationNotification(ctx context.Context, req *pbgroup.JoinGroupReq) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user