From b03b4cbeecf2f800fd7285243f014b7fc5a5c804 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 5 Dec 2020 17:25:43 +0600 Subject: [PATCH 1/5] start 0.4.10 --- CHANGELOG.md | 2 ++ gradle.properties | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf9d5eecd11..ec37bf4463d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## 0.4.10 + ## 0.4.9 * `Versions`: diff --git a/gradle.properties b/gradle.properties index 769b1dfb7eb..b48b2addc4a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -40,5 +40,5 @@ dokka_version=1.4.10.2 # Project data group=dev.inmo -version=0.4.9 -android_code_version=13 +version=0.4.10 +android_code_version=14 From 3ae9b3e576b21786a443b12907b9859c79a19963 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 5 Dec 2020 17:29:49 +0600 Subject: [PATCH 2/5] update klock dependency --- CHANGELOG.md | 3 +++ gradle.properties | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec37bf4463d..35e892b5919 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## 0.4.10 +* `Versions`: + * `Klock`: `2.0.0` -> `2.0.1` + ## 0.4.9 * `Versions`: diff --git a/gradle.properties b/gradle.properties index b48b2addc4a..e1a024bbabc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ kotlin_exposed_version=0.28.1 ktor_version=1.4.3 -klockVersion=2.0.0 +klockVersion=2.0.1 github_release_plugin_version=2.2.12 @@ -35,7 +35,7 @@ espresso_core=3.3.0 # Dokka -dokka_version=1.4.10.2 +dokka_version=1.4.20 # Project data From 091cb3833918111cb35138924025282c6d0ef9bc Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 5 Dec 2020 17:52:37 +0600 Subject: [PATCH 3/5] WriteStandardKeyValueRepo#unsetWithValues --- CHANGELOG.md | 2 ++ .../micro_utils/repos/StandartKeyValueRepo.kt | 14 +++++++++++--- .../repos/mappers/KeyValueMappers.kt | 4 ++++ .../repos/keyvalue/KeyValueStore.kt | 18 +++++++++++++++--- .../exposed/keyvalue/ExposedKeyValueRepo.kt | 12 ++++++++++++ .../inmo/micro_utils/repos/MapKeyValueRepo.kt | 9 +++++++++ .../key_value/KtorWriteStandardKeyValueRepo.kt | 10 ++++++++++ .../ktor/common/key_value/KeyValueRoutes.kt | 3 ++- .../key_value/KtorStandartWriteKeyValueRepo.kt | 9 +++++++++ 9 files changed, 74 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35e892b5919..40daf6a7323 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ * `Versions`: * `Klock`: `2.0.0` -> `2.0.1` +* `Repo` + * Repo `WriteStandardKeyValueRepo` got new method `unsetWithValues` ## 0.4.9 diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt index a9ae6adfd1c..e5df9592765 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt @@ -1,7 +1,6 @@ package dev.inmo.micro_utils.repos -import dev.inmo.micro_utils.pagination.Pagination -import dev.inmo.micro_utils.pagination.PaginationResult +import dev.inmo.micro_utils.pagination.* import kotlinx.coroutines.flow.Flow interface ReadStandardKeyValueRepo : Repo { @@ -20,6 +19,7 @@ interface WriteStandardKeyValueRepo : Repo { suspend fun set(toSet: Map) suspend fun unset(toUnset: List) + suspend fun unsetWithValues(toUnset: List) } typealias WriteKeyValueRepo = WriteStandardKeyValueRepo @@ -35,5 +35,13 @@ suspend inline fun WriteStandardKeyValueRepo.unset( vararg k: Key ) = unset(k.toList()) -interface StandardKeyValueRepo : ReadStandardKeyValueRepo, WriteStandardKeyValueRepo +interface StandardKeyValueRepo : ReadStandardKeyValueRepo, WriteStandardKeyValueRepo { + override suspend fun unsetWithValues(toUnset: List) = toUnset.forEach { v -> + doWithPagination { + keys(v, it).also { + unset(it.results) + } + } + } +} typealias KeyValueRepo = StandardKeyValueRepo diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/mappers/KeyValueMappers.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/mappers/KeyValueMappers.kt index b11e3799762..ed67d4c9e4e 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/mappers/KeyValueMappers.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/mappers/KeyValueMappers.kt @@ -105,6 +105,10 @@ open class MapperWriteStandardKeyValueRepo( k.toOutKey() } ) + + override suspend fun unsetWithValues(toUnset: List) = to.unsetWithValues( + toUnset.map { it.toOutValue() } + ) } @Suppress("NOTHING_TO_INLINE") diff --git a/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/keyvalue/KeyValueStore.kt b/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/keyvalue/KeyValueStore.kt index 03202399b0a..dd8d2c77241 100644 --- a/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/keyvalue/KeyValueStore.kt +++ b/repos/common/src/main/kotlin/dev/inmo/micro_utils/repos/keyvalue/KeyValueStore.kt @@ -35,10 +35,10 @@ class KeyValueStore internal constructor ( } private val onNewValueChannel = MutableSharedFlow>() - private val onValueRemovedChannel = MutableSharedFlow() + private val _onValueRemovedFlow = MutableSharedFlow() override val onNewValue: Flow> = onNewValueChannel.asSharedFlow() - override val onValueRemoved: Flow = onValueRemovedChannel.asSharedFlow() + override val onValueRemoved: Flow = _onValueRemovedFlow.asSharedFlow() init { cachedData ?.let { @@ -136,6 +136,18 @@ class KeyValueStore internal constructor ( sharedPreferences.edit { toUnset.forEach { remove(it) } } - toUnset.forEach { onValueRemovedChannel.emit(it) } + toUnset.forEach { _onValueRemovedFlow.emit(it) } + } + + override suspend fun unsetWithValues(toUnset: List) { + val keysToRemove = sharedPreferences.all.mapNotNull { if (it.value in toUnset) it.key else null } + sharedPreferences.edit { + keysToRemove.map { + remove(it) + } + } + keysToRemove.forEach { + _onValueRemovedFlow.emit(it) + } } } diff --git a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/keyvalue/ExposedKeyValueRepo.kt b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/keyvalue/ExposedKeyValueRepo.kt index 5dc80a3aa13..74a2bef1c9d 100644 --- a/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/keyvalue/ExposedKeyValueRepo.kt +++ b/repos/exposed/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/exposed/keyvalue/ExposedKeyValueRepo.kt @@ -60,4 +60,16 @@ open class ExposedKeyValueRepo( _onValueRemoved.emit(it) } } + + override suspend fun unsetWithValues(toUnset: List) { + transaction(database) { + toUnset.flatMap { + val keys = select { valueColumn.eq(it) }.mapNotNull { it[keyColumn] } + deleteWhere { keyColumn.inList(keys) } + keys + } + }.distinct().forEach { + _onValueRemoved.emit(it) + } + } } diff --git a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt index 6269c29678a..79c58e1c83d 100644 --- a/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt +++ b/repos/inmemory/src/commonMain/kotlin/dev/inmo/micro_utils/repos/MapKeyValueRepo.kt @@ -76,6 +76,15 @@ class WriteMapKeyValueRepo( map.remove(k) ?.also { _ -> _onValueRemoved.emit(k) } } } + + override suspend fun unsetWithValues(toUnset: List) { + map.forEach { + if (it.value in toUnset) { + map.remove(it.key) + _onValueRemoved.emit(it.key) + } + } + } } class MapKeyValueRepo( diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorWriteStandardKeyValueRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorWriteStandardKeyValueRepo.kt index 4d720ee170a..a7c1e898efb 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorWriteStandardKeyValueRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorWriteStandardKeyValueRepo.kt @@ -17,6 +17,7 @@ class KtorWriteStandardKeyValueRepo ( ) : WriteStandardKeyValueRepo { private val keyValueMapSerializer = MapSerializer(keySerializer, valueSerializer) private val keysListSerializer = ListSerializer(keySerializer) + private val valuesListSerializer = ListSerializer(valueSerializer) constructor( baseUrl: String, @@ -55,4 +56,13 @@ class KtorWriteStandardKeyValueRepo ( BodyPair(keysListSerializer, toUnset), Unit.serializer() ) + + override suspend fun unsetWithValues(toUnset: List) = unifiedRequester.unipost( + buildStandardUrl( + baseUrl, + unsetWithValuesRoute, + ), + BodyPair(valuesListSerializer, toUnset), + Unit.serializer() + ) } diff --git a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueRoutes.kt b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueRoutes.kt index 77b32a459ad..860429cf28c 100644 --- a/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueRoutes.kt +++ b/repos/ktor/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/common/key_value/KeyValueRoutes.kt @@ -9,4 +9,5 @@ const val countRoute = "count" const val onNewValueRoute = "onNewValue" const val onValueRemovedRoute = "onValueRemoved" const val setRoute = "set" -const val unsetRoute = "unset" \ No newline at end of file +const val unsetRoute = "unset" +const val unsetWithValuesRoute = "unsetWithValues" \ No newline at end of file diff --git a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key_value/KtorStandartWriteKeyValueRepo.kt b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key_value/KtorStandartWriteKeyValueRepo.kt index ae288adc189..56b6e18f413 100644 --- a/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key_value/KtorStandartWriteKeyValueRepo.kt +++ b/repos/ktor/server/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/ktor/server/key_value/KtorStandartWriteKeyValueRepo.kt @@ -19,6 +19,7 @@ fun Route.configureWriteStandardKeyValueRepoRoutes ( ) { val keyValueMapSerializer = MapSerializer(keySerializer, valueSerializer) val keysListSerializer = ListSerializer(keySerializer) + val valuesListSerializer = ListSerializer(valueSerializer) unifiedRouter.apply { includeWebsocketHandling( onNewValueRoute, @@ -50,6 +51,14 @@ fun Route.configureWriteStandardKeyValueRepoRoutes ( unianswer(Unit.serializer(), originalRepo.unset(toUnset)) } } + + post(unsetWithValuesRoute) { + unifiedRouter.apply { + val toUnset = uniload(valuesListSerializer) + + unianswer(Unit.serializer(), originalRepo.unsetWithValues(toUnset)) + } + } } fun Route.configureWriteStandartKeyValueRepoRoutes ( From 5fc760f4a5a4c91951d665b3e2d5319f8c0b92b5 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 5 Dec 2020 18:00:27 +0600 Subject: [PATCH 4/5] fix build and add filestandardkeyvaluerepo unsetWithValues realization --- .../micro_utils/repos/FileStandardKeyValueRepo.kt | 12 ++++++++++++ .../client/key_value/KtorStandartKeyValueRepo.kt | 1 + 2 files changed, 13 insertions(+) diff --git a/repos/common/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/FileStandardKeyValueRepo.kt b/repos/common/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/FileStandardKeyValueRepo.kt index 99553103c5a..9afb05be768 100644 --- a/repos/common/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/FileStandardKeyValueRepo.kt +++ b/repos/common/src/jvmMain/kotlin/dev/inmo/micro_utils/repos/FileStandardKeyValueRepo.kt @@ -160,6 +160,18 @@ class FileWriteStandardKeyValueRepo( } } } + + override suspend fun unsetWithValues(toUnset: List) { + val keys = toUnset.mapNotNull { v -> + val key = v.absolutePath.removePrefix(folder.absolutePath) + if (key != v.absolutePath) { + key + } else { + null + } + } + unset(keys) + } } @Warning("Files watching will not correctly works on Android Platform with version of API lower than API 26") diff --git a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorStandartKeyValueRepo.kt b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorStandartKeyValueRepo.kt index c3faa058790..0dc7952970b 100644 --- a/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorStandartKeyValueRepo.kt +++ b/repos/ktor/client/src/commonMain/kotlin/dev/inmo/micro_utils/repos/ktor/client/key_value/KtorStandartKeyValueRepo.kt @@ -7,6 +7,7 @@ import dev.inmo.micro_utils.repos.* import io.ktor.client.HttpClient import kotlinx.serialization.* +@Suppress("DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE") class KtorStandartKeyValueRepo ( baseUrl: String, baseSubpart: String, From f81a2f309b2ae05d633e4966f17d1c4b91ce992e Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sat, 5 Dec 2020 18:12:17 +0600 Subject: [PATCH 5/5] add new unseWithValues extensions --- .../kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt index e5df9592765..449396889c9 100644 --- a/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt +++ b/repos/common/src/commonMain/kotlin/dev/inmo/micro_utils/repos/StandartKeyValueRepo.kt @@ -35,6 +35,10 @@ suspend inline fun WriteStandardKeyValueRepo.unset( vararg k: Key ) = unset(k.toList()) +suspend inline fun WriteStandardKeyValueRepo.unsetWithValues( + vararg v: Value +) = unsetWithValues(v.toList()) + interface StandardKeyValueRepo : ReadStandardKeyValueRepo, WriteStandardKeyValueRepo { override suspend fun unsetWithValues(toUnset: List) = toUnset.forEach { v -> doWithPagination {