diff --git a/data/networks/src/main/java/com/tangem/data/networks/single/DefaultSingleNetworkStatusFetcher.kt b/data/networks/src/main/java/com/tangem/data/networks/single/DefaultSingleNetworkStatusFetcher.kt index 9d071fe5f3..4d2247b73e 100644 --- a/data/networks/src/main/java/com/tangem/data/networks/single/DefaultSingleNetworkStatusFetcher.kt +++ b/data/networks/src/main/java/com/tangem/data/networks/single/DefaultSingleNetworkStatusFetcher.kt @@ -83,11 +83,20 @@ internal class DefaultSingleNetworkStatusFetcher @Inject constructor( val statusValue = status.value if (statusValue is NetworkStatus.Unreachable) { - networksStatusesStore.storeError( + val prevStatus = networksStatusesStore.getSyncOrNull( userWalletId = params.userWalletId, network = params.network, - value = statusValue, ) + + if (prevStatus?.value is NetworkStatus.MissedDerivation) { + networksStatusesStore.storeUnreachableStatus(userWalletId = params.userWalletId, value = status) + } else { + networksStatusesStore.storeError( + userWalletId = params.userWalletId, + network = params.network, + value = statusValue, + ) + } } else { networksStatusesStore.storeSuccess(userWalletId = params.userWalletId, value = status) } diff --git a/data/networks/src/main/java/com/tangem/data/networks/store/DefaultNetworksStatusesStoreV2.kt b/data/networks/src/main/java/com/tangem/data/networks/store/DefaultNetworksStatusesStoreV2.kt index 5e28c87b64..943e6d1400 100644 --- a/data/networks/src/main/java/com/tangem/data/networks/store/DefaultNetworksStatusesStoreV2.kt +++ b/data/networks/src/main/java/com/tangem/data/networks/store/DefaultNetworksStatusesStoreV2.kt @@ -55,6 +55,12 @@ internal class DefaultNetworksStatusesStoreV2( return runtimeStore.get().mapNotNull { it[userWalletId.stringValue] } } + override suspend fun getSyncOrNull(userWalletId: UserWalletId, network: Network): SimpleNetworkStatus? { + val simpleStatusId = SimpleNetworkStatus.Id(network = network) + + return runtimeStore.getSyncOrNull()?.get(userWalletId.stringValue)?.firstOrNull { it.id == simpleStatusId } + } + override suspend fun refresh(userWalletId: UserWalletId, network: Network) { refresh(userWalletId = userWalletId, networks = setOf(network)) } @@ -116,6 +122,17 @@ internal class DefaultNetworksStatusesStoreV2( ) } + override suspend fun storeUnreachableStatus(userWalletId: UserWalletId, value: NetworkStatus) { + if (value.value !is NetworkStatus.Unreachable) { + val message = "Use storeError method to save unreachable status" + Timber.d(message) + + error(message) + } + + storeInRuntime(userWalletId = userWalletId, status = value) + } + private suspend fun updateInRuntime( userWalletId: UserWalletId, networks: Set, diff --git a/data/networks/src/main/java/com/tangem/data/networks/store/NetworksStatusesStoreV2.kt b/data/networks/src/main/java/com/tangem/data/networks/store/NetworksStatusesStoreV2.kt index b0a421623c..fb40156849 100644 --- a/data/networks/src/main/java/com/tangem/data/networks/store/NetworksStatusesStoreV2.kt +++ b/data/networks/src/main/java/com/tangem/data/networks/store/NetworksStatusesStoreV2.kt @@ -12,6 +12,9 @@ internal interface NetworksStatusesStoreV2 { /** Get statuses by [userWalletId] */ fun get(userWalletId: UserWalletId): Flow> + /** Get status of [network] by [userWalletId] synchronously or null */ + suspend fun getSyncOrNull(userWalletId: UserWalletId, network: Network): SimpleNetworkStatus? + /** Refresh status of [network] by [userWalletId] */ suspend fun refresh(userWalletId: UserWalletId, network: Network) @@ -28,6 +31,9 @@ internal interface NetworksStatusesStoreV2 { */ suspend fun storeError(userWalletId: UserWalletId, network: Network, value: NetworkStatus.Unreachable? = null) + /** Store unreachable [value] by [userWalletId] */ + suspend fun storeUnreachableStatus(userWalletId: UserWalletId, value: NetworkStatus) + /** Store error for [networks] by [userWalletId] */ suspend fun storeError(userWalletId: UserWalletId, networks: Set) } \ No newline at end of file