Compare commits

..

4 Commits

Author SHA1 Message Date
18ec2bca96 Update libs.versions.toml 2022-08-03 10:09:38 +06:00
937ef48794 Update libs.versions.toml 2022-08-01 21:47:05 +06:00
f04f262cee Update libs.versions.toml 2022-07-18 13:16:56 +06:00
0f172055ef Update gradle.properties 2022-07-18 13:11:02 +06:00
9 changed files with 76 additions and 92 deletions

View File

@@ -1,16 +1,5 @@
# Changelog # Changelog
## 0.11.14
* `Pagination`:
* `PaginationResult` got new field `objectsNumber` which by default is a times between `pagesNumber` and `size`
## 0.11.13
* `Versions`:
* `Coroutines`: `1.6.3` -> `1.6.4`
* `Compose`: `1.2.0-alpha01-dev629` -> `1.2.0-alpha01-dev731`
## 0.11.12 ## 0.11.12
* `Repos`: * `Repos`:

View File

@@ -14,5 +14,5 @@ crypto_js_version=4.1.1
# Project data # Project data
group=dev.inmo group=dev.inmo
version=0.11.14 version=0.12.0
android_code_version=138 android_code_version=137

View File

@@ -1,15 +1,15 @@
[versions] [versions]
kt = "1.6.21" kt = "1.7.10"
kt-serialization = "1.3.3" kt-serialization = "1.3.3"
kt-coroutines = "1.6.4" kt-coroutines = "1.6.4"
jb-compose = "1.2.0-alpha01-dev731" jb-compose = "1.2.0-alpha01-dev753"
jb-exposed = "0.38.2" jb-exposed = "0.39.1"
jb-dokka = "1.6.21" jb-dokka = "1.7.10"
klock = "2.7.0" klock = "3.0.0"
uuid = "0.4.1" uuid = "0.5.0"
ktor = "2.0.3" ktor = "2.0.3"

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@@ -1,60 +1,23 @@
package dev.inmo.micro_utils.pagination package dev.inmo.micro_utils.pagination
import kotlinx.serialization.* import kotlinx.serialization.Serializable
import kotlin.math.ceil
/**
* @param page Current page number
* @param size Current page size. It can be greater than size of [results]
* @param results Result objects
* @param objectsNumber Count of all objects across all pages
*/
@Serializable @Serializable
data class PaginationResult<T>( data class PaginationResult<T>(
override val page: Int, override val page: Int,
override val size: Int, val pagesNumber: Int,
val results: List<T>, val results: List<T>,
val objectsNumber: Long override val size: Int
) : Pagination { ) : Pagination
/**
* Amount of pages for current pagination
*/
@EncodeDefault
val pagesNumber: Int = ceil(objectsNumber / size.toFloat()).toInt()
constructor( fun <T> emptyPaginationResult() = PaginationResult<T>(0, 0, emptyList(), 0)
page: Int,
results: List<T>,
pagesNumber: Int,
size: Int
) : this(
page,
size,
results,
(pagesNumber * size).toLong()
)
@Deprecated("Replace with The other order of incoming parameters or objectsCount parameter")
constructor(
page: Int,
pagesNumber: Int,
results: List<T>,
size: Int
) : this(
page,
results,
pagesNumber,
size
)
}
fun <T> emptyPaginationResult() = PaginationResult<T>(0, 0, emptyList(), 0L)
/** /**
* @return New [PaginationResult] with [data] without checking of data sizes equality * @return New [PaginationResult] with [data] without checking of data sizes equality
*/ */
fun <I, O> PaginationResult<I>.changeResultsUnchecked( fun <I, O> PaginationResult<I>.changeResultsUnchecked(
data: List<O> data: List<O>
): PaginationResult<O> = PaginationResult(page, size, data, objectsNumber) ): PaginationResult<O> = PaginationResult(page, pagesNumber, data, size)
/** /**
* @return New [PaginationResult] with [data] <b>with</b> checking of data sizes equality * @return New [PaginationResult] with [data] <b>with</b> checking of data sizes equality
*/ */
@@ -70,9 +33,12 @@ fun <T> List<T>.createPaginationResult(
commonObjectsNumber: Long commonObjectsNumber: Long
) = PaginationResult( ) = PaginationResult(
pagination.page, pagination.page,
pagination.size, calculatePagesNumber(
commonObjectsNumber,
pagination.size
),
this, this,
commonObjectsNumber pagination.size
) )
fun <T> List<T>.createPaginationResult( fun <T> List<T>.createPaginationResult(
@@ -80,9 +46,12 @@ fun <T> List<T>.createPaginationResult(
commonObjectsNumber: Long commonObjectsNumber: Long
) = PaginationResult( ) = PaginationResult(
calculatePage(firstIndex, size), calculatePage(firstIndex, size),
size, calculatePagesNumber(
commonObjectsNumber,
size
),
this, this,
commonObjectsNumber size
) )
fun <T> Pair<Long, List<T>>.createPaginationResult( fun <T> Pair<Long, List<T>>.createPaginationResult(

View File

@@ -26,10 +26,6 @@ inline fun Pagination.nextPage() =
size size
) )
/**
* @param page Current page number
* @param size Current page size
*/
@Serializable @Serializable
data class SimplePagination( data class SimplePagination(
override val page: Int, override val page: Int,

View File

@@ -1,6 +1,7 @@
package dev.inmo.micro_utils.repos.mappers package dev.inmo.micro_utils.repos.mappers
import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.Pagination
import dev.inmo.micro_utils.pagination.PaginationResult
import dev.inmo.micro_utils.repos.* import dev.inmo.micro_utils.repos.*
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
@@ -22,8 +23,11 @@ open class MapperReadKeyValueRepo<FromKey, FromValue, ToKey, ToValue>(
pagination, pagination,
reversed reversed
).let { ).let {
it.changeResultsUnchecked( PaginationResult(
it.results.map { it.toInnerValue() } it.page,
it.pagesNumber,
it.results.map { it.toInnerValue() },
it.size
) )
} }
@@ -34,8 +38,11 @@ open class MapperReadKeyValueRepo<FromKey, FromValue, ToKey, ToValue>(
pagination, pagination,
reversed reversed
).let { ).let {
it.changeResultsUnchecked( PaginationResult(
it.results.map { it.toInnerKey() } it.page,
it.pagesNumber,
it.results.map { it.toInnerKey() },
it.size
) )
} }
@@ -48,8 +55,11 @@ open class MapperReadKeyValueRepo<FromKey, FromValue, ToKey, ToValue>(
pagination, pagination,
reversed reversed
).let { ).let {
it.changeResultsUnchecked( PaginationResult(
it.results.map { it.toInnerKey() } it.page,
it.pagesNumber,
it.results.map { it.toInnerKey() },
it.size
) )
} }

