diff --git a/core/src/main/java/org/futo/circles/core/feature/timeline/builder/MultiTimelineBuilder.kt b/core/src/main/java/org/futo/circles/core/feature/timeline/builder/MultiTimelineBuilder.kt index 8104b347ef84ef6b88120fafe5dd47aa748f4901..92b6f91701aa3aa5863bb4d324c6e14beab243da 100644 --- a/core/src/main/java/org/futo/circles/core/feature/timeline/builder/MultiTimelineBuilder.kt +++ b/core/src/main/java/org/futo/circles/core/feature/timeline/builder/MultiTimelineBuilder.kt @@ -7,6 +7,7 @@ import org.futo.circles.core.mapping.toPost import org.futo.circles.core.model.Post import org.futo.circles.core.provider.MatrixSessionProvider import org.matrix.android.sdk.api.session.getRoom +import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import javax.inject.Inject @@ -16,16 +17,35 @@ class MultiTimelineBuilder @Inject constructor() : BaseTimelineBuilder() { private var readReceiptMap: MutableMap<String, List<Long>> = mutableMapOf() override suspend fun List<TimelineEvent>.processSnapshot(isThread: Boolean): List<Post> { - val roomId = firstOrNull()?.roomId ?: return getAllTimelinesPostsList() + val roomId = firstOrNull()?.roomId ?: return getCurrentTimelinesPostsList() val room = MatrixSessionProvider.currentSession?.getRoom(roomId) - ?: return getAllTimelinesPostsList() + ?: return getCurrentTimelinesPostsList() val roomName = room.roomSummary()?.nameOrId() - val roomOwnerName = getRoomOwner(roomId)?.notEmptyDisplayName() + val roomOwner = getRoomOwner(roomId) val receipts = getReadReceipts(room).also { readReceiptMap[roomId] = it } - currentSnapshotMap[roomId] = this.map { it.toPost(receipts, roomName, roomOwnerName) } - return sortList(getAllTimelinesPostsList(), isThread) + currentSnapshotMap[roomId] = + this.filterRootPostNotFromOwner(isThread, receipts, roomName, roomOwner) + return sortList(getCurrentTimelinesPostsList(), isThread) } - private fun getAllTimelinesPostsList() = currentSnapshotMap.flatMap { (_, value) -> value } + private fun List<TimelineEvent>.filterRootPostNotFromOwner( + isThread: Boolean, + receipts: List<Long>, + roomName: String?, + roomOwner: RoomMemberSummary? + ): List<Post> { + val roomOwnerId = roomOwner?.userId + val roomOwnerName = roomOwner?.notEmptyDisplayName() + + return mapNotNull { + val senderId = it.senderInfo.userId + if (roomOwnerId == senderId && !isThread) + it.toPost(receipts, roomName, roomOwnerName) + else null + } + } + + + private fun getCurrentTimelinesPostsList() = currentSnapshotMap.flatMap { (_, value) -> value } } \ No newline at end of file