Updated on 2026-08-14
This commit is contained in:
parent
28d15c9043
commit
a4eb7fce06
6 changed files with 41 additions and 38 deletions
|
|
@ -5,10 +5,12 @@ import androidx.datastore.core.DataStoreFactory
|
|||
import androidx.datastore.dataStoreFile
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldBalanceWrapperDTO
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO
|
||||
import com.tangem.datasource.local.datastore.RuntimeDataStore
|
||||
import com.tangem.datasource.local.datastore.RuntimeSharedStore
|
||||
import com.tangem.datasource.local.token.*
|
||||
import com.tangem.datasource.utils.MoshiDataStoreSerializer
|
||||
import com.tangem.datasource.utils.listTypes
|
||||
import com.tangem.datasource.utils.mapWithStringKeyTypes
|
||||
import com.tangem.datasource.utils.setTypes
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
|
|
@ -27,8 +29,22 @@ internal object StakingStoreModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideStakingTokensStore(): StakingYieldsStore {
|
||||
return DefaultStakingYieldsStore(dataStore = RuntimeDataStore())
|
||||
fun provideStakingTokensStore(
|
||||
@NetworkMoshi moshi: Moshi,
|
||||
@ApplicationContext context: Context,
|
||||
dispatchers: CoroutineDispatcherProvider,
|
||||
): StakingYieldsStore {
|
||||
return DefaultStakingYieldsStore(
|
||||
dataStore = DataStoreFactory.create(
|
||||
serializer = MoshiDataStoreSerializer(
|
||||
moshi = moshi,
|
||||
types = listTypes<YieldDTO>(),
|
||||
defaultValue = emptyList(),
|
||||
),
|
||||
produceFile = { context.dataStoreFile(fileName = "yields_cache") },
|
||||
scope = CoroutineScope(context = dispatchers.io + SupervisorJob()),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
|
|||
|
|
@ -1,32 +1,25 @@
|
|||
package com.tangem.datasource.local.token
|
||||
|
||||
import androidx.datastore.core.DataStore
|
||||
import com.tangem.datasource.api.stakekit.models.response.model.YieldDTO
|
||||
import com.tangem.datasource.local.datastore.core.StringKeyDataStore
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
|
||||
internal class DefaultStakingYieldsStore(
|
||||
private val dataStore: StringKeyDataStore<List<YieldDTO>>,
|
||||
private val dataStore: DataStore<List<YieldDTO>>,
|
||||
) : StakingYieldsStore {
|
||||
|
||||
private val mutex = Mutex()
|
||||
|
||||
override fun get(): Flow<List<YieldDTO>> {
|
||||
return dataStore.get(KEY)
|
||||
return dataStore.data
|
||||
}
|
||||
|
||||
override suspend fun getSync(): List<YieldDTO> {
|
||||
return dataStore.getSyncOrNull(KEY) ?: emptyList()
|
||||
return dataStore.data.firstOrNull().orEmpty()
|
||||
}
|
||||
|
||||
override suspend fun store(items: List<YieldDTO>) {
|
||||
mutex.withLock {
|
||||
dataStore.store(KEY, items)
|
||||
dataStore.updateData { _ ->
|
||||
items
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val KEY = "DefaultStakingYieldsStore"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue