|
|
@@ -492,8 +492,7 @@ open class ConversationListViewModel(
|
|
|
)
|
|
|
}
|
|
|
ConversationListType.All.type -> {
|
|
|
- IMService.innerService
|
|
|
- .getConversationListByPage(
|
|
|
+ getConversationListByPage(
|
|
|
callback, 0, sizePerPage, isTopPriority, *supportedTypes
|
|
|
)
|
|
|
}
|
|
|
@@ -563,6 +562,58 @@ open class ConversationListViewModel(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 因为会通过dataFilter.filtered进行过滤的缘故,最新返回数量可能少于一页
|
|
|
+ * 如果少得比较多(会话少于一屏)就会让用户造成会话消失错觉,所以做递归拉取,直到拉满或者没有了
|
|
|
+ */
|
|
|
+ private fun getConversationListByPage(
|
|
|
+ callback: IRongCoreCallback.ResultCallback<List<Conversation>?>?,
|
|
|
+ timeStamp: Long,
|
|
|
+ count: Int,
|
|
|
+ topPriority: Boolean,
|
|
|
+ vararg supportedTypes: ConversationType?
|
|
|
+ ) {
|
|
|
+ val finalResult = mutableListOf<Conversation>()
|
|
|
+ var loadCount = count
|
|
|
+ var loadTimeStamp = timeStamp
|
|
|
+
|
|
|
+ fun loadNextPage() {
|
|
|
+ IMService.innerService
|
|
|
+ .getConversationListByPage(
|
|
|
+ object: IRongCoreCallback.ResultCallback<List<Conversation>?>() {
|
|
|
+ override fun onSuccess(conversations: List<Conversation>?) {
|
|
|
+ val getConversations = conversations ?: emptyList()
|
|
|
+ val hasMore = getConversations.size >= sizePerPage
|
|
|
+ val filtered = dataFilter.filtered(getConversations)
|
|
|
+ finalResult.addAll(filtered)
|
|
|
+ if (!hasMore) {
|
|
|
+ //后续没有更多了,直接返回结果
|
|
|
+ callback?.onSuccess(finalResult)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (finalResult.size < sizePerPage) {
|
|
|
+ // 过滤后数量不足,加一页继续拉
|
|
|
+ loadCount += pageLimit
|
|
|
+ loadTimeStamp = getConversations.lastOrNull()?.sentTime ?: 0
|
|
|
+ loadNextPage()
|
|
|
+ } else {
|
|
|
+ // 拉完了,通过callback通知出去
|
|
|
+ callback?.onSuccess(finalResult.take(sizePerPage))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onError(e: IRongCoreEnum.CoreErrorCode?) {
|
|
|
+ callback?.onError(e)
|
|
|
+ }
|
|
|
+
|
|
|
+ }, loadTimeStamp, loadCount, topPriority, *supportedTypes
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ // 开始第一次拉取
|
|
|
+ loadNextPage()
|
|
|
+ }
|
|
|
+
|
|
|
private fun doUpdate(
|
|
|
conversations: List<Conversation>?,
|
|
|
loadMore: Boolean,
|