Fix new logins with Simplified SS using the proxy (#3417)
* Fix new logins with Simplified SS using the proxy * Make sure `ClientBuilderSlidingSync.Restored` is always used for restored sessions
This commit is contained in:
parent
87a485baf6
commit
1b79887c9d
2 changed files with 22 additions and 15 deletions
|
|
@ -56,16 +56,11 @@ class RustMatrixClientFactory @Inject constructor(
|
||||||
private val appPreferencesStore: AppPreferencesStore,
|
private val appPreferencesStore: AppPreferencesStore,
|
||||||
) {
|
) {
|
||||||
suspend fun create(sessionData: SessionData): RustMatrixClient = withContext(coroutineDispatchers.io) {
|
suspend fun create(sessionData: SessionData): RustMatrixClient = withContext(coroutineDispatchers.io) {
|
||||||
val sessionDelegate = RustClientSessionDelegate(sessionStore, appCoroutineScope, coroutineDispatchers)
|
val sessionDelegate = RustClientSessionDelegate(sessionStore, appCoroutineScope, coroutineDispatchers)
|
||||||
|
|
||||||
val client = getBaseClientBuilder(
|
val client = getBaseClientBuilder(
|
||||||
sessionPaths = sessionData.getSessionPaths(),
|
sessionPaths = sessionData.getSessionPaths(),
|
||||||
passphrase = sessionData.passphrase,
|
passphrase = sessionData.passphrase,
|
||||||
slidingSync = when {
|
restore = true,
|
||||||
AuthenticationConfig.SLIDING_SYNC_PROXY_URL != null -> ClientBuilderSlidingSync.CustomProxy(AuthenticationConfig.SLIDING_SYNC_PROXY_URL!!)
|
|
||||||
appPreferencesStore.isSimplifiedSlidingSyncEnabledFlow().first() -> ClientBuilderSlidingSync.Simplified
|
|
||||||
else -> ClientBuilderSlidingSync.Restored
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
.homeserverUrl(sessionData.homeserverUrl)
|
.homeserverUrl(sessionData.homeserverUrl)
|
||||||
.username(sessionData.userId)
|
.username(sessionData.userId)
|
||||||
|
|
@ -95,11 +90,19 @@ class RustMatrixClientFactory @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun getBaseClientBuilder(
|
internal suspend fun getBaseClientBuilder(
|
||||||
sessionPaths: SessionPaths,
|
sessionPaths: SessionPaths,
|
||||||
passphrase: String?,
|
passphrase: String?,
|
||||||
slidingSync: ClientBuilderSlidingSync,
|
restore: Boolean,
|
||||||
): ClientBuilder {
|
): 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()
|
return ClientBuilder()
|
||||||
.sessionPaths(
|
.sessionPaths(
|
||||||
dataPath = sessionPaths.fileDirectory.absolutePath,
|
dataPath = sessionPaths.fileDirectory.absolutePath,
|
||||||
|
|
@ -116,7 +119,8 @@ class RustMatrixClientFactory @Inject constructor(
|
||||||
ClientBuilderSlidingSync.Restored -> this
|
ClientBuilderSlidingSync.Restored -> this
|
||||||
is ClientBuilderSlidingSync.CustomProxy -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.Proxy(slidingSync.url))
|
is ClientBuilderSlidingSync.CustomProxy -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.Proxy(slidingSync.url))
|
||||||
ClientBuilderSlidingSync.Discovered -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.DiscoverProxy)
|
ClientBuilderSlidingSync.Discovered -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.DiscoverProxy)
|
||||||
ClientBuilderSlidingSync.Simplified -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.Native)
|
ClientBuilderSlidingSync.Simplified -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.DiscoverNative)
|
||||||
|
ClientBuilderSlidingSync.ForcedSimplified -> slidingSyncVersionBuilder(SlidingSyncVersionBuilder.Native)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.run {
|
.run {
|
||||||
|
|
@ -136,8 +140,12 @@ sealed interface ClientBuilderSlidingSync {
|
||||||
// A proxy must be discovered whilst building the session.
|
// A proxy must be discovered whilst building the session.
|
||||||
data object Discovered : ClientBuilderSlidingSync
|
data object Discovered : ClientBuilderSlidingSync
|
||||||
|
|
||||||
// Use Simplified Sliding Sync (discovery isn't a thing yet).
|
// Use Simplified Sliding Sync.
|
||||||
data object Simplified : ClientBuilderSlidingSync
|
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(
|
private fun SessionData.toSession() = Session(
|
||||||
|
|
|
||||||
|
|
@ -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.MatrixQrCodeLoginData
|
||||||
import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep
|
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.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.RustMatrixClientFactory
|
||||||
import io.element.android.libraries.matrix.impl.auth.qrlogin.QrErrorMapper
|
import io.element.android.libraries.matrix.impl.auth.qrlogin.QrErrorMapper
|
||||||
import io.element.android.libraries.matrix.impl.auth.qrlogin.SdkQrCodeLoginData
|
import io.element.android.libraries.matrix.impl.auth.qrlogin.SdkQrCodeLoginData
|
||||||
|
|
@ -222,7 +221,7 @@ class RustMatrixAuthenticationService @Inject constructor(
|
||||||
val client = rustMatrixClientFactory.getBaseClientBuilder(
|
val client = rustMatrixClientFactory.getBaseClientBuilder(
|
||||||
sessionPaths = emptySessionPaths,
|
sessionPaths = emptySessionPaths,
|
||||||
passphrase = pendingPassphrase,
|
passphrase = pendingPassphrase,
|
||||||
slidingSync = ClientBuilderSlidingSync.Discovered,
|
restore = false,
|
||||||
)
|
)
|
||||||
.buildWithQrCode(
|
.buildWithQrCode(
|
||||||
qrCodeData = (qrCodeData as SdkQrCodeLoginData).rustQrCodeData,
|
qrCodeData = (qrCodeData as SdkQrCodeLoginData).rustQrCodeData,
|
||||||
|
|
@ -259,13 +258,13 @@ class RustMatrixAuthenticationService @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getBaseClientBuilder(
|
private suspend fun getBaseClientBuilder(
|
||||||
sessionPaths: SessionPaths,
|
sessionPaths: SessionPaths,
|
||||||
) = rustMatrixClientFactory
|
) = rustMatrixClientFactory
|
||||||
.getBaseClientBuilder(
|
.getBaseClientBuilder(
|
||||||
sessionPaths = sessionPaths,
|
sessionPaths = sessionPaths,
|
||||||
passphrase = pendingPassphrase,
|
passphrase = pendingPassphrase,
|
||||||
slidingSync = ClientBuilderSlidingSync.Discovered,
|
restore = false,
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun clear() {
|
private fun clear() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue