fix: reinstall app sync data split.
This commit is contained in:
@@ -16,6 +16,7 @@ package interaction
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"strings"
|
||||
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/common"
|
||||
@@ -148,15 +149,31 @@ func (m *MsgSyncer) compareSeqsAndBatchSync(ctx context.Context, maxSeqToSync ma
|
||||
messagesSeqMap[conversationID] = seq
|
||||
}
|
||||
}
|
||||
|
||||
var notificationSeqs []*model_struct.NotificationSeqs
|
||||
|
||||
for conversationID, seq := range notificationsSeqMap {
|
||||
err := m.db.SetNotificationSeq(ctx, conversationID, seq)
|
||||
if err != nil {
|
||||
log.ZWarn(ctx, "SetNotificationSeq err", err, "conversationID", conversationID, "seq", seq)
|
||||
continue
|
||||
} else {
|
||||
m.syncedMaxSeqs[conversationID] = seq
|
||||
}
|
||||
notificationSeqs = append(notificationSeqs, &model_struct.NotificationSeqs{
|
||||
ConversationID: conversationID,
|
||||
Seq: seq,
|
||||
})
|
||||
m.syncedMaxSeqs[conversationID] = seq
|
||||
}
|
||||
|
||||
err := m.db.BatchInsertNotificationSeq(ctx, notificationSeqs)
|
||||
if err != nil {
|
||||
log.ZWarn(ctx, "BatchInsertNotificationSeq err", err)
|
||||
}
|
||||
|
||||
//for conversationID, seq := range notificationsSeqMap {
|
||||
// err := m.db.SetNotificationSeq(ctx, conversationID, seq)
|
||||
// if err != nil {
|
||||
// log.ZWarn(ctx, "SetNotificationSeq err", err, "conversationID", conversationID, "seq", seq)
|
||||
// continue
|
||||
// } else {
|
||||
// m.syncedMaxSeqs[conversationID] = seq
|
||||
// }
|
||||
//}
|
||||
for conversationID, maxSeq := range messagesSeqMap {
|
||||
if syncedMaxSeq, ok := m.syncedMaxSeqs[conversationID]; ok {
|
||||
if maxSeq > syncedMaxSeq {
|
||||
@@ -217,7 +234,12 @@ func (m *MsgSyncer) pushTriggerAndSync(ctx context.Context, pullMsgs map[string]
|
||||
|
||||
// Called after successful reconnection to synchronize the latest message
|
||||
func (m *MsgSyncer) doConnected(ctx context.Context) {
|
||||
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.MsgSyncBegin}, m.conversationCh)
|
||||
reinstalled := m.reinstalled
|
||||
if reinstalled {
|
||||
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.AppDataSyncStart}, m.conversationCh)
|
||||
} else {
|
||||
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.MsgSyncBegin}, m.conversationCh)
|
||||
}
|
||||
var resp sdkws.GetMaxSeqResp
|
||||
if err := m.longConnMgr.SendReqWaitResp(m.ctx, &sdkws.GetMaxSeqReq{UserID: m.loginUserID}, constant.GetNewestSeq, &resp); err != nil {
|
||||
log.ZError(m.ctx, "get max seq error", err)
|
||||
@@ -227,7 +249,11 @@ func (m *MsgSyncer) doConnected(ctx context.Context) {
|
||||
log.ZDebug(m.ctx, "get max seq success", "resp", resp)
|
||||
}
|
||||
m.compareSeqsAndBatchSync(ctx, resp.MaxSeqs, connectPullNums)
|
||||
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.MsgSyncEnd}, m.conversationCh)
|
||||
if reinstalled {
|
||||
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.AppDataSyncFinish}, m.conversationCh)
|
||||
} else {
|
||||
common.TriggerCmdNotification(m.ctx, sdk_struct.CmdNewMsgComeToConversation{SyncFlag: constant.MsgSyncEnd}, m.conversationCh)
|
||||
}
|
||||
}
|
||||
|
||||
func IsNotification(conversationID string) bool {
|
||||
@@ -363,24 +389,24 @@ func (m *MsgSyncer) syncMsgBySeqs(ctx context.Context, conversationID string, se
|
||||
|
||||
// triggers a conversation with a new message.
|
||||
func (m *MsgSyncer) triggerConversation(ctx context.Context, msgs map[string]*sdkws.PullMsgs) error {
|
||||
if len(msgs) >= 0 {
|
||||
if len(msgs) > 0 {
|
||||
err := common.TriggerCmdNewMsgCome(ctx, sdk_struct.CmdNewMsgComeToConversation{Msgs: msgs}, m.conversationCh)
|
||||
if err != nil {
|
||||
log.ZError(ctx, "triggerCmdNewMsgCome err", err, "msgs", msgs)
|
||||
}
|
||||
log.ZDebug(ctx, "triggerConversation", "msgs", msgs)
|
||||
return err
|
||||
} else {
|
||||
log.ZDebug(ctx, "triggerConversation is nil", "msgs", msgs)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *MsgSyncer) triggerNotification(ctx context.Context, msgs map[string]*sdkws.PullMsgs) error {
|
||||
if len(msgs) >= 0 {
|
||||
err := common.TriggerCmdNotification(ctx, sdk_struct.CmdNewMsgComeToConversation{Msgs: msgs}, m.conversationCh)
|
||||
if err != nil {
|
||||
log.ZError(ctx, "triggerCmdNewMsgCome err", err, "msgs", msgs)
|
||||
}
|
||||
return err
|
||||
if len(msgs) > 0 {
|
||||
common.TriggerCmdNotification(ctx, sdk_struct.CmdNewMsgComeToConversation{Msgs: msgs}, m.conversationCh)
|
||||
} else {
|
||||
log.ZDebug(ctx, "triggerNotification is nil", "msgs", msgs)
|
||||
}
|
||||
return nil
|
||||
|
||||
|
||||
Reference in New Issue
Block a user