fix: group info get is empty when user not in this group.

dev_1
Gordon 1 year ago
parent 0e64d54534
commit b162725bd6
  1. 3
      go/chao-sdk-core/internal/conversation_msg/conversation_notification.go
  2. 8
      go/chao-sdk-core/internal/conversation_msg/sync.go
  3. 12
      go/chao-sdk-core/pkg/syncer/syncer.go

@ -73,7 +73,7 @@ func (c *Conversation) doNotificationNew(c2v common.Cmd2Value) {
} }
syncFunctions := []func(c context.Context) error{ syncFunctions := []func(c context.Context) error{
c.group.SyncAllJoinedGroupsAndMembers, c.friend.IncrSyncFriends, c.group.SyncAllJoinedGroupsAndMembers, c.friend.IncrSyncFriends, c.SyncAllConversations,
} }
for _, syncFunc := range syncFunctions { for _, syncFunc := range syncFunctions {
@ -92,7 +92,6 @@ func (c *Conversation) doNotificationNew(c2v common.Cmd2Value) {
case constant.MsgSyncEnd: case constant.MsgSyncEnd:
log.ZDebug(ctx, "MsgSyncEnd", "time", time.Since(c.startTime).Milliseconds()) log.ZDebug(ctx, "MsgSyncEnd", "time", time.Since(c.startTime).Milliseconds())
defer c.ConversationListener().OnSyncServerFinish() defer c.ConversationListener().OnSyncServerFinish()
go c.SyncAllConversations(ctx)
} }
for conversationID, msgs := range allMsg { for conversationID, msgs := range allMsg {

@ -26,7 +26,7 @@ import (
"github.com/openimsdk/tools/log" "github.com/openimsdk/tools/log"
) )
func (c *Conversation) SyncConversationsAndTriggerCallback(ctx context.Context, conversationsOnServer []*model_struct.LocalConversation) error { func (c *Conversation) SyncConversationsAndTriggerCallback(ctx context.Context, conversationsOnServer []*model_struct.LocalConversation, skipNotice bool) error {
conversationsOnLocal, err := c.db.GetAllConversations(ctx) conversationsOnLocal, err := c.db.GetAllConversations(ctx)
if err != nil { if err != nil {
return err return err
@ -39,7 +39,7 @@ func (c *Conversation) SyncConversationsAndTriggerCallback(ctx context.Context,
c.doUpdateConversation(common.Cmd2Value{Value: common.UpdateConNode{ConID: server.ConversationID, Action: constant.ConChange, Args: []string{server.ConversationID}}}) c.doUpdateConversation(common.Cmd2Value{Value: common.UpdateConNode{ConID: server.ConversationID, Action: constant.ConChange, Args: []string{server.ConversationID}}})
} }
return nil return nil
}, true); err != nil { }, true, skipNotice); err != nil {
return err return err
} }
return nil return nil
@ -50,7 +50,7 @@ func (c *Conversation) SyncConversations(ctx context.Context, conversationIDs []
if err != nil { if err != nil {
return err return err
} }
return c.SyncConversationsAndTriggerCallback(ctx, conversationsOnServer) return c.SyncConversationsAndTriggerCallback(ctx, conversationsOnServer, false)
} }
func (c *Conversation) SyncAllConversations(ctx context.Context) error { func (c *Conversation) SyncAllConversations(ctx context.Context) error {
@ -60,7 +60,7 @@ func (c *Conversation) SyncAllConversations(ctx context.Context) error {
return err return err
} }
log.ZDebug(ctx, "get server cost time", "cost time", time.Since(ccTime), "conversation on server", conversationsOnServer) log.ZDebug(ctx, "get server cost time", "cost time", time.Since(ccTime), "conversation on server", conversationsOnServer)
return c.SyncConversationsAndTriggerCallback(ctx, conversationsOnServer) return c.SyncConversationsAndTriggerCallback(ctx, conversationsOnServer, true)
} }
func (c *Conversation) SyncAllConversationHashReadSeqs(ctx context.Context) error { func (c *Conversation) SyncAllConversationHashReadSeqs(ctx context.Context) error {

@ -243,9 +243,13 @@ func (s *Syncer[T, RESP, V]) Sync(ctx context.Context, serverData []T, localData
} }
}() }()
skipDeletion := false skipDeletion := false
skipNotice := false
if len(skipDeletionAndNotice) > 0 { if len(skipDeletionAndNotice) > 0 {
skipDeletion = skipDeletionAndNotice[0] skipDeletion = skipDeletionAndNotice[0]
} }
if len(skipDeletionAndNotice) > 1 {
skipNotice = skipDeletionAndNotice[1]
}
// If both server and local data are empty, log and return. // If both server and local data are empty, log and return.
if len(serverData) == 0 && len(localData) == 0 { if len(serverData) == 0 && len(localData) == 0 {
@ -271,10 +275,12 @@ func (s *Syncer[T, RESP, V]) Sync(ctx context.Context, serverData []T, localData
log.ZError(ctx, "sync insert failed", err, "type", s.ts, "server", server, "local", local) log.ZError(ctx, "sync insert failed", err, "type", s.ts, "server", server, "local", local)
return err return err
} }
if !skipNotice {
if err := s.onNotice(ctx, Insert, server, local, notice); err != nil { if err := s.onNotice(ctx, Insert, server, local, notice); err != nil {
log.ZError(ctx, "sync notice insert failed", err, "type", s.ts, "server", server, "local", local) log.ZError(ctx, "sync notice insert failed", err, "type", s.ts, "server", server, "local", local)
return err return err
} }
}
continue continue
} }
@ -283,10 +289,12 @@ func (s *Syncer[T, RESP, V]) Sync(ctx context.Context, serverData []T, localData
// If the local and server items are equal, notify and continue. // If the local and server items are equal, notify and continue.
if s.eq(server, local) { if s.eq(server, local) {
if !skipNotice {
if err := s.onNotice(ctx, Unchanged, local, server, notice); err != nil { if err := s.onNotice(ctx, Unchanged, local, server, notice); err != nil {
log.ZError(ctx, "sync notice unchanged failed", err, "type", s.ts, "server", server, "local", local) log.ZError(ctx, "sync notice unchanged failed", err, "type", s.ts, "server", server, "local", local)
return err return err
} }
}
continue continue
} }
@ -296,11 +304,13 @@ func (s *Syncer[T, RESP, V]) Sync(ctx context.Context, serverData []T, localData
log.ZError(ctx, "sync update failed", err, "type", s.ts, "server", server, "local", local) log.ZError(ctx, "sync update failed", err, "type", s.ts, "server", server, "local", local)
return err return err
} }
if !skipNotice {
if err := s.onNotice(ctx, Update, server, local, notice); err != nil { if err := s.onNotice(ctx, Update, server, local, notice); err != nil {
log.ZError(ctx, "sync notice update failed", err, "type", s.ts, "server", server, "local", local) log.ZError(ctx, "sync notice update failed", err, "type", s.ts, "server", server, "local", local)
return err return err
} }
} }
}
// Check the skipDeletion flag; if set, skip deletion. // Check the skipDeletion flag; if set, skip deletion.
if skipDeletion { if skipDeletion {
@ -315,11 +325,13 @@ func (s *Syncer[T, RESP, V]) Sync(ctx context.Context, serverData []T, localData
return err return err
} }
var server T var server T
if !skipNotice {
if err := s.onNotice(ctx, Delete, server, local, notice); err != nil { if err := s.onNotice(ctx, Delete, server, local, notice); err != nil {
log.ZError(ctx, "sync notice delete failed", err, "type", s.ts, "local", local) log.ZError(ctx, "sync notice delete failed", err, "type", s.ts, "local", local)
return err return err
} }
} }
}
return nil return nil
} }

Loading…
Cancel
Save