fix:优化同步最近会话

This commit is contained in:
SL 2025-01-14 18:14:27 +08:00
parent deb45d9c6a
commit ce924cdd04
8 changed files with 109 additions and 30 deletions

View File

@ -522,9 +522,10 @@ public class ConversationDbManager {
WKIMApplication.getInstance().getDbHelper().getDb().endTransaction();
}
List<WKUIConversationMsg> uiMsgList = ConversationDbManager.getInstance().queryWithChannelIds(channelIds);
for (int i = 0, size = uiMsgList.size(); i < size; i++) {
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsgList.get(i), i == uiMsgList.size() - 1, "saveMsgExtras");
}
// for (int i = 0, size = uiMsgList.size(); i < size; i++) {
// WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsgList.get(i), i == uiMsgList.size() - 1, "saveMsgExtras");
// }
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsgList,"saveMsgExtras");
}
public long queryMsgExtraMaxVersion() {

View File

@ -199,8 +199,9 @@ public class ReminderDBManager {
if (maps.containsKey(key)) {
uiMsgList.get(i).setReminderList(maps.get(key));
}
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsgList.get(i), i == list.size() - 1, "saveReminders");
// WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsgList.get(i), i == list.size() - 1, "saveReminders");
}
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsgList,"saveReminders");
return reminderList;
}

View File

@ -0,0 +1,9 @@
package com.xinbida.wukongim.interfaces;
import com.xinbida.wukongim.entity.WKUIConversationMsg;
import java.util.List;
public interface IAllConversations {
void onResult(List<WKUIConversationMsg> list);
}

View File

@ -0,0 +1,9 @@
package com.xinbida.wukongim.interfaces;
import com.xinbida.wukongim.entity.WKUIConversationMsg;
import java.util.List;
public interface IRefreshConversationMsgList {
void onRefresh(List<WKUIConversationMsg> list);
}

View File

