|
|
@ -23,10 +23,12 @@ import io.element.android.libraries.matrix.impl.certificates.UserCertificatesPro |
|
|
|
import io.element.android.libraries.matrix.impl.proxy.ProxyProvider |
|
|
|
import io.element.android.libraries.matrix.impl.proxy.ProxyProvider |
|
|
|
import io.element.android.libraries.matrix.impl.util.anonymizedTokens |
|
|
|
import io.element.android.libraries.matrix.impl.util.anonymizedTokens |
|
|
|
import io.element.android.libraries.network.useragent.UserAgentProvider |
|
|
|
import io.element.android.libraries.network.useragent.UserAgentProvider |
|
|
|
|
|
|
|
import io.element.android.libraries.preferences.api.store.AppPreferencesStore |
|
|
|
import io.element.android.libraries.sessionstorage.api.SessionData |
|
|
|
import io.element.android.libraries.sessionstorage.api.SessionData |
|
|
|
import io.element.android.libraries.sessionstorage.api.SessionStore |
|
|
|
import io.element.android.libraries.sessionstorage.api.SessionStore |
|
|
|
import io.element.android.services.toolbox.api.systemclock.SystemClock |
|
|
|
import io.element.android.services.toolbox.api.systemclock.SystemClock |
|
|
|
import kotlinx.coroutines.CoroutineScope |
|
|
|
import kotlinx.coroutines.CoroutineScope |
|
|
|
|
|
|
|
import kotlinx.coroutines.flow.first |
|
|
|
import kotlinx.coroutines.withContext |
|
|
|
import kotlinx.coroutines.withContext |
|
|
|
import org.matrix.rustcomponents.sdk.ClientBuilder |
|
|
|
import org.matrix.rustcomponents.sdk.ClientBuilder |
|
|
|
import org.matrix.rustcomponents.sdk.Session |
|
|
|
import org.matrix.rustcomponents.sdk.Session |
|
|
@ -46,9 +48,14 @@ class RustMatrixClientFactory @Inject constructor( |
|
|
|
private val proxyProvider: ProxyProvider, |
|
|
|
private val proxyProvider: ProxyProvider, |
|
|
|
private val clock: SystemClock, |
|
|
|
private val clock: SystemClock, |
|
|
|
private val utdTracker: UtdTracker, |
|
|
|
private val utdTracker: UtdTracker, |
|
|
|
|
|
|
|
private val appPreferencesStore: AppPreferencesStore, |
|
|
|
) { |
|
|
|
) { |
|
|
|
suspend fun create(sessionData: SessionData): RustMatrixClient = withContext(coroutineDispatchers.io) { |
|
|
|
suspend fun create(sessionData: SessionData): RustMatrixClient = withContext(coroutineDispatchers.io) { |
|
|
|
val client = getBaseClientBuilder(sessionData.sessionPath, sessionData.passphrase) |
|
|
|
val client = getBaseClientBuilder( |
|
|
|
|
|
|
|
sessionPath = sessionData.sessionPath, |
|
|
|
|
|
|
|
passphrase = sessionData.passphrase, |
|
|
|
|
|
|
|
useSimplifiedSlidingSync = appPreferencesStore.isSimplifiedSlidingSyncEnabledFlow().first(), |
|
|
|
|
|
|
|
) |
|
|
|
.homeserverUrl(sessionData.homeserverUrl) |
|
|
|
.homeserverUrl(sessionData.homeserverUrl) |
|
|
|
.username(sessionData.userId) |
|
|
|
.username(sessionData.userId) |
|
|
|
.use { it.build() } |
|
|
|
.use { it.build() } |
|
|
@ -70,6 +77,7 @@ class RustMatrixClientFactory @Inject constructor( |
|
|
|
baseDirectory = baseDirectory, |
|
|
|
baseDirectory = baseDirectory, |
|
|
|
baseCacheDirectory = cacheDirectory, |
|
|
|
baseCacheDirectory = cacheDirectory, |
|
|
|
clock = clock, |
|
|
|
clock = clock, |
|
|
|
|
|
|
|
appPreferencesStore = appPreferencesStore, |
|
|
|
).also { |
|
|
|
).also { |
|
|
|
Timber.tag(it.toString()).d("Creating Client with access token '$anonymizedAccessToken' and refresh token '$anonymizedRefreshToken'") |
|
|
|
Timber.tag(it.toString()).d("Creating Client with access token '$anonymizedAccessToken' and refresh token '$anonymizedRefreshToken'") |
|
|
|
} |
|
|
|
} |
|
|
@ -79,6 +87,7 @@ class RustMatrixClientFactory @Inject constructor( |
|
|
|
sessionPath: String, |
|
|
|
sessionPath: String, |
|
|
|
passphrase: String?, |
|
|
|
passphrase: String?, |
|
|
|
slidingSyncProxy: String? = null, |
|
|
|
slidingSyncProxy: String? = null, |
|
|
|
|
|
|
|
useSimplifiedSlidingSync: Boolean = false, |
|
|
|
): ClientBuilder { |
|
|
|
): ClientBuilder { |
|
|
|
return ClientBuilder() |
|
|
|
return ClientBuilder() |
|
|
|
.sessionPath(sessionPath) |
|
|
|
.sessionPath(sessionPath) |
|
|
@ -88,6 +97,7 @@ class RustMatrixClientFactory @Inject constructor( |
|
|
|
.addRootCertificates(userCertificatesProvider.provides()) |
|
|
|
.addRootCertificates(userCertificatesProvider.provides()) |
|
|
|
.autoEnableBackups(true) |
|
|
|
.autoEnableBackups(true) |
|
|
|
.autoEnableCrossSigning(true) |
|
|
|
.autoEnableCrossSigning(true) |
|
|
|
|
|
|
|
.simplifiedSlidingSync(useSimplifiedSlidingSync) |
|
|
|
.run { |
|
|
|
.run { |
|
|
|
// Workaround for non-nullable proxy parameter in the SDK, since each call to the ClientBuilder returns a new reference we need to keep |
|
|
|
// Workaround for non-nullable proxy parameter in the SDK, since each call to the ClientBuilder returns a new reference we need to keep |
|
|
|
proxyProvider.provides()?.let { proxy(it) } ?: this |
|
|
|
proxyProvider.provides()?.let { proxy(it) } ?: this |
|
|
|