16
16
17
17
package io.element.android.libraries.matrix.impl.auth
18
18
19
- import android.content.Context
19
+ // TODO Oidc
20
+ // import org.matrix.rustcomponents.sdk.OidcAuthenticationUrl
20
21
import com.squareup.anvil.annotations.ContributesBinding
21
22
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
22
23
import io.element.android.libraries.core.extensions.mapFailure
23
24
import io.element.android.libraries.di.AppScope
24
- import io.element.android.libraries.di.ApplicationContext
25
25
import io.element.android.libraries.di.SingleIn
26
26
import io.element.android.libraries.matrix.api.MatrixClient
27
27
import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
28
28
import io.element.android.libraries.matrix.api.auth.MatrixHomeServerDetails
29
29
import io.element.android.libraries.matrix.api.auth.OidcDetails
30
30
import io.element.android.libraries.matrix.api.core.SessionId
31
- import io.element.android.libraries.matrix.impl.RustMatrixClient
31
+ import io.element.android.libraries.matrix.impl.RustMatrixClientFactory
32
32
import io.element.android.libraries.matrix.impl.exception.mapClientException
33
33
import io.element.android.libraries.network.useragent.UserAgentProvider
34
34
import io.element.android.libraries.sessionstorage.api.SessionData
35
35
import io.element.android.libraries.sessionstorage.api.SessionStore
36
- import io.element.android.services.toolbox.api.systemclock.SystemClock
37
- import kotlinx.coroutines.CoroutineScope
38
36
import kotlinx.coroutines.flow.Flow
39
37
import kotlinx.coroutines.flow.MutableStateFlow
40
38
import kotlinx.coroutines.flow.StateFlow
41
39
import kotlinx.coroutines.withContext
42
- import org.matrix.rustcomponents.sdk.Client
43
- import org.matrix.rustcomponents.sdk.ClientBuilder
44
- // TODO Oidc
45
- // import org.matrix.rustcomponents.sdk.OidcAuthenticationUrl
46
40
import org.matrix.rustcomponents.sdk.Session
47
41
import org.matrix.rustcomponents.sdk.use
48
42
import java.io.File
@@ -53,13 +47,11 @@ import org.matrix.rustcomponents.sdk.AuthenticationService as RustAuthentication
53
47
@ContributesBinding(AppScope ::class )
54
48
@SingleIn(AppScope ::class )
55
49
class RustMatrixAuthenticationService @Inject constructor(
56
- @ApplicationContext private val context : Context ,
57
- private val baseDirectory : File ,
58
- private val appCoroutineScope : CoroutineScope ,
50
+ baseDirectory : File ,
59
51
private val coroutineDispatchers : CoroutineDispatchers ,
60
52
private val sessionStore : SessionStore ,
61
- private val clock : SystemClock ,
62
- private val userAgentProvider : UserAgentProvider ,
53
+ userAgentProvider : UserAgentProvider ,
54
+ private val rustMatrixClientFactory : RustMatrixClientFactory ,
63
55
) : MatrixAuthenticationService {
64
56
65
57
private val authService: RustAuthenticationService = RustAuthenticationService (
@@ -84,14 +76,7 @@ class RustMatrixAuthenticationService @Inject constructor(
84
76
runCatching {
85
77
val sessionData = sessionStore.getSession(sessionId.value)
86
78
if (sessionData != null ) {
87
- val client = ClientBuilder ()
88
- .basePath(baseDirectory.absolutePath)
89
- .homeserverUrl(sessionData.homeserverUrl)
90
- .username(sessionData.userId)
91
- .userAgent(userAgentProvider.provide())
92
- .use { it.build() }
93
- client.restoreSession(sessionData.toSession())
94
- createMatrixClient(client)
79
+ rustMatrixClientFactory.create(sessionData)
95
80
} else {
96
81
error(" No session to restore with id $sessionId " )
97
82
}
@@ -181,30 +166,8 @@ class RustMatrixAuthenticationService @Inject constructor(
181
166
*/
182
167
}
183
168
184
- private suspend fun createMatrixClient (client : Client ): MatrixClient {
185
- val syncService = client.syncService().finish()
186
- return RustMatrixClient (
187
- client = client,
188
- syncService = syncService,
189
- sessionStore = sessionStore,
190
- appCoroutineScope = appCoroutineScope,
191
- dispatchers = coroutineDispatchers,
192
- baseDirectory = baseDirectory,
193
- baseCacheDirectory = context.cacheDir,
194
- clock = clock,
195
- )
196
- }
197
169
}
198
170
199
- private fun SessionData.toSession () = Session (
200
- accessToken = accessToken,
201
- refreshToken = refreshToken,
202
- userId = userId,
203
- deviceId = deviceId,
204
- homeserverUrl = homeserverUrl,
205
- slidingSyncProxy = slidingSyncProxy,
206
- )
207
-
208
171
private fun Session.toSessionData () = SessionData (
209
172
userId = userId,
210
173
deviceId = deviceId,
0 commit comments