mirror of
				https://github.com/InsanusMokrassar/MicroUtils.git
				synced 2025-11-04 06:00:22 +00:00 
			
		
		
		
	Merge branch 'master' into 0.12.0
This commit is contained in:
		
							
								
								
									
										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
 | 
					 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user