Skip to content

Commit

Permalink
Merge pull request #8841 from element-hq/feature/fga/fix_redacted_col…
Browse files Browse the repository at this point in the history
…lapse

Fix redacted events not grouped correctly
  • Loading branch information
ganfra authored Jun 3, 2024
2 parents 47bb23a + 2158aa0 commit 15a252b
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
1 change: 1 addition & 0 deletions changelog.d/8840.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix redacted events not grouped correctly when hidden events are inserted between.
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ class MergedHeaderItemFactory @Inject constructor(
buildRoomCreationMergedSummary(currentPosition, items, partialState, event, eventIdToHighlight, requestModelBuild, callback)
isStartOfSameTypeEventsSummary(event, nextEvent, addDaySeparator) ->
buildSameTypeEventsMergedSummary(currentPosition, items, partialState, event, eventIdToHighlight, requestModelBuild, callback)
isStartOfRedactedEventsSummary(event, items, currentPosition, addDaySeparator) ->
isStartOfRedactedEventsSummary(event, items, currentPosition, partialState, addDaySeparator) ->
buildRedactedEventsMergedSummary(currentPosition, items, partialState, event, eventIdToHighlight, requestModelBuild, callback)
else -> null
}
Expand Down Expand Up @@ -122,19 +122,25 @@ class MergedHeaderItemFactory @Inject constructor(
* @param event the main timeline event
* @param items all known items, sorted from newer event to oldest event
* @param currentPosition the current position
* @param partialState partial state data
* @param addDaySeparator true to add a day separator
*/
private fun isStartOfRedactedEventsSummary(
event: TimelineEvent,
items: List<TimelineEvent>,
currentPosition: Int,
partialState: TimelineEventController.PartialState,
addDaySeparator: Boolean,
): Boolean {
val nextNonRedactionEvent = items
.subList(fromIndex = currentPosition + 1, toIndex = items.size)
.find { it.root.getClearType() != EventType.REDACTION }
return event.root.isRedacted() &&
(!nextNonRedactionEvent?.root?.isRedacted().orFalse() || addDaySeparator)
val nextDisplayableEvent = items.subList(currentPosition + 1, items.size).firstOrNull {
timelineEventVisibilityHelper.shouldShowEvent(
timelineEvent = it,
highlightedEventId = partialState.highlightedEventId,
isFromThreadTimeline = partialState.isFromThreadTimeline(),
rootThreadEventId = partialState.rootThreadEventId
)
}
return event.root.isRedacted() && (nextDisplayableEvent?.root?.isRedacted() == false || addDaySeparator)
}

private fun buildSameTypeEventsMergedSummary(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,16 +151,20 @@ class TimelineEventVisibilityHelper @Inject constructor(
rootThreadEventId: String?,
isFromThreadTimeline: Boolean
): List<TimelineEvent> {
val prevSub = timelineEvents
.subList(0, index + 1)
// Ensure to not take the REDACTION events into account
.filter { it.root.getClearType() != EventType.REDACTION }
return prevSub
val prevDisplayableEvents = timelineEvents.subList(0, index + 1)
.filter {
shouldShowEvent(
timelineEvent = it,
highlightedEventId = eventIdToHighlight,
isFromThreadTimeline = isFromThreadTimeline,
rootThreadEventId = rootThreadEventId)
}
return prevDisplayableEvents
.reversed()
.let {
nextEventsUntil(it, 0, minSize, eventIdToHighlight, rootThreadEventId, isFromThreadTimeline, object : PredicateToStopSearch {
override fun shouldStopSearch(oldEvent: Event, newEvent: Event): Boolean {
return oldEvent.isRedacted() && !newEvent.isRedacted()
return !newEvent.isRedacted()
}
})
}
Expand Down

0 comments on commit 15a252b

Please sign in to comment.