mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-12-05 00:10:09 +00:00
Compare commits
14 Commits
cd7b982385
...
5ce8ebe82c
Author | SHA1 | Date | |
---|---|---|---|
5ce8ebe82c | |||
a7a88b29b9 | |||
6331f13e9a | |||
5213a2ff8e | |||
087d7452fd | |||
703094c924 | |||
eea645c865 | |||
324832a189 | |||
d55d735c51 | |||
e3ff1b9609 | |||
70c31966ca | |||
0e4188882f | |||
6bf0ce92ba | |||
d51bdc5086 |
11
CHANGELOG.md
11
CHANGELOG.md
@ -18,6 +18,17 @@
|
|||||||
* `Ktor`:
|
* `Ktor`:
|
||||||
* All previously standard functions related to work with binary data by default have been deprecated
|
* All previously standard functions related to work with binary data by default have been deprecated
|
||||||
|
|
||||||
|
## 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`:
|
||||||
|
@ -15,4 +15,4 @@ crypto_js_version=4.1.1
|
|||||||
|
|
||||||
group=dev.inmo
|
group=dev.inmo
|
||||||
version=0.12.0
|
version=0.12.0
|
||||||
android_code_version=137
|
android_code_version=139
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -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.4.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
@ -1,23 +1,60 @@
|
|||||||
package dev.inmo.micro_utils.pagination
|
package dev.inmo.micro_utils.pagination
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.*
|
||||||
|
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,
|
||||||
val pagesNumber: Int,
|
override val size: Int,
|
||||||
val results: List<T>,
|
val results: List<T>,
|
||||||
override val size: Int
|
val objectsNumber: Long
|
||||||
) : Pagination
|
) : Pagination {
|
||||||
|
/**
|
||||||
|
* Amount of pages for current pagination
|
||||||
|
*/
|
||||||
|
@EncodeDefault
|
||||||
|
val pagesNumber: Int = ceil(objectsNumber / size.toFloat()).toInt()
|
||||||
|
|
||||||
fun <T> emptyPaginationResult() = PaginationResult<T>(0, 0, emptyList(), 0)
|
constructor(
|
||||||
|
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, pagesNumber, data, size)
|
): PaginationResult<O> = PaginationResult(page, size, data, objectsNumber)
|
||||||
/**
|
/**
|
||||||
* @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
|
||||||
*/
|
*/
|
||||||
@ -33,12 +70,9 @@ fun <T> List<T>.createPaginationResult(
|
|||||||
commonObjectsNumber: Long
|
commonObjectsNumber: Long
|
||||||
) = PaginationResult(
|
) = PaginationResult(
|
||||||
pagination.page,
|
pagination.page,
|
||||||
calculatePagesNumber(
|
pagination.size,
|
||||||
commonObjectsNumber,
|
|
||||||
pagination.size
|
|
||||||
),
|
|
||||||
this,
|
this,
|
||||||
pagination.size
|
commonObjectsNumber
|
||||||
)
|
)
|
||||||
|
|
||||||
fun <T> List<T>.createPaginationResult(
|
fun <T> List<T>.createPaginationResult(
|
||||||
@ -46,12 +80,9 @@ fun <T> List<T>.createPaginationResult(
|
|||||||
commonObjectsNumber: Long
|
commonObjectsNumber: Long
|
||||||
) = PaginationResult(
|
) = PaginationResult(
|
||||||
calculatePage(firstIndex, size),
|
calculatePage(firstIndex, size),
|
||||||
calculatePagesNumber(
|
size,
|
||||||
commonObjectsNumber,
|
|
||||||
size
|
|
||||||
),
|
|
||||||
this,
|
this,
|
||||||
size
|
commonObjectsNumber
|
||||||
)
|
)
|
||||||
|
|
||||||
fun <T> Pair<Long, List<T>>.createPaginationResult(
|
fun <T> Pair<Long, List<T>>.createPaginationResult(
|
||||||
|
@ -26,6 +26,10 @@ 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,
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package dev.inmo.micro_utils.repos.mappers
|
package dev.inmo.micro_utils.repos.mappers
|
||||||
|
|
||||||
import dev.inmo.micro_utils.pagination.Pagination
|
import dev.inmo.micro_utils.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
|
||||||
@ -21,11 +20,8 @@ open class MapperReadKeyValueRepo<FromKey, FromValue, ToKey, ToValue>(
|
|||||||
pagination,
|
pagination,
|
||||||
reversed
|
reversed
|
||||||
).let {
|
).let {
|
||||||
PaginationResult(
|
it.changeResultsUnchecked(
|
||||||
it.page,
|
it.results.map { it.toInnerValue() }
|
||||||
it.pagesNumber,
|
|
||||||
it.results.map { it.toInnerValue() },
|
|
||||||
it.size
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,11 +32,8 @@ open class MapperReadKeyValueRepo<FromKey, FromValue, ToKey, ToValue>(
|
|||||||
pagination,
|
pagination,
|
||||||
reversed
|
reversed
|
||||||
).let {
|
).let {
|
||||||
PaginationResult(
|
it.changeResultsUnchecked(
|
||||||
it.page,
|
it.results.map { it.toInnerKey() }
|
||||||
it.pagesNumber,
|
|
||||||
it.results.map { it.toInnerKey() },
|
|
||||||
it.size
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,11 +46,8 @@ open class MapperReadKeyValueRepo<FromKey, FromValue, ToKey, ToValue>(
|
|||||||
pagination,
|
pagination,
|
||||||
reversed
|
reversed
|
||||||
).let {
|
).let {
|
||||||
PaginationResult(
|
it.changeResultsUnchecked(
|
||||||
it.page,
|
it.results.map { it.toInnerKey() }
|
||||||
it.pagesNumber,
|
|
||||||
it.results.map { it.toInnerKey() },
|
|
||||||
it.size
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package dev.inmo.micro_utils.repos.mappers
|
package dev.inmo.micro_utils.repos.mappers
|
||||||
|
|
||||||
import dev.inmo.micro_utils.pagination.Pagination
|
import dev.inmo.micro_utils.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
|
||||||
@ -19,11 +18,8 @@ open class MapperReadKeyValuesRepo<FromKey, FromValue, ToKey, ToValue>(
|
|||||||
pagination,
|
pagination,
|
||||||
reversed
|
reversed
|
||||||
).let {
|
).let {
|
||||||
PaginationResult(
|
it.changeResultsUnchecked(
|
||||||
it.page,
|
it.results.map { it.toInnerValue() }
|
||||||
it.pagesNumber,
|
|
||||||
it.results.map { it.toInnerValue() },
|
|
||||||
it.size
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,11 +30,8 @@ open class MapperReadKeyValuesRepo<FromKey, FromValue, ToKey, ToValue>(
|
|||||||
pagination,
|
pagination,
|
||||||
reversed
|
reversed
|
||||||
).let {
|
).let {
|
||||||
PaginationResult(
|
it.changeResultsUnchecked(
|
||||||
it.page,
|
it.results.map { it.toInnerKey() }
|
||||||
it.pagesNumber,
|
|
||||||
it.results.map { it.toInnerKey() },
|
|
||||||
it.size
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,11 +44,8 @@ open class MapperReadKeyValuesRepo<FromKey, FromValue, ToKey, ToValue>(
|
|||||||
pagination,
|
pagination,
|
||||||
reversed
|
reversed
|
||||||
).let {
|
).let {
|
||||||
PaginationResult(
|
it.changeResultsUnchecked(
|
||||||
it.page,
|
it.results.map { it.toInnerKey() }
|
||||||
it.pagesNumber,
|
|
||||||
it.results.map { it.toInnerKey() },
|
|
||||||
it.size
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,8 +3,7 @@ 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.Pagination
|
import dev.inmo.micro_utils.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
|
||||||
@ -72,14 +71,11 @@ class KeyValueStore<T : Any> internal constructor (
|
|||||||
return sharedPreferences.all.values.paginate(
|
return sharedPreferences.all.values.paginate(
|
||||||
resultPagination
|
resultPagination
|
||||||
).let {
|
).let {
|
||||||
PaginationResult(
|
it.changeResultsUnchecked(
|
||||||
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
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,11 +85,8 @@ class KeyValueStore<T : Any> internal constructor (
|
|||||||
return sharedPreferences.all.keys.paginate(
|
return sharedPreferences.all.keys.paginate(
|
||||||
resultPagination
|
resultPagination
|
||||||
).let {
|
).let {
|
||||||
PaginationResult(
|
it.changeResultsUnchecked(
|
||||||
it.page,
|
it.results.let { if (reversed) it.reversed() else it }
|
||||||
it.pagesNumber,
|
|
||||||
it.results.let { if (reversed) it.reversed() else it },
|
|
||||||
it.size
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -103,11 +96,8 @@ 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 {
|
||||||
PaginationResult(
|
it.changeResultsUnchecked(
|
||||||
it.page,
|
it.results.let { if (reversed) it.reversed() else it }
|
||||||
it.pagesNumber,
|
|
||||||
it.results.let { if (reversed) it.reversed() else it },
|
|
||||||
it.size
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user