Move empty day separator filtering to a timeline post-processor (#6866)

* Move empty day separator filtering to a timeline post-processor

* Split `FilterPublicMembershipChangesPostProcessor` from `RoomBeginningPostProcessor`
This commit is contained in:
Jorge Martin Espinosa 2026-05-26 10:28:32 +02:00 committed by GitHub
parent 1f927b9965
commit 6cd0491292
9 changed files with 292 additions and 293 deletions

View file

@ -16,7 +16,6 @@ import io.element.android.features.messages.impl.timeline.factories.event.Timeli
import io.element.android.features.messages.impl.timeline.factories.virtual.TimelineItemVirtualFactory
import io.element.android.features.messages.impl.timeline.groups.TimelineItemGrouper
import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemDaySeparatorModel
import io.element.android.libraries.androidutils.diff.DiffCacheUpdater
import io.element.android.libraries.androidutils.diff.MutableListDiffCache
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
@ -97,8 +96,7 @@ class TimelineItemsFactory(
}
}
val result = timelineItemGrouper.group(newTimelineItemStates).toImmutableList()
val filteredResult = filterEmptyDaySeparators(result)
this._timelineItems.emit(filteredResult)
this._timelineItems.emit(result)
}
private suspend fun buildAndCacheItem(
@ -116,25 +114,3 @@ class TimelineItemsFactory(
return timelineItem
}
}
// Remove day separators for days with no events after the client-side event filtering
internal fun filterEmptyDaySeparators(items: List<TimelineItem>): ImmutableList<TimelineItem> {
return buildList {
var hasEventBefore = false
for (item in items) {
when (item) {
is TimelineItem.Event, is TimelineItem.GroupedEvents -> {
hasEventBefore = true
add(item)
}
is TimelineItem.Virtual if item.model is TimelineItemDaySeparatorModel -> {
if (hasEventBefore) {
add(item)
}
hasEventBefore = false
}
else -> add(item)
}
}
}.toImmutableList()
}