From ef93a1f42e41a9eed6421d4fda0d9ae80aa1b3f0 Mon Sep 17 00:00:00 2001
From: Gordon <1432970085@qq.com>
Date: Tue, 7 Jun 2022 17:45:07 +0800
Subject: [PATCH] add conversation sync

---
 internal/rpc/group/group.go | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go
index c2b2d27ca..c132c9248 100644
--- a/internal/rpc/group/group.go
+++ b/internal/rpc/group/group.go
@@ -12,6 +12,7 @@ import (
 	cp "Open_IM/pkg/common/utils"
 	"Open_IM/pkg/grpc-etcdv3/getcdv3"
 	pbCache "Open_IM/pkg/proto/cache"
+	pbConversation "Open_IM/pkg/proto/conversation"
 	pbGroup "Open_IM/pkg/proto/group"
 	open_im_sdk "Open_IM/pkg/proto/sdk_ws"
 	pbUser "Open_IM/pkg/proto/user"
@@ -934,6 +935,42 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf
 	if changedType != 0 {
 		chat.GroupInfoSetNotification(req.OperationID, req.OpUserID, req.GroupInfo.GroupID, groupName, notification, introduction, faceURL)
 	}
+	if req.GroupInfo.Notification != "" {
+		//get group member user id
+		getGroupMemberIDListFromCacheReq := &pbCache.GetGroupMemberIDListFromCacheReq{OperationID: req.OperationID, GroupID: req.GroupInfo.GroupID}
+		etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName)
+		client := pbCache.NewCacheClient(etcdConn)
+		cacheResp, err := client.GetGroupMemberIDListFromCache(context.Background(), getGroupMemberIDListFromCacheReq)
+		if err != nil {
+			log.NewError(req.OperationID, "GetGroupMemberIDListFromCache rpc call failed ", err.Error())
+			return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil
+		}
+		if cacheResp.CommonResp.ErrCode != 0 {
+			log.NewError(req.OperationID, "GetGroupMemberIDListFromCache rpc logic call failed ", cacheResp.String())
+			return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil
+		}
+		var conversationReq pbConversation.ModifyConversationFieldReq
+
+		conversation := pbConversation.Conversation{
+			OwnerUserID:      req.OpUserID,
+			ConversationID:   utils.GetConversationIDBySessionType(req.GroupInfo.GroupID, constant.GroupChatType),
+			ConversationType: constant.GroupChatType,
+			GroupID:          req.GroupInfo.GroupID,
+		}
+		conversationReq.Conversation = &conversation
+		conversationReq.OperationID = req.OperationID
+		conversationReq.FieldType = constant.FieldGroupAtType
+		conversation.GroupAtType = constant.GroupNotification
+		conversationReq.UserIDList = cacheResp.UserIDList
+		nEtcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImConversationName)
+		nClient := pbConversation.NewConversationClient(nEtcdConn)
+		conversationReply, err := nClient.ModifyConversationField(context.Background(), &conversationReq)
+		if err != nil {
+			log.NewError(conversationReq.OperationID, "ModifyConversationField rpc failed, ", conversationReq.String(), err.Error())
+		} else if conversationReply.CommonResp.ErrCode != 0 {
+			log.NewError(conversationReq.OperationID, "ModifyConversationField rpc failed, ", conversationReq.String(), conversationReply.String())
+		}
+	}
 	return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{}}, nil
 }