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 ( | ||||
| 	"context" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| 
 | ||||
| 	pbgroup "github.com/openimsdk/protocol/group" | ||||
| @ -55,41 +56,52 @@ func UpdateGroupInfoMap(ctx context.Context, group *sdkws.GroupInfoForSet) map[s | ||||
| 	return m | ||||
| } | ||||
| 
 | ||||
| func UpdateGroupInfoExMap(ctx context.Context, group *pbgroup.SetGroupInfoExReq) (map[string]any, error) { | ||||
| 	m := make(map[string]any) | ||||
| func UpdateGroupInfoExMap(ctx context.Context, group *pbgroup.SetGroupInfoExReq) (m map[string]any, normalFlag, groupNameFlag, notificationFlag bool, err error) { | ||||
| 	m = make(map[string]any) | ||||
| 
 | ||||
| 	if group.GroupName != nil { | ||||
| 		if group.GroupName.Value != "" { | ||||
| 		if strings.TrimSpace(group.GroupName.Value) != "" { | ||||
| 			m["group_name"] = group.GroupName.Value | ||||
| 			groupNameFlag = true | ||||
| 		} 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 { | ||||
| 		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_update_time"] = time.Now() | ||||
| 		m["notification_user_id"] = mcontext.GetOpUserID(ctx) | ||||
| 		m["notification_update_time"] = time.Now() | ||||
| 	} | ||||
| 	if group.Introduction != nil { | ||||
| 		m["introduction"] = group.Introduction.Value | ||||
| 		normalFlag = true | ||||
| 	} | ||||
| 	if group.FaceURL != nil { | ||||
| 		m["face_url"] = group.FaceURL.Value | ||||
| 		normalFlag = true | ||||
| 	} | ||||
| 	if group.NeedVerification != nil { | ||||
| 		m["need_verification"] = group.NeedVerification.Value | ||||
| 		normalFlag = true | ||||
| 	} | ||||
| 	if group.LookMemberInfo != nil { | ||||
| 		m["look_member_info"] = group.LookMemberInfo.Value | ||||
| 		normalFlag = true | ||||
| 	} | ||||
| 	if group.ApplyMemberFriend != nil { | ||||
| 		m["apply_member_friend"] = group.ApplyMemberFriend.Value | ||||
| 		normalFlag = true | ||||
| 	} | ||||
| 	if group.Ex != nil { | ||||
| 		m["ex"] = group.Ex.Value | ||||
| 		normalFlag = true | ||||
| 	} | ||||
| 
 | ||||
| 	return m, nil | ||||
| 	return m, normalFlag, groupNameFlag, notificationFlag, nil | ||||
| } | ||||
| 
 | ||||
| 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) | ||||
| 
 | ||||
| 	if req.GroupInfo.Notification != "" { | ||||
| 		notificationFlag := true | ||||
| 		g.notification.GroupInfoSetAnnouncementNotification(ctx, &sdkws.GroupInfoSetAnnouncementTips{ | ||||
| 			Group:  tips.Group, | ||||
| 			OpUser: tips.OpUser, | ||||
| 		}) | ||||
| 		}, ¬ificationFlag) | ||||
| 	} | ||||
| 
 | ||||
| 	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) | ||||
| 			} | ||||
| 		}() | ||||
| 		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 != "" { | ||||
| 		num-- | ||||
| @ -1097,7 +1099,7 @@ func (g *groupServer) SetGroupInfoEx(ctx context.Context, req *pbgroup.SetGroupI | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	updatedData, err := UpdateGroupInfoExMap(ctx, req) | ||||
| 	updatedData, normalFlag, groupNameFlag, notificationFlag, err := UpdateGroupInfoExMap(ctx, req) | ||||
| 	if len(updatedData) == 0 { | ||||
| 		return &pbgroup.SetGroupInfoExResp{}, nil | ||||
| 	} | ||||
| @ -1125,14 +1127,9 @@ func (g *groupServer) SetGroupInfoEx(ctx context.Context, req *pbgroup.SetGroupI | ||||
| 		tips.OpUser = g.groupMemberDB2PB(opMember, 0) | ||||
| 	} | ||||
| 
 | ||||
| 	num := len(updatedData) | ||||
| 
 | ||||
| 	if req.Notification != nil { | ||||
| 		num -= 3 | ||||
| 
 | ||||
| 	if notificationFlag { | ||||
| 		if req.Notification.Value != "" { | ||||
| 			func() { | ||||
| 				conversation := &pbconversation.ConversationReq{ | ||||
| 			conversation := &pbconv.ConversationReq{ | ||||
| 				ConversationID:   msgprocessor.GetConversationIDBySessionType(constant.ReadGroupChatType, req.GroupID), | ||||
| 				ConversationType: constant.ReadGroupChatType, | ||||
| 				GroupID:          req.GroupID, | ||||
| @ -1141,25 +1138,27 @@ func (g *groupServer) SetGroupInfoEx(ctx context.Context, req *pbgroup.SetGroupI | ||||
| 			resp, err := g.GetGroupMemberUserIDs(ctx, &pbgroup.GetGroupMemberUserIDsReq{GroupID: req.GroupID}) | ||||
| 			if err != nil { | ||||
| 				log.ZWarn(ctx, "GetGroupMemberIDs is failed.", err) | ||||
| 					return | ||||
| 				return nil, err | ||||
| 			} | ||||
| 
 | ||||
| 			conversation.GroupAtType = &wrapperspb.Int32Value{Value: constant.GroupNotification} | ||||
| 			if err := g.conversationClient.SetConversations(ctx, resp.UserIDs, conversation); err != nil { | ||||
| 				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 { | ||||
| 		num-- | ||||
| 	if groupNameFlag { | ||||
| 		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) | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -349,7 +349,7 @@ func (g *NotificationSender) GroupInfoSetNameNotification(ctx context.Context, t | ||||
| 	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 | ||||
| 	defer func() { | ||||
| 		if err != nil { | ||||
| @ -360,7 +360,7 @@ func (g *NotificationSender) GroupInfoSetAnnouncementNotification(ctx context.Co | ||||
| 		return | ||||
| 	} | ||||
| 	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) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user