@ -18,8 +18,10 @@ import com.xinbida.wukongim.entity.WKSyncChat;
import com.xinbida.wukongim.entity.WKSyncConvMsgExtra;
import com.xinbida.wukongim.entity.WKSyncRecent;
import com.xinbida.wukongim.entity.WKUIConversationMsg;
import com.xinbida.wukongim.interfaces.IAllConversations;
import com.xinbida.wukongim.interfaces.IDeleteConversationMsg;
import com.xinbida.wukongim.interfaces.IRefreshConversationMsg;
import com.xinbida.wukongim.interfaces.IRefreshConversationMsgList;
import com.xinbida.wukongim.interfaces.ISyncConversationChat;
import com.xinbida.wukongim.interfaces.ISyncConversationChatBack;
import com.xinbida.wukongim.message.type.WKConnectStatus;
@ -58,7 +60,8 @@ public class ConversationManager extends BaseManager {
}
//监听刷新最近会话
private ConcurrentHashMap<String, IRefreshConversationMsg> refreshMsgList;
private ConcurrentHashMap<String, IRefreshConversationMsg> refreshMsgMap;
private ConcurrentHashMap<String, IRefreshConversationMsgList> refreshMsgListMap;
//移除某个会话
private ConcurrentHashMap<String, IDeleteConversationMsg> iDeleteMsgList;
@ -74,6 +77,16 @@ public class ConversationManager extends BaseManager {
return ConversationDbManager.getInstance().queryAll();
}
public void getAll(IAllConversations iAllConversations) {
if (iAllConversations == null) {
return;
}
dispatchQueuePool.execute(() -> {
List<WKUIConversationMsg> list = ConversationDbManager.getInstance().queryAll();
iAllConversations.onResult(list);
});
}
public List<WKConversationMsg> getWithChannelType(byte channelType) {
return ConversationDbManager.getInstance().queryWithChannelType(channelType);
}
@ -119,6 +132,18 @@ public class ConversationManager extends BaseManager {
return ConversationDbManager.getInstance().clearEmpty();
}
public void addOnRefreshMsgListListener(String key, IRefreshConversationMsgList listener) {
if (TextUtils.isEmpty(key) || listener == null) return;
if (refreshMsgListMap == null) {
refreshMsgListMap = new ConcurrentHashMap<>();
}
refreshMsgListMap.put(key, listener);
}
public void removeOnRefreshMsgListListener(String key) {
if (TextUtils.isEmpty(key) || refreshMsgListMap == null) return;
refreshMsgListMap.remove(key);
}
/**
* 监听刷新最近会话
@ -127,24 +152,49 @@ public class ConversationManager extends BaseManager {
*/
public void addOnRefreshMsgListener(String key, IRefreshConversationMsg listener) {
if (TextUtils.isEmpty(key) || listener == null) return;
if (refreshMsgList == null)
refreshMsgList = new ConcurrentHashMap<>();
refreshMsgList.put(key, listener);
if (refreshMsgMap == null)
refreshMsgMap = new ConcurrentHashMap<>();
refreshMsgMap.put(key, listener);
}
public void removeOnRefreshMsgListener(String key) {
if (TextUtils.isEmpty(key) || refreshMsgList == null) return;
refreshMsgList.remove(key);
if (TextUtils.isEmpty(key) || refreshMsgMap == null) return;
refreshMsgMap.remove(key);
}
/**
* 设置刷新最近会话
*/
public void setOnRefreshMsg(WKUIConversationMsg conversationMsg, boolean isEnd, String from) {
if (refreshMsgList != null && !refreshMsgList.isEmpty() && conversationMsg != null) {
// public void setOnRefreshMsg(WKUIConversationMsg conversationMsg, boolean isEnd, String from) {
// if (refreshMsgMap != null && !refreshMsgMap.isEmpty() && conversationMsg != null) {
// runOnMainThread(() -> {
// for (Map.Entry<String, IRefreshConversationMsg> entry : refreshMsgMap.entrySet()) {
// entry.getValue().onRefreshConversationMsg(conversationMsg, isEnd);
// }
// });
// }
// }
public void setOnRefreshMsg(WKUIConversationMsg msg, String from) {
List<WKUIConversationMsg> list = new ArrayList<>();
list.add(msg);
this.setOnRefreshMsg(list, from);
}
public void setOnRefreshMsg(List<WKUIConversationMsg> list, String from) {
if (WKCommonUtils.isEmpty(list)) return;
if (refreshMsgMap != null && !refreshMsgMap.isEmpty()) {
runOnMainThread(() -> {
for (Map.Entry<String, IRefreshConversationMsg> entry : refreshMsgList.entrySet()) {
entry.getValue().onRefreshConversationMsg(conversationMsg, isEnd);
for (int i = 0, size = list.size(); i < size; i++) {
for (Map.Entry<String, IRefreshConversationMsg> entry : refreshMsgMap.entrySet()) {
entry.getValue().onRefreshConversationMsg(list.get(i), i == list.size() - 1);
}
}
});
}
if (refreshMsgListMap != null && !refreshMsgListMap.isEmpty()) {
runOnMainThread(() -> {
for (Map.Entry<String, IRefreshConversationMsgList> entry : refreshMsgListMap.entrySet()) {
entry.getValue().onRefresh(list);
}
});
}
@ -177,7 +227,7 @@ public class ConversationManager extends BaseManager {
boolean result = ConversationDbManager.getInstance().updateRedDot(channelID, channelType, redDot);
if (result) {
WKUIConversationMsg msg = getUIConversationMsg(channelID, channelType);
setOnRefreshMsg(msg, true, "updateRedDot");
setOnRefreshMsg(msg, "updateRedDot");
}
}
@ -189,7 +239,9 @@ public class ConversationManager extends BaseManager {
boolean result = ConversationDbManager.getInstance().insertOrUpdateMsgExtra(extra);
if (result) {
WKUIConversationMsg msg = getUIConversationMsg(extra.channelID, extra.channelType);
setOnRefreshMsg(msg, true, "updateMsgExtra");
List<WKUIConversationMsg> list = new ArrayList<>();
list.add(msg);
setOnRefreshMsg(list, "updateMsgExtra");
}
}
@ -240,9 +292,11 @@ public class ConversationManager extends BaseManager {
if (iSyncConversationChat != null) {
long version = ConversationDbManager.getInstance().queryMaxVersion();
String lastMsgSeqStr = ConversationDbManager.getInstance().queryLastMsgSeqs();
runOnMainThread(() -> iSyncConversationChat.syncConversationChat(lastMsgSeqStr, 20, version, syncChat -> {
runOnMainThread(() -> iSyncConversationChat.syncConversationChat(lastMsgSeqStr, 10, version, syncChat -> {
dispatchQueuePool.execute(() -> saveSyncChat(syncChat, () -> iSyncConversationChatBack.onBack(syncChat)));
}));
} else {
WKLoggerUtils.getInstance().e("未设置同步最近会话事件");
}
}
@ -376,9 +430,10 @@ public class ConversationManager extends BaseManager {
}
if (WKCommonUtils.isNotEmpty(uiMsgList)) {
for (int i = 0, size = uiMsgList.size(); i < size; i++) {
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsgList.get(i), i == uiMsgList.size() - 1, "saveSyncChat");
}
setOnRefreshMsg(uiMsgList, "saveSyncChat");
// for (int i = 0, size = uiMsgList.size(); i < size; i++) {
// WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsgList.get(i), i == uiMsgList.size() - 1, "saveSyncChat");
// }
}
}

View File

@ -398,16 +398,19 @@ public class MsgManager extends BaseManager {
}
if (isAdd) deleteMsgList.add(list.get(i));
}
List<WKUIConversationMsg> uiMsgList = new ArrayList<>();
for (int i = 0, size = deleteMsgList.size(); i < size; i++) {
WKMsg msg = MsgDbManager.getInstance().queryMaxOrderSeqMsgWithChannel(deleteMsgList.get(i).channelID, deleteMsgList.get(i).channelType);
if (msg != null) {
WKUIConversationMsg uiMsg = WKIM.getInstance().getConversationManager().updateWithWKMsg(msg);
if (uiMsg != null) {
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsg, i == deleteMsgList.size()
- 1, "deleteWithClientMsgNOList");
uiMsgList.add(uiMsg);
// WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsg, i == deleteMsgList.size()
// - 1, "deleteWithClientMsgNOList");
}
}
}
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsgList,"deleteWithClientMsgNOList");
}
public List<WKMsg> getExpireMessages(int limit) {
@ -451,7 +454,7 @@ public class MsgManager extends BaseManager {
WKMsg tempMsg = MsgDbManager.getInstance().queryMaxOrderSeqMsgWithChannel(msg.channelID, msg.channelType);
if (tempMsg != null) {
WKUIConversationMsg uiMsg = ConversationDbManager.getInstance().insertOrUpdateWithMsg(tempMsg, 0);
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsg, true, "deleteWithClientMsgNO");
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsg, "deleteWithClientMsgNO");
}
}
}
@ -672,7 +675,7 @@ public class MsgManager extends BaseManager {
pushNewMsg(wkMsg);
else setRefreshMsg(wkMsg, true);
WKUIConversationMsg msg = ConversationDbManager.getInstance().insertOrUpdateWithMsg(wkMsg, addRedDots ? 1 : 0);
WKIM.getInstance().getConversationManager().setOnRefreshMsg(msg, true, "insertAndUpdateConversationMsg");
WKIM.getInstance().getConversationManager().setOnRefreshMsg(msg, "insertAndUpdateConversationMsg");
}
/**
@ -843,7 +846,7 @@ public class MsgManager extends BaseManager {
}
WKIM.getInstance().getConversationManager().updateWithMsg(conversationMsg);
WKUIConversationMsg wkuiConversationMsg = WKIM.getInstance().getConversationManager().getUIConversationMsg(channel.channelID, channel.channelType);
WKIM.getInstance().getConversationManager().setOnRefreshMsg(wkuiConversationMsg, true, TAG + " saveRemoteExtraMsg");
WKIM.getInstance().getConversationManager().setOnRefreshMsg(wkuiConversationMsg, TAG + " saveRemoteExtraMsg");
}
}
getMsgReactionsAndRefreshMsg(messageIds, updatedMsgList);

View File

@ -351,7 +351,7 @@ public class MessageHandler {
if (isSave) {
//如果存在艾特情况直接将消息存储
WKUIConversationMsg conversationMsg = ConversationDbManager.getInstance().insertOrUpdateWithMsg(lastMsg, 1);
WKIM.getInstance().getConversationManager().setOnRefreshMsg(conversationMsg, true, "cutData");
WKIM.getInstance().getConversationManager().setOnRefreshMsg(conversationMsg, "cutData");
continue;
}
@ -376,9 +376,10 @@ public class MessageHandler {
refreshList.add(conversationMsg);
}
}
for (int i = 0, size = refreshList.size(); i < size; i++) {
ConversationManager.getInstance().setOnRefreshMsg(refreshList.get(i), i == refreshList.size() - 1, "groupMsg");
}
// for (int i = 0, size = refreshList.size(); i < size; i++) {
// ConversationManager.getInstance().setOnRefreshMsg(refreshList.get(i), i == refreshList.size() - 1, "groupMsg");
// }
WKIM.getInstance().getConversationManager().setOnRefreshMsg(refreshList,"groupMsg");
}
public WKMsg parsingMsg(WKMsg message) {

View File

@ -607,7 +607,7 @@ public class WKConnection {
uiMsg.setRemoteMsgExtra(new WKConversationMsgExtra());
}
uiMsg.getRemoteMsgExtra().browseTo = browseTo;
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsg, true, "getSendBaseMsg");
WKIM.getInstance().getConversationManager().setOnRefreshMsg(uiMsg, "getSendBaseMsg");
}
}
}