View File

@@ -1,6 +1,7 @@
package dev.inmo.micro_utils.repos.mappers package dev.inmo.micro_utils.repos.mappers
import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.Pagination
import dev.inmo.micro_utils.pagination.PaginationResult
import dev.inmo.micro_utils.repos.* import dev.inmo.micro_utils.repos.*
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
@@ -20,8 +21,11 @@ open class MapperReadKeyValuesRepo<FromKey, FromValue, ToKey, ToValue>(
pagination, pagination,
reversed reversed
).let { ).let {
it.changeResultsUnchecked( PaginationResult(
it.results.map { it.toInnerValue() } it.page,
it.pagesNumber,
it.results.map { it.toInnerValue() },
it.size
) )
} }
@@ -32,8 +36,11 @@ open class MapperReadKeyValuesRepo<FromKey, FromValue, ToKey, ToValue>(
pagination, pagination,
reversed reversed
).let { ).let {
it.changeResultsUnchecked( PaginationResult(
it.results.map { it.toInnerKey() } it.page,
it.pagesNumber,
it.results.map { it.toInnerKey() },
it.size
) )
} }
@@ -46,8 +53,11 @@ open class MapperReadKeyValuesRepo<FromKey, FromValue, ToKey, ToValue>(
pagination, pagination,
reversed reversed
).let { ).let {
it.changeResultsUnchecked( PaginationResult(
it.results.map { it.toInnerKey() } it.page,
it.pagesNumber,
it.results.map { it.toInnerKey() },
it.size
) )
} }

View File

@@ -3,7 +3,8 @@ package dev.inmo.micro_utils.repos.keyvalue
import android.content.Context import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import androidx.core.content.edit import androidx.core.content.edit
import dev.inmo.micro_utils.pagination.* import dev.inmo.micro_utils.pagination.Pagination
import dev.inmo.micro_utils.pagination.PaginationResult
import dev.inmo.micro_utils.pagination.utils.paginate import dev.inmo.micro_utils.pagination.utils.paginate
import dev.inmo.micro_utils.pagination.utils.reverse import dev.inmo.micro_utils.pagination.utils.reverse
import dev.inmo.micro_utils.repos.KeyValueRepo import dev.inmo.micro_utils.repos.KeyValueRepo
@@ -71,11 +72,14 @@ class KeyValueStore<T : Any> internal constructor (
return sharedPreferences.all.values.paginate( return sharedPreferences.all.values.paginate(
resultPagination resultPagination
).let { ).let {
it.changeResultsUnchecked( PaginationResult(
it.page,
it.pagesNumber,
it.results.map { it.results.map {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
it as T it as T
}.let { if (reversed) it.reversed() else it } }.let { if (reversed) it.reversed() else it },
it.size
) )
} }
} }
@@ -85,8 +89,11 @@ class KeyValueStore<T : Any> internal constructor (
return sharedPreferences.all.keys.paginate( return sharedPreferences.all.keys.paginate(
resultPagination resultPagination
).let { ).let {
it.changeResultsUnchecked( PaginationResult(
it.results.let { if (reversed) it.reversed() else it } it.page,
it.pagesNumber,
it.results.let { if (reversed) it.reversed() else it },
it.size
) )
} }
} }
@@ -96,8 +103,11 @@ class KeyValueStore<T : Any> internal constructor (
return sharedPreferences.all.mapNotNull { (k, value) -> if (value == v) k else null }.paginate( return sharedPreferences.all.mapNotNull { (k, value) -> if (value == v) k else null }.paginate(
resultPagination resultPagination
).let { ).let {
it.changeResultsUnchecked( PaginationResult(
it.results.let { if (reversed) it.reversed() else it } it.page,
it.pagesNumber,
it.results.let { if (reversed) it.reversed() else it },
it.size
) )
} }
} }