Updated on 2026-08-14

This commit is contained in:
Tangem 2024-03-12 16:18:53 +00:00
parent 567cc9541d
commit 1da2ca6d1f
4 changed files with 87 additions and 44 deletions

View file

@ -8,6 +8,8 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import timber.log.Timber
@Deprecated("Use shared preferences data store instead")
@ -16,6 +18,7 @@ internal class FileDataStore<Value : Any>(
private val adapter: JsonAdapter<Value>,
) : StringKeyDataStore<Value> {
private val mutex = Mutex()
private val writeTrigger = Trigger()
override suspend fun isEmpty(): Boolean {
val e = NotImplementedError("`isEmpty()` function not implemented for `FileDataStore`")
@ -28,7 +31,11 @@ internal class FileDataStore<Value : Any>(
override fun get(key: String): Flow<Value> {
return writeTrigger
.map { getInternal(key) }
.map {
mutex.withLock {
getInternal(key)
}
}
.filterNotNull()
.distinctUntilChanged()
}
@ -53,10 +60,12 @@ internal class FileDataStore<Value : Any>(
override suspend fun store(key: String, value: Value) {
try {
val json = adapter.toJson(value)
mutex.withLock {
val json = adapter.toJson(value)
fileReader.rewriteFile(json, key)
writeTrigger.trigger()
fileReader.rewriteFile(json, key)
writeTrigger.trigger()
}
} catch (e: Throwable) {
Timber.e(e, "Unable to write file: $key")
}