From 2d5304a77050849c08ecc481664d26b63f2a9bdb Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 2 Dec 2020 16:38:07 +0600 Subject: [PATCH] BroadcastChannel -> MutableSharedFlow in repos --- CHANGELOG.md | 2 ++ .../crud/AbstractMutableAndroidCRUDRepo.kt | 24 +++++++++---------- .../repos/keyvalue/KeyValueStore.kt | 17 ++++++------- .../AndroidSQLStandardVersionsRepoProxy.kt | 14 +++++------ .../exposed/AbstractExposedWriteCRUDRepo.kt | 1 - 5 files changed, 27 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9628f3c83a2..4763091a4a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ * `Versions`: * `Ktor`: `1.4.2` -> `1.4.3` * `Repo` + * `Common` + * In repos different usages of `BroadcastChannel`s has been replaced with `MutableSharedFlow` * `Exposed` * `asObject` open fun has been added in CRUD realization diff --git a/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/crud/AbstractMutableAndroidCRUDRepo.kt b/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/crud/AbstractMutableAndroidCRUDRepo.kt index 83bab7ad2b9..3da89678146 100644 --- a/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/crud/AbstractMutableAndroidCRUDRepo.kt +++ b/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/crud/AbstractMutableAndroidCRUDRepo.kt @@ -3,20 +3,18 @@ package dev.inmo.micro_utils.repos.crud import android.content.ContentValues import dev.inmo.micro_utils.common.mapNotNullA import dev.inmo.micro_utils.repos.* -import kotlinx.coroutines.channels.BroadcastChannel -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.* abstract class AbstractMutableAndroidCRUDRepo( helper: StandardSQLHelper ) : WriteStandardCRUDRepo, AbstractAndroidCRUDRepo(helper) { - protected val newObjectsChannel = BroadcastChannel(64) - protected val updateObjectsChannel = BroadcastChannel(64) - protected val deleteObjectsIdsChannel = BroadcastChannel(64) - override val newObjectsFlow: Flow = newObjectsChannel.asFlow() - override val updatedObjectsFlow: Flow = updateObjectsChannel.asFlow() - override val deletedObjectsIdsFlow: Flow = deleteObjectsIdsChannel.asFlow() + protected val newObjectsChannel = MutableSharedFlow(64) + protected val updateObjectsChannel = MutableSharedFlow(64) + protected val deleteObjectsIdsChannel = MutableSharedFlow(64) + override val newObjectsFlow: Flow = newObjectsChannel.asSharedFlow() + override val updatedObjectsFlow: Flow = updateObjectsChannel.asSharedFlow() + override val deletedObjectsIdsFlow: Flow = deleteObjectsIdsChannel.asSharedFlow() protected abstract suspend fun InputValueType.asContentValues(id: IdType? = null): ContentValues @@ -42,7 +40,7 @@ abstract class AbstractMutableAndroidCRUDRepo>() @@ -37,11 +34,11 @@ class KeyValueStore internal constructor ( null } - private val onNewValueChannel = BroadcastChannel>(Channel.BUFFERED) - private val onValueRemovedChannel = BroadcastChannel(Channel.BUFFERED) + private val onNewValueChannel = MutableSharedFlow>() + private val onValueRemovedChannel = MutableSharedFlow() - override val onNewValue: Flow> = onNewValueChannel.asFlow() - override val onValueRemoved: Flow = onValueRemovedChannel.asFlow() + override val onNewValue: Flow> = onNewValueChannel.asSharedFlow() + override val onValueRemoved: Flow = onValueRemovedChannel.asSharedFlow() init { cachedData ?.let { @@ -131,7 +128,7 @@ class KeyValueStore internal constructor ( } } toSet.forEach { (k, v) -> - onNewValueChannel.send(k to v) + onNewValueChannel.emit(k to v) } } @@ -139,6 +136,6 @@ class KeyValueStore internal constructor ( sharedPreferences.edit { toUnset.forEach { remove(it) } } - toUnset.forEach { onValueRemovedChannel.send(it) } + toUnset.forEach { onValueRemovedChannel.emit(it) } } } diff --git a/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/versions/AndroidSQLStandardVersionsRepoProxy.kt b/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/versions/AndroidSQLStandardVersionsRepoProxy.kt index d52d9e9ddad..f565147e09b 100644 --- a/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/versions/AndroidSQLStandardVersionsRepoProxy.kt +++ b/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/versions/AndroidSQLStandardVersionsRepoProxy.kt @@ -32,11 +32,11 @@ class AndroidSQLStandardVersionsRepoProxy( } } - override suspend fun getTableVersion(table: String): Int? = database.writableTransaction { + override suspend fun getTableVersion(tableName: String): Int? = database.writableTransaction { select( - tableName, + this@AndroidSQLStandardVersionsRepoProxy.tableName, selection = "$tableNameColumnName=?", - selectionArgs = arrayOf(table), + selectionArgs = arrayOf(tableName), limit = limitClause(1) ).use { if (it.moveToFirst()) { @@ -47,16 +47,16 @@ class AndroidSQLStandardVersionsRepoProxy( } } - override suspend fun updateTableVersion(table: String, version: Int) { + override suspend fun updateTableVersion(tableName: String, version: Int) { database.writableTransaction { val updated = update( - tableName, + this@AndroidSQLStandardVersionsRepoProxy.tableName, contentValuesOf(tableVersionColumnName to version), "$tableNameColumnName=?", - arrayOf(table) + arrayOf(tableName) ) > 0 if (!updated) { - insert(tableName, null, contentValuesOf(tableNameColumnName to table, tableVersionColumnName to version)) + insert(this@AndroidSQLStandardVersionsRepoProxy.tableName, null, contentValuesOf(tableNameColumnName to tableName, tableVersionColumnName to version)) } } } diff --git a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/AbstractExposedWriteCRUDRepo.kt b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/AbstractExposedWriteCRUDRepo.kt index bd4c1265c1e..ffbd69f2e5a 100644 --- a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/AbstractExposedWriteCRUDRepo.kt +++ b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/AbstractExposedWriteCRUDRepo.kt @@ -2,7 +2,6 @@ package dev.inmo.micro_utils.repos.exposed import dev.inmo.micro_utils.repos.UpdatedValuePair import dev.inmo.micro_utils.repos.WriteStandardCRUDRepo -import kotlinx.coroutines.channels.BroadcastChannel import kotlinx.coroutines.flow.* import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.statements.InsertStatement