Commit b6862d43 authored by Leonardo Aramaki's avatar Leonardo Aramaki

Fix reactions update messages traversal

parent ff7ed148
...@@ -62,6 +62,7 @@ abstract class BaseViewHolder<T : BaseViewModel<*>>( ...@@ -62,6 +62,7 @@ abstract class BaseViewHolder<T : BaseViewModel<*>>(
val manager = FlexboxLayoutManager(context, FlexDirection.ROW) val manager = FlexboxLayoutManager(context, FlexDirection.ROW)
recyclerView.layoutManager = manager recyclerView.layoutManager = manager
recyclerView.adapter = adapter recyclerView.adapter = adapter
println("* Update reactions ${it.reactions}")
adapter.addReactions(it.reactions.filterNot { it.unicode.startsWith(":") }) adapter.addReactions(it.reactions.filterNot { it.unicode.startsWith(":") })
} }
} }
......
...@@ -122,19 +122,22 @@ class ChatRoomAdapter( ...@@ -122,19 +122,22 @@ class ChatRoomAdapter(
fun updateItem(message: BaseViewModel<*>) { fun updateItem(message: BaseViewModel<*>) {
var index = dataSet.indexOfLast { it.messageId == message.messageId } var index = dataSet.indexOfLast { it.messageId == message.messageId }
val indexOfFirst = dataSet.indexOfFirst { it.messageId == message.messageId } val indexOfNext = dataSet.indexOfFirst { it.messageId == message.messageId }
Timber.d("index: $index") Timber.d("index: $index")
if (index > -1) { if (index > -1) {
dataSet[index] = message dataSet[index] = message
dataSet.forEachIndexed { index, viewModel ->
if (viewModel.messageId == message.messageId) {
if (viewModel.nextDownStreamMessage == null) {
viewModel.reactions = message.reactions
}
notifyItemChanged(index) notifyItemChanged(index)
while (dataSet[index].nextDownStreamMessage != null) { }
dataSet[index].nextDownStreamMessage!!.reactions = message.reactions
notifyItemChanged(--index)
} }
// Delete message only if current is a system message update, i.e.: Message Removed // Delete message only if current is a system message update, i.e.: Message Removed
if (message.message.isSystemMessage() && indexOfFirst > -1 && indexOfFirst != index) { if (message.message.isSystemMessage() && indexOfNext > -1 && indexOfNext != index) {
dataSet.removeAt(indexOfFirst) dataSet.removeAt(indexOfNext)
notifyItemRemoved(indexOfFirst) notifyItemRemoved(indexOfNext)
} }
} }
} }
......
...@@ -70,6 +70,11 @@ class ViewModelMapper @Inject constructor(private val context: Context, ...@@ -70,6 +70,11 @@ class ViewModelMapper @Inject constructor(private val context: Context,
list.add(it) list.add(it)
} }
for (i in list.size - 1 downTo 0) {
val next = if (i - 1 < 0) null else list[i - 1]
list[i].nextDownStreamMessage = next
}
return@withContext list return@withContext list
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment