diff --git a/app/src/main/java/com/tangem/tap/data/RuntimeUserWalletsStore.kt b/app/src/main/java/com/tangem/tap/data/RuntimeUserWalletsStore.kt index 7542283107..9b2167ff12 100644 --- a/app/src/main/java/com/tangem/tap/data/RuntimeUserWalletsStore.kt +++ b/app/src/main/java/com/tangem/tap/data/RuntimeUserWalletsStore.kt @@ -12,10 +12,10 @@ internal class RuntimeUserWalletsStore( private val walletsStateHolder: WalletsStateHolder, ) : UserWalletsStore { - override suspend fun getSync(userWalletId: UserWalletId): UserWallet? { + override suspend fun getOrNull(userWalletId: UserWalletId): UserWallet? { return walletsStateHolder.userWalletsListManager ?.userWallets ?.firstOrNull() - ?.firstOrNull { it.walletId == userWalletId } + ?.singleOrNull { it.walletId == userWalletId } } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/cache/CacheKeysStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/cache/CacheKeysStore.kt index fc32a2b16e..1283fdd97d 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/cache/CacheKeysStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/cache/CacheKeysStore.kt @@ -4,7 +4,7 @@ import com.tangem.datasource.local.cache.model.CacheKey interface CacheKeysStore { - fun get(id: String): CacheKey? + fun getOrNull(id: String): CacheKey? fun addOrReplace(key: CacheKey) diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/cache/RuntimeCacheKeysStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/cache/RuntimeCacheKeysStore.kt index 80bce89b0d..61ec6ce85c 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/cache/RuntimeCacheKeysStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/cache/RuntimeCacheKeysStore.kt @@ -7,8 +7,8 @@ internal class RuntimeCacheKeysStore : CacheKeysStore { private val store = RuntimeDataStore(keyProvider = CacheKey::id) - override fun get(id: String): CacheKey? { - return store.getSync { it.id == id }.firstOrNull() + override fun getOrNull(id: String): CacheKey? { + return store.getSync { it.id == id }.singleOrNull() } override fun addOrReplace(key: CacheKey) { diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/datastore/FileDataStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/datastore/FileDataStore.kt index aa89c11b91..dc647aad1c 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/datastore/FileDataStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/datastore/FileDataStore.kt @@ -3,12 +3,11 @@ package com.tangem.datasource.local.datastore import com.squareup.moshi.JsonAdapter import com.tangem.datasource.files.FileReader import com.tangem.datasource.local.datastore.model.WriteTrigger -import com.tangem.domain.core.error.DataError import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.* -import java.io.FileNotFoundException +import timber.log.Timber -internal class FileDataStore( +internal class FileDataStore( private val fileNameProvider: (key: String) -> String, private val fileReader: FileReader, private val adapter: JsonAdapter, @@ -26,32 +25,31 @@ internal class FileDataStore( .filterNotNull() } - fun getSync(key: String): Data? { + fun getSyncOrNull(key: String): Data? { return getInternal(fileNameProvider(key)) } fun store(key: String, content: Data) { + val fileName = fileNameProvider(key) + try { val json = adapter.toJson(content) - fileReader.rewriteFile(json, fileNameProvider(key)) + fileReader.rewriteFile(json, fileName) writeTrigger.tryEmit(WriteTrigger) } catch (e: Throwable) { - throw DataError.PersistenceError.UnableToWriteFile(e) + Timber.e(e, "Unable to write file: $fileName") } } private fun getInternal(fileName: String): Data? { return try { - val json = try { - fileReader.readFile(fileName) - } catch (e: FileNotFoundException) { - return null - } + val json = fileReader.readFile(fileName) adapter.fromJson(json) } catch (e: Throwable) { - throw DataError.PersistenceError.UnableToReadFile(e) + Timber.e(e, "Unable to read file: $fileName") + null } } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/datastore/RuntimeDataStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/datastore/RuntimeDataStore.kt index ba55ef6039..fced00f858 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/datastore/RuntimeDataStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/datastore/RuntimeDataStore.kt @@ -5,7 +5,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.update -internal class RuntimeDataStore(private val keyProvider: (Data) -> Key) { +internal class RuntimeDataStore(private val keyProvider: (Data) -> Key) { private val store = MutableStateFlow>(hashMapOf()) diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/token/FileUserTokensStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/token/FileUserTokensStore.kt index 1df1f44428..5b12b188de 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/token/FileUserTokensStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/token/FileUserTokensStore.kt @@ -18,8 +18,8 @@ internal class FileUserTokensStore(fileReader: FileReader, moshi: Moshi) : UserT return store.get(userWalletId) } - override suspend fun getSync(userWalletId: String): UserTokensResponse? { - return store.getSync(userWalletId) + override suspend fun getSyncOrNull(userWalletId: String): UserTokensResponse? { + return store.getSyncOrNull(userWalletId) } override suspend fun store(userWalletId: String, tokens: UserTokensResponse) { diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/token/UserTokensStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/token/UserTokensStore.kt index befab5e661..43f2f1e64a 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/token/UserTokensStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/token/UserTokensStore.kt @@ -7,7 +7,7 @@ interface UserTokensStore { fun get(userWalletId: String): Flow - suspend fun getSync(userWalletId: String): UserTokensResponse? + suspend fun getSyncOrNull(userWalletId: String): UserTokensResponse? suspend fun store(userWalletId: String, tokens: UserTokensResponse) } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/userwallet/UserWalletsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/userwallet/UserWalletsStore.kt index 9b4e2693b7..4b47934b9a 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/userwallet/UserWalletsStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/userwallet/UserWalletsStore.kt @@ -5,5 +5,5 @@ import com.tangem.domain.wallets.models.UserWalletId interface UserWalletsStore { - suspend fun getSync(userWalletId: UserWalletId): UserWallet? + suspend fun getOrNull(userWalletId: UserWalletId): UserWallet? } \ No newline at end of file diff --git a/data/common/src/main/kotlin/com/tangem/data/common/cache/DefaultCacheRegistry.kt b/data/common/src/main/kotlin/com/tangem/data/common/cache/DefaultCacheRegistry.kt index 1aabdd2e77..47bfbc3675 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/cache/DefaultCacheRegistry.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/cache/DefaultCacheRegistry.kt @@ -10,7 +10,7 @@ internal class DefaultCacheRegistry( ) : CacheRegistry { override suspend fun isExpired(key: String): Boolean { - val cacheKey = cacheKeysStore.get(key) ?: return true + val cacheKey = cacheKeysStore.getOrNull(key) ?: return true return cacheKey.updatedAt .plus(cacheKey.expiresIn)