Merge pull request #4960 from vector-im/feature/aris/improve_local_echo_stuck_fix
Avoid deleting sent messages on non room events
This commit is contained in:
commit
eafb76b9b6
|
@ -0,0 +1 @@
|
||||||
|
Improves local echo blinking when non room events received
|
|
@ -129,8 +129,6 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle
|
||||||
} else {
|
} else {
|
||||||
handlingStrategy.data.mapWithProgress(reporter, InitSyncStep.ImportingAccountJoinedRooms, 0.6f) {
|
handlingStrategy.data.mapWithProgress(reporter, InitSyncStep.ImportingAccountJoinedRooms, 0.6f) {
|
||||||
handleJoinedRoom(realm, it.key, it.value, insertType, syncLocalTimeStampMillis, aggregator)
|
handleJoinedRoom(realm, it.key, it.value, insertType, syncLocalTimeStampMillis, aggregator)
|
||||||
}.also {
|
|
||||||
fixStuckLocalEcho(it)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -428,6 +426,10 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle deletion of [stuck] local echos if needed
|
||||||
|
deleteLocalEchosIfNeeded(insertType, roomEntity, eventList)
|
||||||
|
|
||||||
// posting new events to timeline if any is registered
|
// posting new events to timeline if any is registered
|
||||||
timelineInput.onNewTimelineEvents(roomId = roomId, eventIds = eventIds)
|
timelineInput.onNewTimelineEvents(roomId = roomId, eventIds = eventIds)
|
||||||
return chunkEntity
|
return chunkEntity
|
||||||
|
@ -513,8 +515,11 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle
|
||||||
* While we cannot know when a specific event arrived from the pagination (no transactionId included), after each room /sync
|
* While we cannot know when a specific event arrived from the pagination (no transactionId included), after each room /sync
|
||||||
* we clear all SENT events, and we are sure that we will receive it from /sync or pagination
|
* we clear all SENT events, and we are sure that we will receive it from /sync or pagination
|
||||||
*/
|
*/
|
||||||
private fun fixStuckLocalEcho(rooms: List<RoomEntity>) {
|
private fun deleteLocalEchosIfNeeded(insertType: EventInsertType, roomEntity: RoomEntity, eventList: List<Event>) {
|
||||||
rooms.forEach { roomEntity ->
|
// Skip deletion if we are on initial sync
|
||||||
|
if (insertType == EventInsertType.INITIAL_SYNC) return
|
||||||
|
// Skip deletion if there are no timeline events or there is no event received from the current user
|
||||||
|
if (eventList.firstOrNull { it.senderId == userId } == null) return
|
||||||
roomEntity.sendingTimelineEvents.filter { timelineEvent ->
|
roomEntity.sendingTimelineEvents.filter { timelineEvent ->
|
||||||
timelineEvent.root?.sendState == SendState.SENT
|
timelineEvent.root?.sendState == SendState.SENT
|
||||||
}.forEach {
|
}.forEach {
|
||||||
|
@ -522,5 +527,4 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle
|
||||||
it.deleteOnCascade(true)
|
it.deleteOnCascade(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue