Skip to content

Commit 9b96bd4

Browse files
committed
Update rust sdk : start branching new SyncService (wip)
1 parent 2488432 commit 9b96bd4

File tree

10 files changed

+37
-30
lines changed

10 files changed

+37
-30
lines changed

appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,9 @@ class LoggedInFlowNode @AssistedInject constructor(
139139
}
140140
},
141141
onResume = {
142-
syncService.startSync()
142+
lifecycleScope.launch {
143+
syncService.startSync()
144+
}
143145
},
144146
onPause = {
145147
syncService.stopSync()

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
145145
appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" }
146146
molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" }
147147
timber = "com.jakewharton.timber:timber:5.0.1"
148-
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.31"
148+
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.32"
149149
sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" }
150150
sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-driver", version.ref = "sqldelight" }
151151
sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" }

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/sync/SyncService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ interface SyncService {
2222
/**
2323
* Tries to start the sync. If already syncing it has no effect.
2424
*/
25-
fun startSync(): Result<Unit>
25+
suspend fun startSync(): Result<Unit>
2626

2727
/**
2828
* Tries to stop the sync. If service is not syncing it has no effect.

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ import java.io.File
7373
import org.matrix.rustcomponents.sdk.CreateRoomParameters as RustCreateRoomParameters
7474
import org.matrix.rustcomponents.sdk.RoomPreset as RustRoomPreset
7575
import org.matrix.rustcomponents.sdk.RoomVisibility as RustRoomVisibility
76+
import org.matrix.rustcomponents.sdk.SyncService as ClientSyncService
7677

7778
@OptIn(ExperimentalCoroutinesApi::class)
7879
class RustMatrixClient constructor(
7980
private val client: Client,
81+
private val syncService: ClientSyncService,
8082
private val sessionStore: SessionStore,
8183
appCoroutineScope: CoroutineScope,
8284
private val dispatchers: CoroutineDispatchers,
@@ -86,14 +88,11 @@ class RustMatrixClient constructor(
8688
) : MatrixClient {
8789

8890
override val sessionId: UserId = UserId(client.userId())
89-
private val app = client.app().use { builder ->
90-
builder.finish()
91-
}
92-
private val roomListService = app.roomListService()
91+
private val roomListService = syncService.roomListService()
9392
private val sessionDispatcher = dispatchers.io.limitedParallelism(64)
9493
private val sessionCoroutineScope = appCoroutineScope.childScope(dispatchers.main, "Session-${sessionId}")
9594
private val verificationService = RustSessionVerificationService()
96-
private val syncService = RustSyncService(app, roomListService.stateFlow(), sessionCoroutineScope)
95+
private val rustSyncService = RustSyncService(syncService, roomListService.stateFlow(), sessionCoroutineScope)
9796
private val pushersService = RustPushersService(
9897
client = client,
9998
dispatchers = dispatchers,
@@ -131,7 +130,7 @@ class RustMatrixClient constructor(
131130

132131
init {
133132
client.setDelegate(clientDelegate)
134-
syncService.syncState
133+
rustSyncService.syncState
135134
.onEach { syncState ->
136135
if (syncState == SyncState.Syncing) {
137136
onSlidingSyncUpdate()
@@ -245,7 +244,7 @@ class RustMatrixClient constructor(
245244
}
246245
}
247246

248-
override fun syncService(): SyncService = syncService
247+
override fun syncService(): SyncService = rustSyncService
249248

250249
override fun sessionVerificationService(): SessionVerificationService = verificationService
251250

@@ -257,7 +256,7 @@ class RustMatrixClient constructor(
257256
sessionCoroutineScope.cancel()
258257
client.setDelegate(null)
259258
verificationService.destroy()
260-
app.destroy()
259+
syncService.destroy()
261260
roomListService.destroy()
262261
notificationClient.destroy()
263262
client.destroy()

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,11 @@ class RustMatrixAuthenticationService @Inject constructor(
180180
*/
181181
}
182182

183-
private fun createMatrixClient(client: Client): MatrixClient {
183+
private suspend fun createMatrixClient(client: Client): MatrixClient {
184+
val syncService = client.syncService().finish()
184185
return RustMatrixClient(
185186
client = client,
187+
syncService = syncService,
186188
sessionStore = sessionStore,
187189
appCoroutineScope = appCoroutineScope,
188190
dispatchers = coroutineDispatchers,

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/AppStateMapper.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
package io.element.android.libraries.matrix.impl.sync
1818

1919
import io.element.android.libraries.matrix.api.sync.SyncState
20-
import org.matrix.rustcomponents.sdk.AppState
2120
import org.matrix.rustcomponents.sdk.RoomListServiceState
21+
import org.matrix.rustcomponents.sdk.SyncServiceState
2222

2323
internal fun RoomListServiceState.toSyncState(): SyncState {
2424
return when (this) {
@@ -30,10 +30,11 @@ internal fun RoomListServiceState.toSyncState(): SyncState {
3030
}
3131
}
3232

33-
internal fun AppState.toSyncState(): SyncState {
33+
internal fun SyncServiceState.toSyncState(): SyncState {
3434
return when (this) {
35-
AppState.RUNNING -> SyncState.Syncing
36-
AppState.TERMINATED -> SyncState.Terminated
37-
AppState.ERROR -> SyncState.InError
35+
SyncServiceState.IDLE -> SyncState.Idle
36+
SyncServiceState.RUNNING -> SyncState.Syncing
37+
SyncServiceState.TERMINATED -> SyncState.Terminated
38+
SyncServiceState.ERROR -> SyncState.InError
3839
}
3940
}

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/RustSyncService.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,24 @@ import kotlinx.coroutines.flow.distinctUntilChanged
2626
import kotlinx.coroutines.flow.map
2727
import kotlinx.coroutines.flow.onEach
2828
import kotlinx.coroutines.flow.stateIn
29-
import org.matrix.rustcomponents.sdk.App
3029
import org.matrix.rustcomponents.sdk.RoomListServiceState
30+
import org.matrix.rustcomponents.sdk.SyncServiceInterface
3131
import timber.log.Timber
3232

3333
class RustSyncService(
34-
private val app: App,
34+
private val innerSyncService: SyncServiceInterface,
3535
roomListStateFlow: Flow<RoomListServiceState>,
3636
sessionCoroutineScope: CoroutineScope
3737
) : SyncService {
3838

39-
override fun startSync() = runCatching {
39+
override suspend fun startSync() = runCatching {
4040
Timber.v("Start sync")
41-
app.start()
41+
innerSyncService.start()
4242
}
4343

4444
override fun stopSync() = runCatching {
4545
Timber.v("Stop sync")
46-
app.pause()
46+
innerSyncService.pause()
4747
}
4848

4949
override val syncState: StateFlow<SyncState> =

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/AppExtension.kt renamed to libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/sync/SyncServiceExtension.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ import kotlinx.coroutines.channels.Channel
2121
import kotlinx.coroutines.channels.trySendBlocking
2222
import kotlinx.coroutines.flow.Flow
2323
import kotlinx.coroutines.flow.buffer
24-
import org.matrix.rustcomponents.sdk.App
25-
import org.matrix.rustcomponents.sdk.AppState
26-
import org.matrix.rustcomponents.sdk.AppStateObserver
24+
import org.matrix.rustcomponents.sdk.SyncService
25+
import org.matrix.rustcomponents.sdk.SyncServiceState
26+
import org.matrix.rustcomponents.sdk.SyncServiceStateObserver
2727

28-
fun App.stateFlow(): Flow<AppState> =
28+
fun SyncService.stateFlow(): Flow<SyncServiceState> =
2929
mxCallbackFlow {
30-
val listener = object : AppStateObserver {
31-
override fun onUpdate(state: AppState) {
30+
val listener = object : SyncServiceStateObserver {
31+
override fun onUpdate(state: SyncServiceState) {
3232
trySendBlocking(state)
3333
}
3434
}

libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/sync/FakeSyncService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class FakeSyncService : SyncService {
2929
syncStateFlow.value = SyncState.InError
3030
}
3131

32-
override fun startSync(): Result<Unit> {
32+
override suspend fun startSync(): Result<Unit> {
3333
syncStateFlow.value = SyncState.Syncing
3434
return Result.success(Unit)
3535
}

samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import io.element.android.libraries.matrix.api.core.RoomId
4040
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
4141
import io.element.android.services.toolbox.impl.strings.AndroidStringProvider
4242
import kotlinx.coroutines.launch
43+
import kotlinx.coroutines.runBlocking
4344
import kotlinx.coroutines.withContext
4445
import kotlinx.datetime.Clock
4546
import kotlinx.datetime.TimeZone
@@ -103,7 +104,9 @@ class RoomListScreen(
103104

104105
DisposableEffect(Unit) {
105106
Timber.w("Start sync!")
106-
matrixClient.syncService().startSync()
107+
runBlocking {
108+
matrixClient.syncService().startSync()
109+
}
107110
onDispose {
108111
Timber.w("Stop sync!")
109112
matrixClient.syncService().stopSync()

0 commit comments

Comments
 (0)