Fix the case when a valid homeserver url can't be extracted from the MXID (#182)
* Fix the case when a valid homeserver url can't be extracted from the mxid * Add changelog * Add `use` to Rust SDK calls in loginto automatically free memory from Rust objects
This commit is contained in:
parent
0c8d8b62f8
commit
126ad1c8cc
2 changed files with 19 additions and 18 deletions
1
changelog.d/182.bugfix
Normal file
1
changelog.d/182.bugfix
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Fix the case when a valid homeserver url can't be extracted from the MXID
|
||||||
|
|
@ -38,6 +38,7 @@ import org.matrix.rustcomponents.sdk.AuthenticationService
|
||||||
import org.matrix.rustcomponents.sdk.Client
|
import org.matrix.rustcomponents.sdk.Client
|
||||||
import org.matrix.rustcomponents.sdk.ClientBuilder
|
import org.matrix.rustcomponents.sdk.ClientBuilder
|
||||||
import org.matrix.rustcomponents.sdk.Session
|
import org.matrix.rustcomponents.sdk.Session
|
||||||
|
import org.matrix.rustcomponents.sdk.use
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
@ -63,22 +64,21 @@ class RustMatrixAuthenticationService @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun restoreSession(sessionId: SessionId) = withContext(coroutineDispatchers.io) {
|
override suspend fun restoreSession(sessionId: SessionId) = withContext(coroutineDispatchers.io) {
|
||||||
sessionStore.getSession(sessionId.value)
|
val sessionData = sessionStore.getSession(sessionId.value)
|
||||||
?.let { sessionData ->
|
if (sessionData != null) {
|
||||||
try {
|
try {
|
||||||
ClientBuilder()
|
val client = ClientBuilder()
|
||||||
.basePath(baseDirectory.absolutePath)
|
.basePath(baseDirectory.absolutePath)
|
||||||
.username(sessionData.userId)
|
.homeserverUrl(sessionData.homeserverUrl)
|
||||||
.build().apply {
|
.username(sessionData.userId)
|
||||||
restoreSession(sessionData.toSession())
|
.use { it.build() }
|
||||||
}
|
client.restoreSession(sessionData.toSession())
|
||||||
} catch (throwable: Throwable) {
|
createMatrixClient(client)
|
||||||
logError(throwable)
|
} catch (throwable: Throwable) {
|
||||||
null
|
logError(throwable)
|
||||||
}
|
null
|
||||||
}?.let {
|
|
||||||
createMatrixClient(it)
|
|
||||||
}
|
}
|
||||||
|
} else null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getHomeserverDetails(): StateFlow<MatrixHomeServerDetails?> = currentHomeserver
|
override fun getHomeserverDetails(): StateFlow<MatrixHomeServerDetails?> = currentHomeserver
|
||||||
|
|
@ -101,9 +101,9 @@ class RustMatrixAuthenticationService @Inject constructor(
|
||||||
Timber.e(failure, "Fail login")
|
Timber.e(failure, "Fail login")
|
||||||
throw failure
|
throw failure
|
||||||
}
|
}
|
||||||
val session = client.session()
|
val sessionData = client.use { it.session().toSessionData() }
|
||||||
sessionStore.storeData(session.toSessionData())
|
sessionStore.storeData(sessionData)
|
||||||
SessionId(session.userId)
|
SessionId(sessionData.userId)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createMatrixClient(client: Client): MatrixClient {
|
private fun createMatrixClient(client: Client): MatrixClient {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue