Show full history if key backup is enabled.
This commit is contained in:
parent
5bb8efb728
commit
cf0e92f7f6
5 changed files with 19 additions and 1 deletions
|
|
@ -72,6 +72,7 @@ import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import kotlinx.coroutines.withTimeout
|
import kotlinx.coroutines.withTimeout
|
||||||
|
import org.matrix.rustcomponents.sdk.BackupState
|
||||||
import org.matrix.rustcomponents.sdk.Client
|
import org.matrix.rustcomponents.sdk.Client
|
||||||
import org.matrix.rustcomponents.sdk.ClientDelegate
|
import org.matrix.rustcomponents.sdk.ClientDelegate
|
||||||
import org.matrix.rustcomponents.sdk.NotificationProcessSetup
|
import org.matrix.rustcomponents.sdk.NotificationProcessSetup
|
||||||
|
|
@ -200,6 +201,7 @@ class RustMatrixClient constructor(
|
||||||
cachedPairOfRoom?.let { (roomListItem, fullRoom) ->
|
cachedPairOfRoom?.let { (roomListItem, fullRoom) ->
|
||||||
RustMatrixRoom(
|
RustMatrixRoom(
|
||||||
sessionId = sessionId,
|
sessionId = sessionId,
|
||||||
|
isKeyBackupEnabled = client.encryption().backupState() == BackupState.ENABLED,
|
||||||
roomListItem = roomListItem,
|
roomListItem = roomListItem,
|
||||||
innerRoom = fullRoom,
|
innerRoom = fullRoom,
|
||||||
roomNotificationSettingsService = notificationSettingsService,
|
roomNotificationSettingsService = notificationSettingsService,
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,7 @@ import java.io.File
|
||||||
@OptIn(ExperimentalCoroutinesApi::class)
|
@OptIn(ExperimentalCoroutinesApi::class)
|
||||||
class RustMatrixRoom(
|
class RustMatrixRoom(
|
||||||
override val sessionId: SessionId,
|
override val sessionId: SessionId,
|
||||||
|
isKeyBackupEnabled: Boolean,
|
||||||
private val roomListItem: RoomListItem,
|
private val roomListItem: RoomListItem,
|
||||||
private val innerRoom: Room,
|
private val innerRoom: Room,
|
||||||
private val roomNotificationSettingsService: RustNotificationSettingsService,
|
private val roomNotificationSettingsService: RustNotificationSettingsService,
|
||||||
|
|
@ -126,6 +127,7 @@ class RustMatrixRoom(
|
||||||
override val roomNotificationSettingsStateFlow: StateFlow<MatrixRoomNotificationSettingsState> = _roomNotificationSettingsStateFlow
|
override val roomNotificationSettingsStateFlow: StateFlow<MatrixRoomNotificationSettingsState> = _roomNotificationSettingsStateFlow
|
||||||
|
|
||||||
override val timeline = RustMatrixTimeline(
|
override val timeline = RustMatrixTimeline(
|
||||||
|
isKeyBackupEnabled = isKeyBackupEnabled,
|
||||||
matrixRoom = this,
|
matrixRoom = this,
|
||||||
innerRoom = innerRoom,
|
innerRoom = innerRoom,
|
||||||
roomCoroutineScope = roomCoroutineScope,
|
roomCoroutineScope = roomCoroutineScope,
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ private const val INITIAL_MAX_SIZE = 50
|
||||||
|
|
||||||
class RustMatrixTimeline(
|
class RustMatrixTimeline(
|
||||||
roomCoroutineScope: CoroutineScope,
|
roomCoroutineScope: CoroutineScope,
|
||||||
|
isKeyBackupEnabled: Boolean,
|
||||||
private val matrixRoom: MatrixRoom,
|
private val matrixRoom: MatrixRoom,
|
||||||
private val innerRoom: Room,
|
private val innerRoom: Room,
|
||||||
private val dispatcher: CoroutineDispatcher,
|
private val dispatcher: CoroutineDispatcher,
|
||||||
|
|
@ -77,6 +78,7 @@ class RustMatrixTimeline(
|
||||||
private val encryptedHistoryPostProcessor = TimelineEncryptedHistoryPostProcessor(
|
private val encryptedHistoryPostProcessor = TimelineEncryptedHistoryPostProcessor(
|
||||||
lastLoginTimestamp = lastLoginTimestamp,
|
lastLoginTimestamp = lastLoginTimestamp,
|
||||||
isRoomEncrypted = matrixRoom.isEncrypted,
|
isRoomEncrypted = matrixRoom.isEncrypted,
|
||||||
|
isKeyBackupEnabled = isKeyBackupEnabled,
|
||||||
paginationStateFlow = _paginationState,
|
paginationStateFlow = _paginationState,
|
||||||
dispatcher = dispatcher,
|
dispatcher = dispatcher,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -30,12 +30,13 @@ class TimelineEncryptedHistoryPostProcessor(
|
||||||
private val dispatcher: CoroutineDispatcher,
|
private val dispatcher: CoroutineDispatcher,
|
||||||
private val lastLoginTimestamp: Date?,
|
private val lastLoginTimestamp: Date?,
|
||||||
private val isRoomEncrypted: Boolean,
|
private val isRoomEncrypted: Boolean,
|
||||||
|
private val isKeyBackupEnabled: Boolean,
|
||||||
private val paginationStateFlow: MutableStateFlow<MatrixTimeline.PaginationState>,
|
private val paginationStateFlow: MutableStateFlow<MatrixTimeline.PaginationState>,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
suspend fun process(items: List<MatrixTimelineItem>): List<MatrixTimelineItem> = withContext(dispatcher) {
|
suspend fun process(items: List<MatrixTimelineItem>): List<MatrixTimelineItem> = withContext(dispatcher) {
|
||||||
Timber.d("Process on Thread=${Thread.currentThread()}")
|
Timber.d("Process on Thread=${Thread.currentThread()}")
|
||||||
if (!isRoomEncrypted || lastLoginTimestamp == null) return@withContext items
|
if (!isRoomEncrypted || isKeyBackupEnabled || lastLoginTimestamp == null) return@withContext items
|
||||||
|
|
||||||
val filteredItems = replaceWithEncryptionHistoryBannerIfNeeded(items)
|
val filteredItems = replaceWithEncryptionHistoryBannerIfNeeded(items)
|
||||||
// Disable back pagination
|
// Disable back pagination
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,15 @@ class TimelineEncryptedHistoryPostProcessorTest {
|
||||||
assertThat(processor.process(items)).isSameInstanceAs(items)
|
assertThat(processor.process(items)).isSameInstanceAs(items)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given an encrypted room, and key backup enabled, nothing is done`() = runTest {
|
||||||
|
val processor = createPostProcessor(isKeyBackupEnabled = true)
|
||||||
|
val items = listOf(
|
||||||
|
MatrixTimelineItem.Event(0L, anEventTimelineItem())
|
||||||
|
)
|
||||||
|
assertThat(processor.process(items)).isSameInstanceAs(items)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `given a null lastLoginTimestamp, nothing is done`() = runTest {
|
fun `given a null lastLoginTimestamp, nothing is done`() = runTest {
|
||||||
val processor = createPostProcessor(lastLoginTimestamp = null)
|
val processor = createPostProcessor(lastLoginTimestamp = null)
|
||||||
|
|
@ -108,11 +117,13 @@ class TimelineEncryptedHistoryPostProcessorTest {
|
||||||
private fun TestScope.createPostProcessor(
|
private fun TestScope.createPostProcessor(
|
||||||
lastLoginTimestamp: Date? = defaultLastLoginTimestamp,
|
lastLoginTimestamp: Date? = defaultLastLoginTimestamp,
|
||||||
isRoomEncrypted: Boolean = true,
|
isRoomEncrypted: Boolean = true,
|
||||||
|
isKeyBackupEnabled: Boolean = false,
|
||||||
paginationStateFlow: MutableStateFlow<MatrixTimeline.PaginationState> =
|
paginationStateFlow: MutableStateFlow<MatrixTimeline.PaginationState> =
|
||||||
MutableStateFlow(MatrixTimeline.PaginationState(hasMoreToLoadBackwards = true, isBackPaginating = false))
|
MutableStateFlow(MatrixTimeline.PaginationState(hasMoreToLoadBackwards = true, isBackPaginating = false))
|
||||||
) = TimelineEncryptedHistoryPostProcessor(
|
) = TimelineEncryptedHistoryPostProcessor(
|
||||||
lastLoginTimestamp = lastLoginTimestamp,
|
lastLoginTimestamp = lastLoginTimestamp,
|
||||||
isRoomEncrypted = isRoomEncrypted,
|
isRoomEncrypted = isRoomEncrypted,
|
||||||
|
isKeyBackupEnabled = isKeyBackupEnabled,
|
||||||
paginationStateFlow = paginationStateFlow,
|
paginationStateFlow = paginationStateFlow,
|
||||||
dispatcher = StandardTestDispatcher(testScheduler)
|
dispatcher = StandardTestDispatcher(testScheduler)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue