Browse Source

Merge pull request #215 from vector-im/renovate/org.matrix.rustcomponents

Update dependency org.matrix.rustcomponents:sdk-android to v0.1.3
test/jme/compound-poc
ganfra 2 years ago committed by GitHub
parent
commit
73b79cadd0
  1. 2
      gradle/libs.versions.toml
  2. 2
      libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt
  3. 24
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt
  4. 2
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt
  5. 36
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustRoomSummaryDataSource.kt
  6. 24
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/SlidingSyncListFlows.kt
  7. 2
      libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt
  8. 1
      libraries/session-storage/api/src/main/kotlin/io/element/android/libraries/sessionstorage/api/SessionData.kt
  9. 2
      libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/SessionDataMapper.kt
  10. 3
      libraries/session-storage/impl/src/main/sqldelight/io/element/android/libraries/matrix/session/SessionData.sq
  11. 1
      libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt

2
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" } appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" }
molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" } molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" }
timber = "com.jakewharton.timber:timber:5.0.1" 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-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" }
sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-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" } sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" }

2
libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt

@ -33,7 +33,7 @@ interface MatrixClient {
fun sessionVerificationService(): SessionVerificationService fun sessionVerificationService(): SessionVerificationService
suspend fun logout() suspend fun logout()
suspend fun loadUserDisplayName(): Result<String> suspend fun loadUserDisplayName(): Result<String>
suspend fun loadUserAvatarURLString(): Result<String> suspend fun loadUserAvatarURLString(): Result<String?>
suspend fun loadMediaContent(url: String): Result<ByteArray> suspend fun loadMediaContent(url: String): Result<ByteArray>
suspend fun loadMediaThumbnail( suspend fun loadMediaThumbnail(
url: String, url: String,

24
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.Client
import org.matrix.rustcomponents.sdk.ClientDelegate import org.matrix.rustcomponents.sdk.ClientDelegate
import org.matrix.rustcomponents.sdk.RequiredState import org.matrix.rustcomponents.sdk.RequiredState
import org.matrix.rustcomponents.sdk.SlidingSyncListBuilder
import org.matrix.rustcomponents.sdk.SlidingSyncMode import org.matrix.rustcomponents.sdk.SlidingSyncMode
import org.matrix.rustcomponents.sdk.SlidingSyncRequestListFilters import org.matrix.rustcomponents.sdk.SlidingSyncRequestListFilters
import org.matrix.rustcomponents.sdk.SlidingSyncViewBuilder
import org.matrix.rustcomponents.sdk.TaskHandle import org.matrix.rustcomponents.sdk.TaskHandle
import org.matrix.rustcomponents.sdk.mediaSourceFromUrl import org.matrix.rustcomponents.sdk.mediaSourceFromUrl
import org.matrix.rustcomponents.sdk.use import org.matrix.rustcomponents.sdk.use
@ -63,15 +63,8 @@ class RustMatrixClient constructor(
private val clientDelegate = object : ClientDelegate { private val clientDelegate = object : ClientDelegate {
override fun didReceiveAuthError(isSoftLogout: Boolean) { override fun didReceiveAuthError(isSoftLogout: Boolean) {
Timber.v("didReceiveAuthError()") //TODO handle this
} Timber.v("didReceiveAuthError(isSoftLogout=$isSoftLogout)")
override fun didReceiveSyncUpdate() {
Timber.v("didReceiveSyncUpdate()")
}
override fun didUpdateRestoreToken() {
Timber.v("didUpdateRestoreToken()")
} }
} }
@ -90,7 +83,7 @@ class RustMatrixClient constructor(
) )
} }
private val visibleRoomsView = SlidingSyncViewBuilder() private val visibleRoomsSlidingSyncList = SlidingSyncListBuilder()
.timelineLimit(limit = 1u) .timelineLimit(limit = 1u)
.requiredState( .requiredState(
requiredState = listOf( requiredState = listOf(
@ -112,7 +105,7 @@ class RustMatrixClient constructor(
.homeserver("https://slidingsync.lab.matrix.org") .homeserver("https://slidingsync.lab.matrix.org")
.withCommonExtensions() .withCommonExtensions()
.coldCache("ElementX") .coldCache("ElementX")
.addView(visibleRoomsView) .addList(visibleRoomsSlidingSyncList)
.use { .use {
it.build() it.build()
} }
@ -122,7 +115,7 @@ class RustMatrixClient constructor(
RustRoomSummaryDataSource( RustRoomSummaryDataSource(
slidingSyncObserverProxy.updateSummaryFlow, slidingSyncObserverProxy.updateSummaryFlow,
slidingSync, slidingSync,
visibleRoomsView, visibleRoomsSlidingSyncList,
dispatchers, dispatchers,
::onRestartSync ::onRestartSync
) )
@ -166,7 +159,6 @@ class RustMatrixClient constructor(
override fun sessionVerificationService(): SessionVerificationService = verificationService override fun sessionVerificationService(): SessionVerificationService = verificationService
override fun startSync() { override fun startSync() {
if (client.isSoftLogout()) return
if (isSyncing.compareAndSet(false, true)) { if (isSyncing.compareAndSet(false, true)) {
slidingSyncObserverToken = slidingSync.sync() slidingSyncObserverToken = slidingSync.sync()
} }
@ -184,7 +176,7 @@ class RustMatrixClient constructor(
slidingSync.setObserver(null) slidingSync.setObserver(null)
rustRoomSummaryDataSource.close() rustRoomSummaryDataSource.close()
client.setDelegate(null) client.setDelegate(null)
visibleRoomsView.destroy() visibleRoomsSlidingSyncList.destroy()
slidingSync.destroy() slidingSync.destroy()
verificationService.destroy() verificationService.destroy()
} }
@ -207,7 +199,7 @@ class RustMatrixClient constructor(
} }
} }
override suspend fun loadUserAvatarURLString(): Result<String> = withContext(dispatchers.io) { override suspend fun loadUserAvatarURLString(): Result<String?> = withContext(dispatchers.io) {
runCatching { runCatching {
client.avatarUrl() client.avatarUrl()
} }

2
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, userId = userId,
deviceId = deviceId, deviceId = deviceId,
homeserverUrl = homeserverUrl, homeserverUrl = homeserverUrl,
isSoftLogout = isSoftLogout,
slidingSyncProxy = slidingSyncProxy, slidingSyncProxy = slidingSyncProxy,
) )
@ -135,6 +134,5 @@ private fun Session.toSessionData() = SessionData(
accessToken = accessToken, accessToken = accessToken,
refreshToken = refreshToken, refreshToken = refreshToken,
homeserverUrl = homeserverUrl, homeserverUrl = homeserverUrl,
isSoftLogout = isSoftLogout,
slidingSyncProxy = slidingSyncProxy, slidingSyncProxy = slidingSyncProxy,
) )

36
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 kotlinx.coroutines.withContext
import org.matrix.rustcomponents.sdk.RoomListEntry import org.matrix.rustcomponents.sdk.RoomListEntry
import org.matrix.rustcomponents.sdk.SlidingSync 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.SlidingSyncState
import org.matrix.rustcomponents.sdk.SlidingSyncView
import org.matrix.rustcomponents.sdk.SlidingSyncViewRoomsListDiff
import org.matrix.rustcomponents.sdk.UpdateSummary import org.matrix.rustcomponents.sdk.UpdateSummary
import timber.log.Timber import timber.log.Timber
import java.io.Closeable import java.io.Closeable
@ -44,7 +44,7 @@ import java.util.UUID
internal class RustRoomSummaryDataSource( internal class RustRoomSummaryDataSource(
private val slidingSyncUpdateFlow: Flow<UpdateSummary>, private val slidingSyncUpdateFlow: Flow<UpdateSummary>,
private val slidingSync: SlidingSync, private val slidingSync: SlidingSync,
private val slidingSyncView: SlidingSyncView, private val slidingSyncList: SlidingSyncList,
private val coroutineDispatchers: CoroutineDispatchers, private val coroutineDispatchers: CoroutineDispatchers,
private val onRestartSync: () -> Unit, private val onRestartSync: () -> Unit,
private val roomSummaryDetailsFactory: RoomSummaryDetailsFactory = RoomSummaryDetailsFactory(), private val roomSummaryDetailsFactory: RoomSummaryDetailsFactory = RoomSummaryDetailsFactory(),
@ -59,7 +59,7 @@ internal class RustRoomSummaryDataSource(
coroutineScope.launch { coroutineScope.launch {
updateRoomSummaries { updateRoomSummaries {
addAll( addAll(
slidingSyncView.currentRoomsList().map(::buildSummaryForRoomListEntry) slidingSyncList.currentRoomsList().map(::buildSummaryForRoomListEntry)
) )
} }
} }
@ -69,7 +69,7 @@ internal class RustRoomSummaryDataSource(
didReceiveSyncUpdate(it) didReceiveSyncUpdate(it)
}.launchIn(coroutineScope) }.launchIn(coroutineScope)
slidingSyncView.roomListDiff(coroutineScope) slidingSyncList.roomListDiff(coroutineScope)
.onEach { diffs -> .onEach { diffs ->
updateRoomSummaries { updateRoomSummaries {
applyDiff(diffs) applyDiff(diffs)
@ -77,7 +77,7 @@ internal class RustRoomSummaryDataSource(
} }
.launchIn(coroutineScope) .launchIn(coroutineScope)
slidingSyncView.state(coroutineScope) slidingSyncList.state(coroutineScope)
.onEach { slidingSyncState -> .onEach { slidingSyncState ->
Timber.v("New sliding sync state: $slidingSyncState") Timber.v("New sliding sync state: $slidingSyncState")
state.value = slidingSyncState state.value = slidingSyncState
@ -95,7 +95,7 @@ internal class RustRoomSummaryDataSource(
override fun setSlidingSyncRange(range: IntRange) { override fun setSlidingSyncRange(range: IntRange) {
Timber.v("setVisibleRange=$range") Timber.v("setVisibleRange=$range")
slidingSyncView.setRange(range.first.toUInt(), range.last.toUInt()) slidingSyncList.setRange(range.first.toUInt(), range.last.toUInt())
onRestartSync() onRestartSync()
} }
@ -116,7 +116,7 @@ internal class RustRoomSummaryDataSource(
} }
} }
private fun MutableList<RoomSummary>.applyDiff(diff: SlidingSyncViewRoomsListDiff) { private fun MutableList<RoomSummary>.applyDiff(diff: SlidingSyncListRoomsListDiff) {
fun MutableList<RoomSummary>.fillUntil(untilIndex: Int) { fun MutableList<RoomSummary>.fillUntil(untilIndex: Int) {
repeat((size - 1 until untilIndex).count()) { repeat((size - 1 until untilIndex).count()) {
add(buildEmptyRoomSummary()) add(buildEmptyRoomSummary())
@ -124,43 +124,43 @@ internal class RustRoomSummaryDataSource(
} }
Timber.v("ApplyDiff: $diff for list with size: $size") Timber.v("ApplyDiff: $diff for list with size: $size")
when (diff) { when (diff) {
is SlidingSyncViewRoomsListDiff.Append -> { is SlidingSyncListRoomsListDiff.Append -> {
val roomSummaries = diff.values.map { val roomSummaries = diff.values.map {
buildSummaryForRoomListEntry(it) buildSummaryForRoomListEntry(it)
} }
addAll(roomSummaries) addAll(roomSummaries)
} }
is SlidingSyncViewRoomsListDiff.PushBack -> { is SlidingSyncListRoomsListDiff.PushBack -> {
val roomSummary = buildSummaryForRoomListEntry(diff.value) val roomSummary = buildSummaryForRoomListEntry(diff.value)
add(roomSummary) add(roomSummary)
} }
is SlidingSyncViewRoomsListDiff.PushFront -> { is SlidingSyncListRoomsListDiff.PushFront -> {
val roomSummary = buildSummaryForRoomListEntry(diff.value) val roomSummary = buildSummaryForRoomListEntry(diff.value)
add(0, roomSummary) add(0, roomSummary)
} }
is SlidingSyncViewRoomsListDiff.Set -> { is SlidingSyncListRoomsListDiff.Set -> {
fillUntil(diff.index.toInt()) fillUntil(diff.index.toInt())
val roomSummary = buildSummaryForRoomListEntry(diff.value) val roomSummary = buildSummaryForRoomListEntry(diff.value)
set(diff.index.toInt(), roomSummary) set(diff.index.toInt(), roomSummary)
} }
is SlidingSyncViewRoomsListDiff.Insert -> { is SlidingSyncListRoomsListDiff.Insert -> {
val roomSummary = buildSummaryForRoomListEntry(diff.value) val roomSummary = buildSummaryForRoomListEntry(diff.value)
add(diff.index.toInt(), roomSummary) add(diff.index.toInt(), roomSummary)
} }
is SlidingSyncViewRoomsListDiff.Remove -> { is SlidingSyncListRoomsListDiff.Remove -> {
removeAt(diff.index.toInt()) removeAt(diff.index.toInt())
} }
is SlidingSyncViewRoomsListDiff.Reset -> { is SlidingSyncListRoomsListDiff.Reset -> {
clear() clear()
addAll(diff.values.map { buildSummaryForRoomListEntry(it) }) addAll(diff.values.map { buildSummaryForRoomListEntry(it) })
} }
SlidingSyncViewRoomsListDiff.PopBack -> { SlidingSyncListRoomsListDiff.PopBack -> {
removeFirstOrNull() removeFirstOrNull()
} }
SlidingSyncViewRoomsListDiff.PopFront -> { SlidingSyncListRoomsListDiff.PopFront -> {
removeLastOrNull() removeLastOrNull()
} }
SlidingSyncViewRoomsListDiff.Clear -> { SlidingSyncListRoomsListDiff.Clear -> {
clear() clear()
} }
} }

24
libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/SlidingSyncViewFlows.kt → 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.CoroutineScope
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch 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.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<SlidingSyncViewRoomsListDiff> = fun SlidingSyncList.roomListDiff(scope: CoroutineScope): Flow<SlidingSyncListRoomsListDiff> =
mxCallbackFlow { mxCallbackFlow {
val observer = object : SlidingSyncViewRoomListObserver { val observer = object : SlidingSyncListRoomListObserver {
override fun didReceiveUpdate(diff: SlidingSyncViewRoomsListDiff) { override fun didReceiveUpdate(diff: SlidingSyncListRoomsListDiff) {
scope.launch { scope.launch {
send(diff) send(diff)
} }
@ -39,8 +39,8 @@ fun SlidingSyncView.roomListDiff(scope: CoroutineScope): Flow<SlidingSyncViewRoo
observeRoomList(observer) observeRoomList(observer)
} }
fun SlidingSyncView.state(scope: CoroutineScope): Flow<SlidingSyncState> = mxCallbackFlow { fun SlidingSyncList.state(scope: CoroutineScope): Flow<SlidingSyncState> = mxCallbackFlow {
val observer = object : SlidingSyncViewStateObserver { val observer = object : SlidingSyncListStateObserver {
override fun didReceiveUpdate(newState: SlidingSyncState) { override fun didReceiveUpdate(newState: SlidingSyncState) {
scope.launch { scope.launch {
send(newState) send(newState)
@ -50,8 +50,8 @@ fun SlidingSyncView.state(scope: CoroutineScope): Flow<SlidingSyncState> = mxCal
observeState(observer) observeState(observer)
} }
fun SlidingSyncView.roomsCount(scope: CoroutineScope): Flow<UInt> = mxCallbackFlow { fun SlidingSyncList.roomsCount(scope: CoroutineScope): Flow<UInt> = mxCallbackFlow {
val observer = object : SlidingSyncViewRoomsCountObserver { val observer = object : SlidingSyncListRoomsCountObserver {
override fun didReceiveUpdate(count: UInt) { override fun didReceiveUpdate(count: UInt) {
scope.launch { scope.launch {
send(count) send(count)

2
libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt

@ -64,7 +64,7 @@ class FakeMatrixClient(
return userDisplayName return userDisplayName
} }
override suspend fun loadUserAvatarURLString(): Result<String> { override suspend fun loadUserAvatarURLString(): Result<String?> {
return userAvatarURLString return userAvatarURLString
} }

1
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 accessToken: String,
val refreshToken: String?, val refreshToken: String?,
val homeserverUrl: String, val homeserverUrl: String,
val isSoftLogout: Boolean,
val slidingSyncProxy: String? val slidingSyncProxy: String?
) )

2
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, accessToken = accessToken,
refreshToken = refreshToken, refreshToken = refreshToken,
homeserverUrl = homeserverUrl, homeserverUrl = homeserverUrl,
isSoftLogout = isSoftLogout,
slidingSyncProxy = slidingSyncProxy, slidingSyncProxy = slidingSyncProxy,
) )
} }
@ -37,7 +36,6 @@ internal fun io.element.android.libraries.matrix.session.SessionData.toApiModel(
accessToken = accessToken, accessToken = accessToken,
refreshToken = refreshToken, refreshToken = refreshToken,
homeserverUrl = homeserverUrl, homeserverUrl = homeserverUrl,
isSoftLogout = isSoftLogout,
slidingSyncProxy = slidingSyncProxy, slidingSyncProxy = slidingSyncProxy,
) )
} }

3
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, accessToken TEXT NOT NULL,
refreshToken TEXT, refreshToken TEXT,
homeserverUrl TEXT NOT NULL, homeserverUrl TEXT NOT NULL,
isSoftLogout INTEGER AS Boolean NOT NULL DEFAULT 0,
slidingSyncProxy TEXT slidingSyncProxy TEXT
); );
@ -15,7 +14,7 @@ selectByUserId:
SELECT * FROM SessionData WHERE userId = ?; SELECT * FROM SessionData WHERE userId = ?;
insertSessionData: insertSessionData:
INSERT INTO SessionData(userId, deviceId, accessToken, refreshToken, homeserverUrl, isSoftLogout, slidingSyncProxy) VALUES ?; INSERT INTO SessionData(userId, deviceId, accessToken, refreshToken, homeserverUrl, slidingSyncProxy) VALUES ?;
removeSession: removeSession:
DELETE FROM SessionData WHERE userId = ?; DELETE FROM SessionData WHERE userId = ?;

1
libraries/session-storage/impl/src/test/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStoreTests.kt

@ -37,7 +37,6 @@ class DatabaseSessionStoreTests {
accessToken = "accessToken", accessToken = "accessToken",
refreshToken = "refreshToken", refreshToken = "refreshToken",
homeserverUrl = "homeserverUrl", homeserverUrl = "homeserverUrl",
isSoftLogout = false,
slidingSyncProxy = null slidingSyncProxy = null
) )

Loading…
Cancel
Save