Skip to content

Commit 31aaa32

Browse files
authored
refactor: remove fetch messages instead of search message clear cache. (#834)
Signed-off-by: Gordon <[email protected]>
1 parent af6b5a0 commit 31aaa32

File tree

7 files changed

+30
-66
lines changed

7 files changed

+30
-66
lines changed

Diff for: internal/conversation_msg/api.go

-54
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"github.com/openimsdk/openim-sdk-core/v3/pkg/content_type"
2323
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
2424
"github.com/openimsdk/openim-sdk-core/v3/pkg/sdk_params_callback"
25-
sdk "github.com/openimsdk/openim-sdk-core/v3/pkg/sdk_params_callback"
2625
"github.com/openimsdk/openim-sdk-core/v3/pkg/sdkerrs"
2726
"github.com/openimsdk/openim-sdk-core/v3/pkg/server_api_params"
2827
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
@@ -1022,56 +1021,3 @@ func (c *Conversation) GetInputStates(ctx context.Context, conversationID string
10221021
func (c *Conversation) ChangeInputStates(ctx context.Context, conversationID string, focus bool) error {
10231022
return c.typing.ChangeInputStates(ctx, conversationID, focus)
10241023
}
1025-
1026-
func (c *Conversation) FetchSurroundingMessages(ctx context.Context, req *sdk_params_callback.FetchSurroundingMessagesReq) (*sdk_params_callback.FetchSurroundingMessagesResp, error) {
1027-
conversationID := utils.GetConversationIDByMsg(req.StartMessage)
1028-
var message *model_struct.LocalChatLog
1029-
message, err := c.db.GetMessage(ctx, conversationID, req.StartMessage.ClientMsgID)
1030-
if err == nil {
1031-
if message.Status >= constant.MsgStatusHasDeleted {
1032-
return nil, sdkerrs.ErrMsgHasDeleted
1033-
}
1034-
} else {
1035-
if req.StartMessage.Seq == 0 {
1036-
return nil, sdkerrs.ErrMsgHasDeleted
1037-
}
1038-
var messages []*model_struct.LocalChatLog
1039-
c.fetchAndMergeMissingMessages(ctx, conversationID, []int64{req.StartMessage.Seq}, false, 1, 0, &messages, &sdk.GetAdvancedHistoryMessageListCallback{})
1040-
if len(messages) < 1 {
1041-
return nil, sdkerrs.ErrMsgHasDeleted
1042-
}
1043-
message = messages[0]
1044-
}
1045-
c.messagePullForwardEndSeqMap.Delete(conversationID, req.ViewType)
1046-
c.messagePullReverseEndSeqMap.Delete(conversationID, req.ViewType)
1047-
1048-
result := make([]*sdk_struct.MsgStruct, 0, req.Before+req.After+1)
1049-
if req.Before > 0 {
1050-
req := sdk.GetAdvancedHistoryMessageListParams{
1051-
ConversationID: conversationID,
1052-
Count: req.Before,
1053-
StartClientMsgID: req.StartMessage.ClientMsgID,
1054-
ViewType: req.ViewType,
1055-
}
1056-
val, err := c.getAdvancedHistoryMessageList(ctx, req, false)
1057-
if err != nil {
1058-
return nil, err
1059-
}
1060-
result = append(result, val.MessageList...)
1061-
}
1062-
result = append(result, LocalChatLogToMsgStruct(message))
1063-
if req.After > 0 {
1064-
req := sdk.GetAdvancedHistoryMessageListParams{
1065-
ConversationID: conversationID,
1066-
Count: req.After,
1067-
StartClientMsgID: req.StartMessage.ClientMsgID,
1068-
ViewType: req.ViewType,
1069-
}
1070-
val, err := c.getAdvancedHistoryMessageList(ctx, req, true)
1071-
if err != nil {
1072-
return nil, err
1073-
}
1074-
result = append(result, val.MessageList...)
1075-
}
1076-
return &sdk_params_callback.FetchSurroundingMessagesResp{MessageList: result}, nil
1077-
}

Diff for: internal/conversation_msg/conversation.go

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"golang.org/x/sync/errgroup"
2626

2727
"github.com/openimsdk/openim-sdk-core/v3/pkg/api"
28+
"github.com/openimsdk/openim-sdk-core/v3/pkg/cache"
2829
"github.com/openimsdk/openim-sdk-core/v3/pkg/constant"
2930
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
3031
sdk "github.com/openimsdk/openim-sdk-core/v3/pkg/sdk_params_callback"
@@ -326,6 +327,11 @@ func (c *Conversation) searchLocalMessages(ctx context.Context, searchParam *sdk
326327
var err error // Variable to store any errors encountered
327328
var conversationID string // Variable to store the current conversation ID
328329

330+
// Clear the sequence cache for pull-up and pull-down operations in the search view,
331+
// to prevent the completion operations from the previous round from affecting the next round
332+
c.messagePullForwardEndSeqMap.DeleteByViewType(cache.ViewSearch)
333+
c.messagePullReverseEndSeqMap.DeleteByViewType(cache.ViewSearch)
334+
329335
// Set the end time for the search; if SearchTimePosition is 0, use the current timestamp
330336
if searchParam.SearchTimePosition == 0 {
331337
endTime = time.Now().Unix()

Diff for: open_im_sdk/conversation_msg.go

-4
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,3 @@ func ChangeInputStates(callback open_im_sdk_callback.Base, operationID string, c
194194
func GetInputStates(callback open_im_sdk_callback.Base, operationID string, conversationID string, userID string) {
195195
call(callback, operationID, UserForSDK.Conversation().GetInputStates, conversationID, userID)
196196
}
197-
198-
func FetchSurroundingMessages(callback open_im_sdk_callback.Base, operationID string, req string) {
199-
call(callback, operationID, UserForSDK.Conversation().FetchSurroundingMessages, req)
200-
}

Diff for: pkg/cache/cache.go

+10
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,16 @@ func (c *Cache[K, V]) DeleteAll() {
5858
})
5959
}
6060

61+
// DeleteCon deletes the value for a key only if the provided condition function returns true.
62+
func (c *Cache[K, V]) DeleteCon(condition func(key K, value V) bool) {
63+
c.m.Range(func(rawKey, rawValue interface{}) bool {
64+
if condition(rawKey.(K), rawValue.(V)) {
65+
c.m.Delete(rawKey)
66+
}
67+
return true // Continue iteration
68+
})
69+
}
70+
6171
// RangeAll returns all values in the map.
6272
func (c *Cache[K, V]) RangeAll() (values []V) {
6373
c.m.Range(func(rawKey, rawValue interface{}) bool {

Diff for: pkg/cache/conversation_seq_cache.go

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package cache
22

3-
import "github.com/openimsdk/tools/utils/stringutil"
3+
import (
4+
"strings"
5+
6+
"github.com/openimsdk/tools/utils/stringutil"
7+
)
48

59
const (
610
ViewHistory = iota
@@ -28,10 +32,18 @@ func (c ConversationSeqContextCache) Store(conversationID string, viewType int,
2832
c.Cache.Store(c.getConversationViewTypeKey(conversationID, viewType), thisEndSeq)
2933

3034
}
35+
3136
func (c ConversationSeqContextCache) StoreWithFunc(conversationID string, viewType int, thisEndSeq int64, fn func(key string, value int64) bool) {
3237

3338
c.Cache.StoreWithFunc(c.getConversationViewTypeKey(conversationID, viewType), thisEndSeq, fn)
3439
}
40+
3541
func (c ConversationSeqContextCache) getConversationViewTypeKey(conversationID string, viewType int) string {
36-
return conversationID + "_" + stringutil.IntToString(viewType)
42+
return conversationID + "::viewType::" + stringutil.IntToString(viewType)
43+
}
44+
45+
func (c ConversationSeqContextCache) DeleteByViewType(viewType int) {
46+
c.Cache.DeleteCon(func(key string, value int64) bool {
47+
return strings.Contains(key, "::viewType::"+stringutil.IntToString(viewType))
48+
})
3749
}

Diff for: wasm/cmd/main.go

-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ func registerFunc() {
110110

111111
js.Global().Set("changeInputStates", js.FuncOf(wrapperConMsg.ChangeInputStates))
112112
js.Global().Set("getInputStates", js.FuncOf(wrapperConMsg.GetInputStates))
113-
js.Global().Set("fetchSurroundingMessages", js.FuncOf(wrapperConMsg.FetchSurroundingMessages))
114113

115114
//register group func
116115
wrapperGroup := wasm_wrapper.NewWrapperGroup(globalFuc)

Diff for: wasm/wasm_wrapper/wasm_conversation_msg.go

-5
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,3 @@ func (w *WrapperConMsg) GetInputStates(_ js.Value, args []js.Value) interface{}
270270
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
271271
return event_listener.NewCaller(open_im_sdk.GetInputStates, callback, &args).AsyncCallWithCallback()
272272
}
273-
274-
func (w *WrapperConMsg) FetchSurroundingMessages(_ js.Value, args []js.Value) interface{} {
275-
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
276-
return event_listener.NewCaller(open_im_sdk.FetchSurroundingMessages, callback, &args).AsyncCallWithCallback()
277-
}

0 commit comments

Comments
 (0)