diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt index 7a73c04313..6b721b92a7 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt @@ -56,16 +56,11 @@ class RustMatrixClientFactory @Inject constructor( private val appPreferencesStore: AppPreferencesStore, ) { suspend fun create(sessionData: SessionData): RustMatrixClient = withContext(coroutineDispatchers.io) { - val sessionDelegate = RustClientSessionDelegate(sessionStore, appCoroutineScope, coroutineDispatchers) - + val sessionDelegate = RustClientSessionDelegate(sessionStore, appCoroutineScope, coroutineDispatchers) val client = getBaseClientBuilder( sessionPaths = sessionData.getSessionPaths(), passphrase = sessionData.passphrase, - slidingSync = when { - AuthenticationConfig.SLIDING_SYNC_PROXY_URL != null -> ClientBuilderSlidingSync.CustomProxy(AuthenticationConfig.SLIDING_SYNC_PROXY_URL!!) - appPreferencesStore.isSimplifiedSlidingSyncEnabledFlow().first() -> ClientBuilderSlidingSync.Simplified - else -> ClientBuilderSlidingSync.Restored - } + restore = true, ) .homeserverUrl(sessionData.homeserverUrl) .username(sessionData.userId) @@ -95,11 +90,19 @@ class RustMatrixClientFactory @Inject constructor( } } - internal fun getBaseClientBuilder( + internal suspend fun getBaseClientBuilder( sessionPaths: SessionPaths, passphrase: String?, - slidingSync: ClientBuilderSlidingSync, + restore: Boolean, ): ClientBuilder { + val slidingSync = when { + // Always check restore first, since otherwise other values could accidentally override the already persisted config + restore -> ClientBuilderSlidingSync.Restored + AuthenticationConfig.SLIDING_SYNC_PROXY_URL != null -> ClientBuilderSlidingSync.CustomProxy(AuthenticationConfig.SLIDING_SYNC_PROXY_URL!!) + appPreferencesStore.isSimplifiedSlidingSyncEnabledFlow().first() -> ClientBuilderSlidingSync.Simplified + else -> ClientBuilderSlidingSync.Discovered + } + return ClientBuilder() .sessionPaths( dataPath = sessionPaths.fileDirectory.absolutePath, @@ -116,7 +119,8 @@ class RustMatrixClientFactory @Inject constructor( ClientBuilderSlidingSync.Restored -> this is ClientBuilderSlidingSync.CustomProxy -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.Proxy(slidingSync.url)) ClientBuilderSlidingSync.Discovered -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.DiscoverProxy) - ClientBuilderSlidingSync.Simplified -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.Native) + ClientBuilderSlidingSync.Simplified -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.DiscoverNative) + ClientBuilderSlidingSync.ForcedSimplified -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.Native) } } .run { @@ -136,8 +140,12 @@ sealed interface ClientBuilderSlidingSync { // A proxy must be discovered whilst building the session. data object Discovered : ClientBuilderSlidingSync - // Use Simplified Sliding Sync (discovery isn't a thing yet). + // Use Simplified Sliding Sync. data object Simplified : ClientBuilderSlidingSync + + // Force using Simplified Sliding Sync. + // TODO allow the user to select between proxy, simplified or force simplified in developer options. + data object ForcedSimplified : ClientBuilderSlidingSync } private fun SessionData.toSession() = Session( 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 276cf4243c..5c8c148d2f 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 @@ -28,7 +28,6 @@ import io.element.android.libraries.matrix.api.auth.OidcDetails import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep import io.element.android.libraries.matrix.api.core.SessionId -import io.element.android.libraries.matrix.impl.ClientBuilderSlidingSync import io.element.android.libraries.matrix.impl.RustMatrixClientFactory import io.element.android.libraries.matrix.impl.auth.qrlogin.QrErrorMapper import io.element.android.libraries.matrix.impl.auth.qrlogin.SdkQrCodeLoginData @@ -222,7 +221,7 @@ class RustMatrixAuthenticationService @Inject constructor( val client = rustMatrixClientFactory.getBaseClientBuilder( sessionPaths = emptySessionPaths, passphrase = pendingPassphrase, - slidingSync = ClientBuilderSlidingSync.Discovered, + restore = false, ) .buildWithQrCode( qrCodeData = (qrCodeData as SdkQrCodeLoginData).rustQrCodeData, @@ -259,13 +258,13 @@ class RustMatrixAuthenticationService @Inject constructor( } } - private fun getBaseClientBuilder( + private suspend fun getBaseClientBuilder( sessionPaths: SessionPaths, ) = rustMatrixClientFactory .getBaseClientBuilder( sessionPaths = sessionPaths, passphrase = pendingPassphrase, - slidingSync = ClientBuilderSlidingSync.Discovered, + restore = false, ) private fun clear() {