mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-20 14:00:03 +03:00
Fix crash when starting app with no available network.
This commit is contained in:
parent
3727b653ba
commit
613dc3d7fa
6 changed files with 19 additions and 14 deletions
matrix-sdk-android/src/rustCrypto/java/org/matrix/android/sdk/internal/crypto
vector/src/main/java/im/vector/app/features
|
@ -196,9 +196,7 @@ internal class RustCryptoService @Inject constructor(
|
|||
override suspend fun fetchDevicesList(): List<DeviceInfo> {
|
||||
val devicesList: List<DeviceInfo>
|
||||
withContext(coroutineDispatchers.io) {
|
||||
devicesList = tryOrNull {
|
||||
getDevicesTask.execute(Unit).devices
|
||||
}.orEmpty()
|
||||
devicesList = getDevicesTask.execute(Unit).devices.orEmpty()
|
||||
cryptoStore.saveMyDevicesInfo(devicesList)
|
||||
}
|
||||
return devicesList
|
||||
|
@ -247,7 +245,7 @@ internal class RustCryptoService @Inject constructor(
|
|||
cryptoCoroutineScope.launch(coroutineDispatchers.io) {
|
||||
cryptoStore.open()
|
||||
// Just update
|
||||
fetchDevicesList()
|
||||
tryOrNull { fetchDevicesList() }
|
||||
cryptoStore.tidyUpDataBase()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ import kotlinx.coroutines.flow.onEach
|
|||
import kotlinx.coroutines.flow.sample
|
||||
import kotlinx.coroutines.launch
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||
import org.matrix.android.sdk.api.session.Session
|
||||
import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
|
||||
import org.matrix.android.sdk.api.session.getUserOrDefault
|
||||
|
@ -146,13 +147,13 @@ class UnknownDeviceDetectorSharedViewModel @AssistedInject constructor(
|
|||
.sample(5_000)
|
||||
.onEach {
|
||||
// If we have a new crypto device change, we might want to trigger refresh of device info
|
||||
session.cryptoService().fetchDevicesList()
|
||||
tryOrNull { session.cryptoService().fetchDevicesList() }
|
||||
}
|
||||
.launchIn(viewModelScope)
|
||||
|
||||
// trigger a refresh of lastSeen / last Ip
|
||||
viewModelScope.launch {
|
||||
session.cryptoService().fetchDevicesList()
|
||||
tryOrNull { session.cryptoService().fetchDevicesList() }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -76,6 +76,7 @@ import kotlinx.coroutines.launch
|
|||
import kotlinx.coroutines.withContext
|
||||
import me.gujun.android.span.span
|
||||
import org.matrix.android.sdk.api.extensions.getFingerprintHumanReadable
|
||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||
import org.matrix.android.sdk.api.raw.RawService
|
||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.isVerified
|
||||
import org.matrix.android.sdk.api.session.crypto.model.DeviceInfo
|
||||
|
@ -646,9 +647,11 @@ class VectorSettingsSecurityPrivacyFragment :
|
|||
}
|
||||
}
|
||||
// TODO Move to a ViewModel...
|
||||
val devicesList = session.cryptoService().fetchDevicesList()
|
||||
val devicesList = tryOrNull { session.cryptoService().fetchDevicesList() }
|
||||
devicesList?.let {
|
||||
withContext(Dispatchers.Main) {
|
||||
refreshCryptographyPreference(devicesList)
|
||||
refreshCryptographyPreference(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ import org.matrix.android.sdk.api.auth.data.LoginFlowTypes
|
|||
import org.matrix.android.sdk.api.auth.registration.RegistrationFlowResponse
|
||||
import org.matrix.android.sdk.api.auth.registration.nextUncompletedStage
|
||||
import org.matrix.android.sdk.api.extensions.orFalse
|
||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||
import org.matrix.android.sdk.api.failure.Failure
|
||||
import org.matrix.android.sdk.api.session.Session
|
||||
import org.matrix.android.sdk.api.session.crypto.model.CryptoDeviceInfo
|
||||
|
@ -190,7 +191,7 @@ class DevicesViewModel @AssistedInject constructor(
|
|||
.sample(5_000)
|
||||
.onEach {
|
||||
// If we have a new crypto device change, we might want to trigger refresh of device info
|
||||
session.cryptoService().fetchDevicesList()
|
||||
tryOrNull { session.cryptoService().fetchDevicesList() }
|
||||
}
|
||||
.launchIn(viewModelScope)
|
||||
|
||||
|
@ -203,7 +204,7 @@ class DevicesViewModel @AssistedInject constructor(
|
|||
|
||||
refreshSource.stream().throttleFirst(4_000)
|
||||
.onEach {
|
||||
session.cryptoService().fetchDevicesList()
|
||||
tryOrNull { session.cryptoService().fetchDevicesList() }
|
||||
session.cryptoService().downloadKeysIfNeeded(listOf(session.myUserId), true)
|
||||
}
|
||||
.launchIn(viewModelScope)
|
||||
|
|
|
@ -22,6 +22,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged
|
|||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.flow.sample
|
||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||
import org.matrix.android.sdk.flow.flow
|
||||
import javax.inject.Inject
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
|
@ -40,7 +41,7 @@ class RefreshDevicesOnCryptoDevicesChangeUseCase @Inject constructor(
|
|||
.sample(samplingPeriodMs)
|
||||
.onEach {
|
||||
// If we have a new crypto device change, we might want to trigger refresh of device info
|
||||
session.cryptoService().fetchDevicesList()
|
||||
tryOrNull { session.cryptoService().fetchDevicesList() }
|
||||
}
|
||||
.collect()
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package im.vector.app.features.settings.devices.v2
|
||||
|
||||
import im.vector.app.core.di.ActiveSessionHolder
|
||||
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||
import javax.inject.Inject
|
||||
|
||||
class RefreshDevicesUseCase @Inject constructor(
|
||||
|
@ -24,7 +25,7 @@ class RefreshDevicesUseCase @Inject constructor(
|
|||
) {
|
||||
suspend fun execute() {
|
||||
activeSessionHolder.getSafeActiveSession()?.let { session ->
|
||||
session.cryptoService().fetchDevicesList()
|
||||
tryOrNull { session.cryptoService().fetchDevicesList() }
|
||||
session.cryptoService().downloadKeysIfNeeded(listOf(session.myUserId), true)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue