Merge pull request #906 from vector-im/feature/fga/update-rust-sdk-0.1.34
Feature/fga/update rust sdk 0.1.34
This commit is contained in:
commit
9741b3df64
15 changed files with 55 additions and 77 deletions
|
|
@ -73,10 +73,12 @@ import java.io.File
|
|||
import org.matrix.rustcomponents.sdk.CreateRoomParameters as RustCreateRoomParameters
|
||||
import org.matrix.rustcomponents.sdk.RoomPreset as RustRoomPreset
|
||||
import org.matrix.rustcomponents.sdk.RoomVisibility as RustRoomVisibility
|
||||
import org.matrix.rustcomponents.sdk.SyncService as ClientSyncService
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
class RustMatrixClient constructor(
|
||||
private val client: Client,
|
||||
private val syncService: ClientSyncService,
|
||||
private val sessionStore: SessionStore,
|
||||
appCoroutineScope: CoroutineScope,
|
||||
private val dispatchers: CoroutineDispatchers,
|
||||
|
|
@ -86,14 +88,11 @@ class RustMatrixClient constructor(
|
|||
) : MatrixClient {
|
||||
|
||||
override val sessionId: UserId = UserId(client.userId())
|
||||
private val app = client.app().use { builder ->
|
||||
builder.finish()
|
||||
}
|
||||
private val roomListService = app.roomListService()
|
||||
private val roomListService = syncService.roomListService()
|
||||
private val sessionDispatcher = dispatchers.io.limitedParallelism(64)
|
||||
private val sessionCoroutineScope = appCoroutineScope.childScope(dispatchers.main, "Session-${sessionId}")
|
||||
private val verificationService = RustSessionVerificationService()
|
||||
private val syncService = RustSyncService(app, roomListService.stateFlow(), sessionCoroutineScope)
|
||||
private val rustSyncService = RustSyncService(syncService, roomListService.stateFlow(), sessionCoroutineScope)
|
||||
private val pushersService = RustPushersService(
|
||||
client = client,
|
||||
dispatchers = dispatchers,
|
||||
|
|
@ -131,7 +130,7 @@ class RustMatrixClient constructor(
|
|||
|
||||
init {
|
||||
client.setDelegate(clientDelegate)
|
||||
syncService.syncState
|
||||
rustSyncService.syncState
|
||||
.onEach { syncState ->
|
||||
if (syncState == SyncState.Syncing) {
|
||||
onSlidingSyncUpdate()
|
||||
|
|
@ -247,7 +246,7 @@ class RustMatrixClient constructor(
|
|||
}
|
||||
}
|
||||
|
||||
override fun syncService(): SyncService = syncService
|
||||
override fun syncService(): SyncService = rustSyncService
|
||||
|
||||
override fun sessionVerificationService(): SessionVerificationService = verificationService
|
||||
|
||||
|
|
@ -259,7 +258,7 @@ class RustMatrixClient constructor(
|
|||
sessionCoroutineScope.cancel()
|
||||
client.setDelegate(null)
|
||||
verificationService.destroy()
|
||||
app.destroy()
|
||||
syncService.destroy()
|
||||
roomListService.destroy()
|
||||
notificationClient.destroy()
|
||||
client.destroy()
|
||||
|
|
|
|||
|
|
@ -181,9 +181,11 @@ class RustMatrixAuthenticationService @Inject constructor(
|
|||
*/
|
||||
}
|
||||
|
||||
private fun createMatrixClient(client: Client): MatrixClient {
|
||||
private suspend fun createMatrixClient(client: Client): MatrixClient {
|
||||
val syncService = client.syncService().finish()
|
||||
return RustMatrixClient(
|
||||
client = client,
|
||||
syncService = syncService,
|
||||
sessionStore = sessionStore,
|
||||
appCoroutineScope = appCoroutineScope,
|
||||
dispatchers = coroutineDispatchers,
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ import io.element.android.libraries.matrix.impl.timeline.RustMatrixTimeline
|
|||
import io.element.android.libraries.matrix.impl.timeline.backPaginationStatusFlow
|
||||
import io.element.android.libraries.matrix.impl.timeline.timelineDiffFlow
|
||||
import io.element.android.libraries.sessionstorage.api.SessionData
|
||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
||||
import io.element.android.services.toolbox.api.systemclock.SystemClock
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
|
|
@ -82,6 +81,7 @@ class RustMatrixRoom(
|
|||
|
||||
// Create a dispatcher for all room methods...
|
||||
private val roomDispatcher = coroutineDispatchers.io.limitedParallelism(32)
|
||||
|
||||
//...except getMember methods as it could quickly fill the roomDispatcher...
|
||||
private val roomMembersDispatcher = coroutineDispatchers.io.limitedParallelism(8)
|
||||
|
||||
|
|
@ -257,15 +257,9 @@ class RustMatrixRoom(
|
|||
}
|
||||
}
|
||||
|
||||
override suspend fun acceptInvitation(): Result<Unit> = withContext(roomDispatcher) {
|
||||
override suspend fun join(): Result<Unit> = withContext(roomDispatcher) {
|
||||
runCatching {
|
||||
innerRoom.acceptInvitation()
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun rejectInvitation(): Result<Unit> = withContext(roomDispatcher) {
|
||||
runCatching {
|
||||
innerRoom.rejectInvitation()
|
||||
innerRoom.join()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@
|
|||
package io.element.android.libraries.matrix.impl.sync
|
||||
|
||||
import io.element.android.libraries.matrix.api.sync.SyncState
|
||||
import org.matrix.rustcomponents.sdk.AppState
|
||||
import org.matrix.rustcomponents.sdk.RoomListServiceState
|
||||
import org.matrix.rustcomponents.sdk.SyncServiceState
|
||||
|
||||
internal fun RoomListServiceState.toSyncState(): SyncState {
|
||||
return when (this) {
|
||||
|
|
@ -30,10 +30,11 @@ internal fun RoomListServiceState.toSyncState(): SyncState {
|
|||
}
|
||||
}
|
||||
|
||||
internal fun AppState.toSyncState(): SyncState {
|
||||
internal fun SyncServiceState.toSyncState(): SyncState {
|
||||
return when (this) {
|
||||
AppState.RUNNING -> SyncState.Syncing
|
||||
AppState.TERMINATED -> SyncState.Terminated
|
||||
AppState.ERROR -> SyncState.InError
|
||||
SyncServiceState.IDLE -> SyncState.Idle
|
||||
SyncServiceState.RUNNING -> SyncState.Syncing
|
||||
SyncServiceState.TERMINATED -> SyncState.Terminated
|
||||
SyncServiceState.ERROR -> SyncState.InError
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,24 +26,24 @@ import kotlinx.coroutines.flow.distinctUntilChanged
|
|||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import org.matrix.rustcomponents.sdk.App
|
||||
import org.matrix.rustcomponents.sdk.RoomListServiceState
|
||||
import org.matrix.rustcomponents.sdk.SyncServiceInterface
|
||||
import timber.log.Timber
|
||||
|
||||
class RustSyncService(
|
||||
private val app: App,
|
||||
private val innerSyncService: SyncServiceInterface,
|
||||
roomListStateFlow: Flow<RoomListServiceState>,
|
||||
sessionCoroutineScope: CoroutineScope
|
||||
) : SyncService {
|
||||
|
||||
override fun startSync() = runCatching {
|
||||
override suspend fun startSync() = runCatching {
|
||||
Timber.v("Start sync")
|
||||
app.start()
|
||||
innerSyncService.start()
|
||||
}
|
||||
|
||||
override fun stopSync() = runCatching {
|
||||
Timber.v("Stop sync")
|
||||
app.pause()
|
||||
innerSyncService.pause()
|
||||
}
|
||||
|
||||
override val syncState: StateFlow<SyncState> =
|
||||
|
|
|
|||
|
|
@ -21,14 +21,14 @@ import kotlinx.coroutines.channels.Channel
|
|||
import kotlinx.coroutines.channels.trySendBlocking
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.buffer
|
||||
import org.matrix.rustcomponents.sdk.App
|
||||
import org.matrix.rustcomponents.sdk.AppState
|
||||
import org.matrix.rustcomponents.sdk.AppStateObserver
|
||||
import org.matrix.rustcomponents.sdk.SyncService
|
||||
import org.matrix.rustcomponents.sdk.SyncServiceState
|
||||
import org.matrix.rustcomponents.sdk.SyncServiceStateObserver
|
||||
|
||||
fun App.stateFlow(): Flow<AppState> =
|
||||
fun SyncService.stateFlow(): Flow<SyncServiceState> =
|
||||
mxCallbackFlow {
|
||||
val listener = object : AppStateObserver {
|
||||
override fun onUpdate(state: AppState) {
|
||||
val listener = object : SyncServiceStateObserver {
|
||||
override fun onUpdate(state: SyncServiceState) {
|
||||
trySendBlocking(state)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue