diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a435ede569..77c2272055 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -124,7 +124,7 @@ jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" } appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" } timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.2" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.3" sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" } sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-driver", version.ref = "sqldelight" } sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index e58a346fd6..a2bb693a56 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -33,7 +33,7 @@ interface MatrixClient { fun sessionVerificationService(): SessionVerificationService suspend fun logout() suspend fun loadUserDisplayName(): Result - suspend fun loadUserAvatarURLString(): Result + suspend fun loadUserAvatarURLString(): Result suspend fun loadMediaContent(url: String): Result suspend fun loadMediaThumbnail( url: String, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index ecc0ec2e9c..719c07f586 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -38,9 +38,9 @@ import kotlinx.coroutines.withContext import org.matrix.rustcomponents.sdk.Client import org.matrix.rustcomponents.sdk.ClientDelegate import org.matrix.rustcomponents.sdk.RequiredState +import org.matrix.rustcomponents.sdk.SlidingSyncListBuilder import org.matrix.rustcomponents.sdk.SlidingSyncMode import org.matrix.rustcomponents.sdk.SlidingSyncRequestListFilters -import org.matrix.rustcomponents.sdk.SlidingSyncViewBuilder import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.mediaSourceFromUrl import org.matrix.rustcomponents.sdk.use @@ -63,15 +63,8 @@ class RustMatrixClient constructor( private val clientDelegate = object : ClientDelegate { override fun didReceiveAuthError(isSoftLogout: Boolean) { - Timber.v("didReceiveAuthError()") - } - - override fun didReceiveSyncUpdate() { - Timber.v("didReceiveSyncUpdate()") - } - - override fun didUpdateRestoreToken() { - Timber.v("didUpdateRestoreToken()") + //TODO handle this + Timber.v("didReceiveAuthError(isSoftLogout=$isSoftLogout)") } } @@ -90,7 +83,7 @@ class RustMatrixClient constructor( ) } - private val visibleRoomsView = SlidingSyncViewBuilder() + private val visibleRoomsSlidingSyncList = SlidingSyncListBuilder() .timelineLimit(limit = 1u) .requiredState( requiredState = listOf( @@ -112,7 +105,7 @@ class RustMatrixClient constructor( .homeserver("https://slidingsync.lab.matrix.org") .withCommonExtensions() .coldCache("ElementX") - .addView(visibleRoomsView) + .addList(visibleRoomsSlidingSyncList) .use { it.build() } @@ -122,7 +115,7 @@ class RustMatrixClient constructor( RustRoomSummaryDataSource( slidingSyncObserverProxy.updateSummaryFlow, slidingSync, - visibleRoomsView, + visibleRoomsSlidingSyncList, dispatchers, ::onRestartSync ) @@ -166,7 +159,6 @@ class RustMatrixClient constructor( override fun sessionVerificationService(): SessionVerificationService = verificationService override fun startSync() { - if (client.isSoftLogout()) return if (isSyncing.compareAndSet(false, true)) { slidingSyncObserverToken = slidingSync.sync() } @@ -184,7 +176,7 @@ class RustMatrixClient constructor( slidingSync.setObserver(null) rustRoomSummaryDataSource.close() client.setDelegate(null) - visibleRoomsView.destroy() + visibleRoomsSlidingSyncList.destroy() slidingSync.destroy() verificationService.destroy() } @@ -207,7 +199,7 @@ class RustMatrixClient constructor( } } - override suspend fun loadUserAvatarURLString(): Result = withContext(dispatchers.io) { + override suspend fun loadUserAvatarURLString(): Result = withContext(dispatchers.io) { runCatching { client.avatarUrl() } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt index b57af30bf3..13ebf1c0e8 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt @@ -125,7 +125,6 @@ private fun SessionData.toSession() = Session( userId = userId, deviceId = deviceId, homeserverUrl = homeserverUrl, - isSoftLogout = isSoftLogout, slidingSyncProxy = slidingSyncProxy, ) @@ -135,6 +134,5 @@ private fun Session.toSessionData() = SessionData( accessToken = accessToken, refreshToken = refreshToken, homeserverUrl = homeserverUrl, - isSoftLogout = isSoftLogout, slidingSyncProxy = slidingSyncProxy, ) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt index 8691c06664..67e00ea6ae 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt @@ -33,9 +33,9 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.matrix.rustcomponents.sdk.RoomListEntry import org.matrix.rustcomponents.sdk.SlidingSync +import org.matrix.rustcomponents.sdk.SlidingSyncList +import org.matrix.rustcomponents.sdk.SlidingSyncListRoomsListDiff import org.matrix.rustcomponents.sdk.SlidingSyncState -import org.matrix.rustcomponents.sdk.SlidingSyncView -import org.matrix.rustcomponents.sdk.SlidingSyncViewRoomsListDiff import org.matrix.rustcomponents.sdk.UpdateSummary import timber.log.Timber import java.io.Closeable @@ -44,7 +44,7 @@ import java.util.UUID internal class RustRoomSummaryDataSource( private val slidingSyncUpdateFlow: Flow, private val slidingSync: SlidingSync, - private val slidingSyncView: SlidingSyncView, + private val slidingSyncList: SlidingSyncList, private val coroutineDispatchers: CoroutineDispatchers, private val onRestartSync: () -> Unit, private val roomSummaryDetailsFactory: RoomSummaryDetailsFactory = RoomSummaryDetailsFactory(), @@ -59,7 +59,7 @@ internal class RustRoomSummaryDataSource( coroutineScope.launch { updateRoomSummaries { addAll( - slidingSyncView.currentRoomsList().map(::buildSummaryForRoomListEntry) + slidingSyncList.currentRoomsList().map(::buildSummaryForRoomListEntry) ) } } @@ -69,7 +69,7 @@ internal class RustRoomSummaryDataSource( didReceiveSyncUpdate(it) }.launchIn(coroutineScope) - slidingSyncView.roomListDiff(coroutineScope) + slidingSyncList.roomListDiff(coroutineScope) .onEach { diffs -> updateRoomSummaries { applyDiff(diffs) @@ -77,7 +77,7 @@ internal class RustRoomSummaryDataSource( } .launchIn(coroutineScope) - slidingSyncView.state(coroutineScope) + slidingSyncList.state(coroutineScope) .onEach { slidingSyncState -> Timber.v("New sliding sync state: $slidingSyncState") state.value = slidingSyncState @@ -95,7 +95,7 @@ internal class RustRoomSummaryDataSource( override fun setSlidingSyncRange(range: IntRange) { Timber.v("setVisibleRange=$range") - slidingSyncView.setRange(range.first.toUInt(), range.last.toUInt()) + slidingSyncList.setRange(range.first.toUInt(), range.last.toUInt()) onRestartSync() } @@ -116,7 +116,7 @@ internal class RustRoomSummaryDataSource( } } - private fun MutableList.applyDiff(diff: SlidingSyncViewRoomsListDiff) { + private fun MutableList.applyDiff(diff: SlidingSyncListRoomsListDiff) { fun MutableList.fillUntil(untilIndex: Int) { repeat((size - 1 until untilIndex).count()) { add(buildEmptyRoomSummary()) @@ -124,43 +124,43 @@ internal class RustRoomSummaryDataSource( } Timber.v("ApplyDiff: $diff for list with size: $size") when (diff) { - is SlidingSyncViewRoomsListDiff.Append -> { + is SlidingSyncListRoomsListDiff.Append -> { val roomSummaries = diff.values.map { buildSummaryForRoomListEntry(it) } addAll(roomSummaries) } - is SlidingSyncViewRoomsListDiff.PushBack -> { + is SlidingSyncListRoomsListDiff.PushBack -> { val roomSummary = buildSummaryForRoomListEntry(diff.value) add(roomSummary) } - is SlidingSyncViewRoomsListDiff.PushFront -> { + is SlidingSyncListRoomsListDiff.PushFront -> { val roomSummary = buildSummaryForRoomListEntry(diff.value) add(0, roomSummary) } - is SlidingSyncViewRoomsListDiff.Set -> { + is SlidingSyncListRoomsListDiff.Set -> { fillUntil(diff.index.toInt()) val roomSummary = buildSummaryForRoomListEntry(diff.value) set(diff.index.toInt(), roomSummary) } - is SlidingSyncViewRoomsListDiff.Insert -> { + is SlidingSyncListRoomsListDiff.Insert -> { val roomSummary = buildSummaryForRoomListEntry(diff.value) add(diff.index.toInt(), roomSummary) } - is SlidingSyncViewRoomsListDiff.Remove -> { + is SlidingSyncListRoomsListDiff.Remove -> { removeAt(diff.index.toInt()) } - is SlidingSyncViewRoomsListDiff.Reset -> { + is SlidingSyncListRoomsListDiff.Reset -> { clear() addAll(diff.values.map { buildSummaryForRoomListEntry(it) }) } - SlidingSyncViewRoomsListDiff.PopBack -> { + SlidingSyncListRoomsListDiff.PopBack -> { removeFirstOrNull() } - SlidingSyncViewRoomsListDiff.PopFront -> { + SlidingSyncListRoomsListDiff.PopFront -> { removeLastOrNull() } - SlidingSyncViewRoomsListDiff.Clear -> { + SlidingSyncListRoomsListDiff.Clear -> { clear() } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/SlidingSyncViewFlows.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/SlidingSyncListFlows.kt similarity index 65% rename from libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/SlidingSyncViewFlows.kt rename to libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/SlidingSyncListFlows.kt index 8665705095..2aa0c59330 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/SlidingSyncViewFlows.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/SlidingSyncListFlows.kt @@ -20,17 +20,17 @@ import io.element.android.libraries.matrix.impl.util.mxCallbackFlow import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.launch +import org.matrix.rustcomponents.sdk.SlidingSyncList +import org.matrix.rustcomponents.sdk.SlidingSyncListRoomListObserver +import org.matrix.rustcomponents.sdk.SlidingSyncListRoomsCountObserver +import org.matrix.rustcomponents.sdk.SlidingSyncListRoomsListDiff +import org.matrix.rustcomponents.sdk.SlidingSyncListStateObserver import org.matrix.rustcomponents.sdk.SlidingSyncState -import org.matrix.rustcomponents.sdk.SlidingSyncView -import org.matrix.rustcomponents.sdk.SlidingSyncViewRoomListObserver -import org.matrix.rustcomponents.sdk.SlidingSyncViewRoomsCountObserver -import org.matrix.rustcomponents.sdk.SlidingSyncViewRoomsListDiff -import org.matrix.rustcomponents.sdk.SlidingSyncViewStateObserver -fun SlidingSyncView.roomListDiff(scope: CoroutineScope): Flow = +fun SlidingSyncList.roomListDiff(scope: CoroutineScope): Flow = mxCallbackFlow { - val observer = object : SlidingSyncViewRoomListObserver { - override fun didReceiveUpdate(diff: SlidingSyncViewRoomsListDiff) { + val observer = object : SlidingSyncListRoomListObserver { + override fun didReceiveUpdate(diff: SlidingSyncListRoomsListDiff) { scope.launch { send(diff) } @@ -39,8 +39,8 @@ fun SlidingSyncView.roomListDiff(scope: CoroutineScope): Flow = mxCallbackFlow { - val observer = object : SlidingSyncViewStateObserver { +fun SlidingSyncList.state(scope: CoroutineScope): Flow = mxCallbackFlow { + val observer = object : SlidingSyncListStateObserver { override fun didReceiveUpdate(newState: SlidingSyncState) { scope.launch { send(newState) @@ -50,8 +50,8 @@ fun SlidingSyncView.state(scope: CoroutineScope): Flow = mxCal observeState(observer) } -fun SlidingSyncView.roomsCount(scope: CoroutineScope): Flow = mxCallbackFlow { - val observer = object : SlidingSyncViewRoomsCountObserver { +fun SlidingSyncList.roomsCount(scope: CoroutineScope): Flow = mxCallbackFlow { + val observer = object : SlidingSyncListRoomsCountObserver { override fun didReceiveUpdate(count: UInt) { scope.launch { send(count) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index dd597d394e..c7427f9497 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -64,7 +64,7 @@ class FakeMatrixClient( return userDisplayName } - override suspend fun loadUserAvatarURLString(): Result { + override suspend fun loadUserAvatarURLString(): Result { return userAvatarURLString } diff --git a/libraries/session-storage/api/src/main/kotlin/io/element/android/libraries/sessionstorage/api/SessionData.kt b/libraries/session-storage/api/src/main/kotlin/io/element/android/libraries/sessionstorage/api/SessionData.kt index 3f79701fd8..f2eb5847f7 100644 --- a/libraries/session-storage/api/src/main/kotlin/io/element/android/libraries/sessionstorage/api/SessionData.kt +++ b/libraries/session-storage/api/src/main/kotlin/io/element/android/libraries/sessionstorage/api/SessionData.kt @@ -22,6 +22,5 @@ data class SessionData( val accessToken: String, val refreshToken: String?, val homeserverUrl: String, - val isSoftLogout: Boolean, val slidingSyncProxy: String? ) diff --git a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/SessionDataMapper.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/SessionDataMapper.kt index 627f896381..fd8a42ad6f 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/SessionDataMapper.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/SessionDataMapper.kt @@ -25,7 +25,6 @@ internal fun SessionData.toDbModel(): io.element.android.libraries.matrix.sessio accessToken = accessToken, refreshToken = refreshToken, homeserverUrl = homeserverUrl, - isSoftLogout = isSoftLogout, slidingSyncProxy = slidingSyncProxy, ) } @@ -37,7 +36,6 @@ internal fun io.element.android.libraries.matrix.session.SessionData.toApiModel( accessToken = accessToken, refreshToken = refreshToken, homeserverUrl = homeserverUrl, - isSoftLogout = isSoftLogout, slidingSyncProxy = slidingSyncProxy, ) } diff --git a/libraries/session-storage/impl/src/main/sqldelight/io/element/android/libraries/matrix/session/SessionData.sq b/libraries/session-storage/impl/src/main/sqldelight/io/element/android/libraries/matrix/session/SessionData.sq index c0731361e2..d8fb15338c 100644 --- a/libraries/session-storage/impl/src/main/sqldelight/io/element/android/libraries/matrix/session/SessionData.sq +++ b/libraries/session-storage/impl/src/main/sqldelight/io/element/android/libraries/matrix/session/SessionData.sq @@ -4,7 +4,6 @@ CREATE TABLE SessionData ( accessToken TEXT NOT NULL, refreshToken TEXT, homeserverUrl TEXT NOT NULL, - isSoftLogout INTEGER AS Boolean NOT NULL DEFAULT 0, slidingSyncProxy TEXT ); @@ -15,7 +14,7 @@ selectByUserId: SELECT * FROM SessionData WHERE userId = ?; insertSessionData: -INSERT INTO SessionData(userId, deviceId, accessToken, refreshToken, homeserverUrl, isSoftLogout, slidingSyncProxy) VALUES ?; +INSERT INTO SessionData(userId, deviceId, accessToken, refreshToken, homeserverUrl, slidingSyncProxy) VALUES ?; removeSession: DELETE FROM SessionData WHERE userId = ?; diff --git a/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt b/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt index 5bd726609b..885c04af78 100644 --- a/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt +++ b/libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt @@ -37,7 +37,6 @@ class DatabaseSessionStoreTests { accessToken = "accessToken", refreshToken = "refreshToken", homeserverUrl = "homeserverUrl", - isSoftLogout = false, slidingSyncProxy = null )