mirror of
https://github.com/WuKongIM/WuKongIMAndroidSDK
synced 2025-06-06 17:50:53 +00:00
fix:优化同步最近会话
This commit is contained in:
parent
deb45d9c6a
commit
ce924cdd04
@ -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() {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
@ -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");
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user