mirror of
				https://github.com/InsanusMokrassar/MicroUtils.git
				synced 2025-10-31 12:10:29 +00:00 
			
		
		
		
	Compare commits
	
		
			44 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| eefb56bed7 | |||
| fcc0dc4189 | |||
| 47ff20317f | |||
| 1558b9103d | |||
| 7a78742162 | |||
| c01e240f66 | |||
| fef4fcbac6 | |||
| 5ab18bce4b | |||
| 24aec7271a | |||
| 9b19a2cb95 | |||
| efdd7b8a57 | |||
| 6df4cc9c3b | |||
| b9d93db0f5 | |||
| d7ee45ca64 | |||
| d7c31b1b22 | |||
| 7d6794a358 | |||
| 473eb87346 | |||
| 8b18b07790 | |||
| ab3c80a5ec | |||
| 075b93ecd6 | |||
| f6d0f72e49 | |||
| fcda3af862 | |||
| d5c7a589b1 | |||
| 86e099ed25 | |||
| ebd7befe73 | |||
| b8c7e581a1 | |||
| 8281259179 | |||
| d3e06b07df | |||
| 4967018418 | |||
| 537a3c38fa | |||
| 0124957833 | |||
| f0420e2d61 | |||
| 7090566041 | |||
| f0d5035cd0 | |||
| 0fb9b8dc30 | |||
| eef6e81134 | |||
| 1593159a3f | |||
| 3da9eb9dbe | |||
| f17613f3fb | |||
| 14337ccb46 | |||
| 1a3913b09c | |||
| 039aed2747 | |||
| 173991e3cb | |||
| 8b3f8cab01 | 
							
								
								
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -8,7 +8,7 @@ jobs: | |||||||
|       - uses: actions/checkout@v2 |       - uses: actions/checkout@v2 | ||||||
|       - uses: actions/setup-java@v1 |       - uses: actions/setup-java@v1 | ||||||
|         with: |         with: | ||||||
|           java-version: 11 |           java-version: 17 | ||||||
|       - name: Rewrite version |       - name: Rewrite version | ||||||
|         run: | |         run: | | ||||||
|           branch="`echo "${{ github.ref }}" | grep -o "[^/]*$"`" |           branch="`echo "${{ github.ref }}" | grep -o "[^/]*$"`" | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								.github/workflows/dokka_push.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/dokka_push.yml
									
									
									
									
										vendored
									
									
								
							| @@ -10,7 +10,7 @@ jobs: | |||||||
|       - uses: actions/checkout@v2 |       - uses: actions/checkout@v2 | ||||||
|       - uses: actions/setup-java@v1 |       - uses: actions/setup-java@v1 | ||||||
|         with: |         with: | ||||||
|           java-version: 11 |           java-version: 17 | ||||||
|       - name: Build |       - name: Build | ||||||
|         run: ./gradlew build && ./gradlew dokkaHtml |         run: ./gradlew build && ./gradlew dokkaHtml | ||||||
|       - name: Publish KDocs |       - name: Publish KDocs | ||||||
|   | |||||||
							
								
								
									
										74
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,5 +1,79 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## 0.20.15 | ||||||
|  |  | ||||||
|  | * `Versions`: | ||||||
|  |     * `Kotlin`: `1.9.20` -> `1.9.21` | ||||||
|  |     * `KSLog`: `1.3.0` -> `1.3.1` | ||||||
|  |     * `Compose`: `1.5.10` -> `1.5.11` | ||||||
|  |  | ||||||
|  | ## 0.20.14 | ||||||
|  |  | ||||||
|  | * `Versions`: | ||||||
|  |     * `Serialization`: `1.6.0` -> `1.6.1` | ||||||
|  |     * `KSLog`: `1.2.4` -> `1.3.0` | ||||||
|  |  | ||||||
|  | ## 0.20.13 | ||||||
|  |  | ||||||
|  | * `Versions`: | ||||||
|  |     * `Ktor`: `2.3.5` -> `2.3.6` | ||||||
|  |     * `UUID`: `0.8.1` -> `0.8.2` | ||||||
|  |  | ||||||
|  | ## 0.20.12 | ||||||
|  |  | ||||||
|  | **It is experimental migration onto new gradle version. Be careful in use of this version** | ||||||
|  |  | ||||||
|  | **This update have JDK 17 in `compatibility` and `target` versions** | ||||||
|  |  | ||||||
|  | ## 0.20.11 | ||||||
|  |  | ||||||
|  | * `Versions`: | ||||||
|  |     * `Kotlin`: `1.9.20-RC2` -> `1.9.20` | ||||||
|  |     * `Exposed`: `0.44.0` -> `0.44.1` | ||||||
|  |     * `Compose`: `1.5.10-rc02` -> `1.5.10` | ||||||
|  | * `Coroutines`: | ||||||
|  |     * `SmartRWLocker` now will wait first unlock of write mutex for acquiring read | ||||||
|  |  | ||||||
|  | ## 0.20.10 | ||||||
|  |  | ||||||
|  | * `Versions`: | ||||||
|  |     * `Kotlin`: `1.9.20-RC` -> `1.9.20-RC1` | ||||||
|  |     * `KSLog`: `1.2.1` -> `1.2.2` | ||||||
|  |     * `Compose`: `1.5.10-rc01` -> `1.5.10-rc02` | ||||||
|  |     * `RecyclerView`: `1.3.1` -> `1.3.2` | ||||||
|  |  | ||||||
|  | ## 0.20.9 | ||||||
|  |  | ||||||
|  | * Most of common modules now supports `linuxArm64` target | ||||||
|  |  | ||||||
|  | ## 0.20.8 | ||||||
|  |  | ||||||
|  | **THIS VERSION CONTAINS UPDATES OF DEPENDENCIES UP TO RC VERSIONS. USE WITH CAUTION** | ||||||
|  |  | ||||||
|  | * `Versions`: | ||||||
|  |     * `Kotlin`: `1.9.20-Beta2` -> `1.9.20-RC` | ||||||
|  |     * `Compose`: `1.5.10-beta02` -> `1.5.10-rc01` | ||||||
|  |  | ||||||
|  | ## 0.20.7 | ||||||
|  |  | ||||||
|  | **THIS VERSION CONTAINS UPDATES OF DEPENDENCIES UP TO BETA VERSIONS. USE WITH CAUTION** | ||||||
|  |  | ||||||
|  | * `Versions`: | ||||||
|  |     * `Kotlin`: `1.9.10` -> `1.9.20-Beta2` | ||||||
|  |     * `Compose`: `1.5.1` -> `1.5.10-beta02` | ||||||
|  |     * `Exposed`: `0.43.0` -> `0.44.0` | ||||||
|  |     * `Ktor`: `2.3.4` -> `2.3.5` | ||||||
|  |     * `Koin`: `3.4.3` -> `3.5.0` | ||||||
|  |     * `Okio`: `3.5.0` -> `3.6.0` | ||||||
|  |     * `Android Core`: `1.10.1` -> `1.12.0` | ||||||
|  |     * `Android Compose Material`: `1.1.1` -> `1.1.2` | ||||||
|  |  | ||||||
|  | ## 0.20.6 | ||||||
|  |  | ||||||
|  | * `Repos`: | ||||||
|  |     * `Exposed` | ||||||
|  |         * Fixes in exposed key-values repos | ||||||
|  |  | ||||||
| ## 0.20.5 | ## 0.20.5 | ||||||
|  |  | ||||||
| * `Coroutines`: | * `Coroutines`: | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
| @@ -31,5 +31,10 @@ kotlin { | |||||||
|                 api libs.okio |                 api libs.okio | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |         linuxArm64Main { | ||||||
|  |             dependencies { | ||||||
|  |                 api libs.okio | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										36
									
								
								common/src/linuxArm64Main/kotlin/ActualMPPFile.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								common/src/linuxArm64Main/kotlin/ActualMPPFile.kt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | package dev.inmo.micro_utils.common | ||||||
|  |  | ||||||
|  | import okio.FileSystem | ||||||
|  | import okio.Path | ||||||
|  | import okio.use | ||||||
|  |  | ||||||
|  | actual typealias MPPFile = Path | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @suppress | ||||||
|  |  */ | ||||||
|  | actual val MPPFile.filename: FileName | ||||||
|  |     get() = FileName(toString()) | ||||||
|  | /** | ||||||
|  |  * @suppress | ||||||
|  |  */ | ||||||
|  | actual val MPPFile.filesize: Long | ||||||
|  |     get() = FileSystem.SYSTEM.openReadOnly(this).use { | ||||||
|  |         it.size() | ||||||
|  |     } | ||||||
|  | /** | ||||||
|  |  * @suppress | ||||||
|  |  */ | ||||||
|  | actual val MPPFile.bytesAllocatorSync: ByteArrayAllocator | ||||||
|  |     get() = { | ||||||
|  |         FileSystem.SYSTEM.read(this) { | ||||||
|  |             readByteArray() | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | /** | ||||||
|  |  * @suppress | ||||||
|  |  */ | ||||||
|  | actual val MPPFile.bytesAllocator: SuspendByteArrayAllocator | ||||||
|  |     get() = { | ||||||
|  |         bytesAllocatorSync() | ||||||
|  |     } | ||||||
							
								
								
									
										25
									
								
								common/src/linuxArm64Main/kotlin/fixed.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								common/src/linuxArm64Main/kotlin/fixed.kt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | package dev.inmo.micro_utils.common | ||||||
|  |  | ||||||
|  | import kotlinx.cinterop.* | ||||||
|  | import platform.posix.snprintf | ||||||
|  | import platform.posix.sprintf | ||||||
|  |  | ||||||
|  | @OptIn(ExperimentalForeignApi::class) | ||||||
|  | actual fun Float.fixed(signs: Int): Float { | ||||||
|  |     return memScoped { | ||||||
|  |         val buff = allocArray<ByteVar>(Float.SIZE_BYTES * 2) | ||||||
|  |  | ||||||
|  |         sprintf(buff, "%.${signs}f", this@fixed) | ||||||
|  |         buff.toKString().toFloat() | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @OptIn(ExperimentalForeignApi::class) | ||||||
|  | actual fun Double.fixed(signs: Int): Double { | ||||||
|  |     return memScoped { | ||||||
|  |         val buff = allocArray<ByteVar>(Double.SIZE_BYTES * 2) | ||||||
|  |  | ||||||
|  |         sprintf(buff, "%.${signs}f", this@fixed) | ||||||
|  |         buff.toKString().toDouble() | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ class SmartRWLocker(private val readPermits: Int = Int.MAX_VALUE, writeIsLocked: | |||||||
|      * Do lock in [readSemaphore] inside of [writeMutex] locking |      * Do lock in [readSemaphore] inside of [writeMutex] locking | ||||||
|      */ |      */ | ||||||
|     suspend fun acquireRead() { |     suspend fun acquireRead() { | ||||||
|  |         _writeMutex.waitUnlock() | ||||||
|         _readSemaphore.acquire() |         _readSemaphore.acquire() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ android { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     compileOptions { |     compileOptions { | ||||||
|         sourceCompatibility JavaVersion.VERSION_1_8 |         sourceCompatibility JavaVersion.VERSION_17 | ||||||
|         targetCompatibility JavaVersion.VERSION_1_8 |         targetCompatibility JavaVersion.VERSION_17 | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -19,11 +19,19 @@ allprojects { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         releaseMode = (project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true" |         releaseMode = (project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true" | ||||||
|  | //        String compilerPluginVersionFromProperties = (String) project.properties["compose.kotlinCompilerPluginVersion"] | ||||||
|  | //        String compilerPluginVersionFromLibrariesVersions = libs.versions.compose.kotlin.get() | ||||||
|  | //        composePluginKotlinVersion = compilerPluginVersionFromProperties | ||||||
|  | //        if (compilerPluginVersionFromProperties == null) { | ||||||
|  | //            composePluginKotlinVersion = compilerPluginVersionFromLibrariesVersions | ||||||
|  | //        } | ||||||
|  |  | ||||||
|         mppProjectWithSerializationPresetPath = "${rootProject.projectDir.absolutePath}/mppProjectWithSerialization.gradle" |         mppProjectWithSerializationPresetPath = "${rootProject.projectDir.absolutePath}/mppJvmJsAndroidProject.gradle" | ||||||
|         mppProjectWithSerializationAndComposePresetPath = "${rootProject.projectDir.absolutePath}/mppProjectWithSerializationAndCompose.gradle" |         mppProjectWithSerializationAndComposePresetPath = "${rootProject.projectDir.absolutePath}/mppProjectWithSerializationAndCompose.gradle" | ||||||
|         mppJavaProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJavaProject.gradle" |         mppJavaProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJavaProject.gradle" | ||||||
|         mppJvmJsLinuxMingwProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJvmJsLinuxMingwProject.gradle" |         mppJvmJsLinuxMingwProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJvmJsLinuxMingwProject.gradle" | ||||||
|  |         mppJvmJsLinuxMingwLinuxArm64ProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJvmJsLinuxMingwLinuxArm64Project.gradle" | ||||||
|  |         mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle" | ||||||
|         mppAndroidProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppAndroidProject.gradle" |         mppAndroidProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppAndroidProject.gradle" | ||||||
|  |  | ||||||
|         defaultAndroidSettingsPresetPath = "${rootProject.projectDir.absolutePath}/defaultAndroidSettings.gradle" |         defaultAndroidSettingsPresetPath = "${rootProject.projectDir.absolutePath}/defaultAndroidSettings.gradle" | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ kotlin.incremental.js=true | |||||||
| #kotlin.experimental.tryK2=true | #kotlin.experimental.tryK2=true | ||||||
| android.useAndroidX=true | android.useAndroidX=true | ||||||
| android.enableJetifier=true | android.enableJetifier=true | ||||||
| org.gradle.jvmargs=-Xmx2g | org.gradle.jvmargs=-Xmx2500m | ||||||
|  |  | ||||||
| # JS NPM | # JS NPM | ||||||
|  |  | ||||||
| @@ -15,5 +15,5 @@ crypto_js_version=4.1.1 | |||||||
| # Project data | # Project data | ||||||
|  |  | ||||||
| group=dev.inmo | group=dev.inmo | ||||||
| version=0.20.5 | version=0.20.15 | ||||||
| android_code_version=211 | android_code_version=221 | ||||||
|   | |||||||
| @@ -1,41 +1,41 @@ | |||||||
| [versions] | [versions] | ||||||
|  |  | ||||||
| kt = "1.9.10" | kt = "1.9.21" | ||||||
| kt-serialization = "1.6.0" | kt-serialization = "1.6.1" | ||||||
| kt-coroutines = "1.7.3" | kt-coroutines = "1.7.3" | ||||||
|  |  | ||||||
| kslog = "1.2.1" | kslog = "1.3.1" | ||||||
|  |  | ||||||
| jb-compose = "1.5.1" | jb-compose = "1.5.11" | ||||||
| jb-exposed = "0.43.0" | jb-exposed = "0.44.1" | ||||||
| jb-dokka = "1.9.0" | jb-dokka = "1.9.10" | ||||||
|  |  | ||||||
| korlibs = "4.0.10" | korlibs = "4.0.10" | ||||||
| uuid = "0.8.1" | uuid = "0.8.2" | ||||||
|  |  | ||||||
| ktor = "2.3.4" | ktor = "2.3.6" | ||||||
|  |  | ||||||
| gh-release = "2.4.1" | gh-release = "2.4.1" | ||||||
|  |  | ||||||
| koin = "3.4.3" | koin = "3.5.0" | ||||||
|  |  | ||||||
| okio = "3.5.0" | okio = "3.6.0" | ||||||
|  |  | ||||||
| ksp = "1.9.10-1.0.13" | ksp = "1.9.20-1.0.14" | ||||||
| kotlin-poet = "1.14.2" | kotlin-poet = "1.15.1" | ||||||
|  |  | ||||||
| versions = "0.47.0" | versions = "0.50.0" | ||||||
|  |  | ||||||
| android-gradle = "7.4.2" | android-gradle = "8.1.4" | ||||||
| dexcount = "4.0.0" | dexcount = "4.0.0" | ||||||
|  |  | ||||||
| android-coreKtx = "1.10.1" | android-coreKtx = "1.12.0" | ||||||
| android-recyclerView = "1.3.1" | android-recyclerView = "1.3.2" | ||||||
| android-appCompat = "1.6.1" | android-appCompat = "1.6.1" | ||||||
| android-fragment = "1.6.1" | android-fragment = "1.6.2" | ||||||
| android-espresso = "3.5.1" | android-espresso = "3.5.1" | ||||||
| android-test = "1.1.5" | android-test = "1.1.5" | ||||||
| android-compose-material3 = "1.1.1" | android-compose-material3 = "1.1.2" | ||||||
|  |  | ||||||
| android-props-minSdk = "21" | android-props-minSdk = "21" | ||||||
| android-props-compileSdk = "34" | android-props-compileSdk = "34" | ||||||
|   | |||||||
							
								
								
									
										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.6.2-bin.zip | distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip | ||||||
| zipStoreBase=GRADLE_USER_HOME | zipStoreBase=GRADLE_USER_HOME | ||||||
| zipStorePath=wrapper/dists | zipStorePath=wrapper/dists | ||||||
|   | |||||||
| @@ -2,11 +2,11 @@ apply plugin: 'maven-publish' | |||||||
|  |  | ||||||
| task javadocJar(type: Jar) { | task javadocJar(type: Jar) { | ||||||
|     from javadoc |     from javadoc | ||||||
|     classifier = 'javadoc' |     archiveClassifier = 'javadoc' | ||||||
| } | } | ||||||
| task sourcesJar(type: Jar) { | task sourcesJar(type: Jar) { | ||||||
|     from sourceSets.main.allSource |     from sourceSets.main.allSource | ||||||
|     classifier = 'sources' |     archiveClassifier = 'sources' | ||||||
| } | } | ||||||
|  |  | ||||||
| publishing { | publishing { | ||||||
| @@ -115,4 +115,10 @@ if (project.hasProperty("signing.gnupg.keyName")) { | |||||||
|             dependsOn(it) |             dependsOn(it) | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // Workaround to make android sign operations depend on signing tasks | ||||||
|  |     project.getTasks().withType(AbstractPublishToMaven.class).configureEach { | ||||||
|  |         def signingTasks = project.getTasks().withType(Sign.class) | ||||||
|  |         mustRunAfter(signingTasks) | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -15,6 +15,6 @@ dependencies { | |||||||
| } | } | ||||||
|  |  | ||||||
| java { | java { | ||||||
|     sourceCompatibility = JavaVersion.VERSION_1_8 |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|     targetCompatibility = JavaVersion.VERSION_1_8 |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
| @@ -30,5 +30,11 @@ kotlin { | |||||||
|                 api internalProject("micro_utils.mime_types") |                 api internalProject("micro_utils.mime_types") | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         linuxArm64Main { | ||||||
|  |             dependencies { | ||||||
|  |                 api internalProject("micro_utils.mime_types") | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -0,0 +1,40 @@ | |||||||
|  | package dev.inmo.micro_utils.ktor.client | ||||||
|  |  | ||||||
|  | import dev.inmo.micro_utils.common.MPPFile | ||||||
|  | import dev.inmo.micro_utils.common.filename | ||||||
|  | import dev.inmo.micro_utils.ktor.common.TemporalFileId | ||||||
|  | import dev.inmo.micro_utils.mime_types.getMimeTypeOrAny | ||||||
|  | import io.ktor.client.HttpClient | ||||||
|  | import io.ktor.client.plugins.onUpload | ||||||
|  | import io.ktor.client.request.forms.formData | ||||||
|  | import io.ktor.client.request.forms.submitFormWithBinaryData | ||||||
|  | import io.ktor.client.statement.bodyAsText | ||||||
|  | import io.ktor.http.Headers | ||||||
|  | import io.ktor.http.HttpHeaders | ||||||
|  |  | ||||||
|  | internal val MPPFile.mimeType: String | ||||||
|  |     get() = getMimeTypeOrAny(filename.extension).raw | ||||||
|  |  | ||||||
|  | actual suspend fun HttpClient.tempUpload( | ||||||
|  |     fullTempUploadDraftPath: String, | ||||||
|  |     file: MPPFile, | ||||||
|  |     onUpload: OnUploadCallback | ||||||
|  | ): TemporalFileId { | ||||||
|  |     val inputProvider = file.inputProvider() | ||||||
|  |     val fileId = submitFormWithBinaryData( | ||||||
|  |         fullTempUploadDraftPath, | ||||||
|  |         formData = formData { | ||||||
|  |             append( | ||||||
|  |                 "data", | ||||||
|  |                 inputProvider, | ||||||
|  |                 Headers.build { | ||||||
|  |                     append(HttpHeaders.ContentType, file.mimeType) | ||||||
|  |                     append(HttpHeaders.ContentDisposition, "filename=\"${file.filename.string}\"") | ||||||
|  |                 } | ||||||
|  |             ) | ||||||
|  |         } | ||||||
|  |     ) { | ||||||
|  |         onUpload(onUpload) | ||||||
|  |     }.bodyAsText() | ||||||
|  |     return TemporalFileId(fileId) | ||||||
|  | } | ||||||
							
								
								
									
										107
									
								
								ktor/client/src/linuxArm64Main/kotlin/ActualUniUpload.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								ktor/client/src/linuxArm64Main/kotlin/ActualUniUpload.kt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | |||||||
|  | package dev.inmo.micro_utils.ktor.client | ||||||
|  |  | ||||||
|  | import dev.inmo.micro_utils.common.MPPFile | ||||||
|  | import dev.inmo.micro_utils.common.Progress | ||||||
|  | import io.ktor.client.HttpClient | ||||||
|  | import io.ktor.client.engine.mergeHeaders | ||||||
|  | import io.ktor.client.plugins.onUpload | ||||||
|  | import io.ktor.client.request.HttpRequestBuilder | ||||||
|  | import io.ktor.client.request.forms.InputProvider | ||||||
|  | import io.ktor.client.request.forms.formData | ||||||
|  | import io.ktor.client.request.forms.submitForm | ||||||
|  | import io.ktor.client.request.forms.submitFormWithBinaryData | ||||||
|  | import io.ktor.client.request.headers | ||||||
|  | import io.ktor.client.statement.bodyAsText | ||||||
|  | import io.ktor.http.Headers | ||||||
|  | import io.ktor.http.HttpHeaders | ||||||
|  | import io.ktor.http.HttpStatusCode | ||||||
|  | import io.ktor.http.Parameters | ||||||
|  | import io.ktor.http.content.PartData | ||||||
|  | import kotlinx.serialization.DeserializationStrategy | ||||||
|  | import kotlinx.serialization.InternalSerializationApi | ||||||
|  | import kotlinx.serialization.SerializationStrategy | ||||||
|  | import kotlinx.serialization.StringFormat | ||||||
|  | import kotlinx.serialization.encodeToString | ||||||
|  | import kotlinx.serialization.serializer | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Will execute submitting of multipart data request | ||||||
|  |  * | ||||||
|  |  * @param data [Map] where keys will be used as names for multipart parts and values as values. If you will pass | ||||||
|  |  * [dev.inmo.micro_utils.common.MPPFile] (File from JS or JVM platform). Also you may pass [UniUploadFileInfo] as value | ||||||
|  |  * in case you wish to pass other source of multipart binary data than regular file | ||||||
|  |  * @suppress | ||||||
|  |  */ | ||||||
|  | @OptIn(InternalSerializationApi::class) | ||||||
|  | actual suspend fun <T> HttpClient.uniUpload( | ||||||
|  |     url: String, | ||||||
|  |     data: Map<String, Any>, | ||||||
|  |     resultDeserializer: DeserializationStrategy<T>, | ||||||
|  |     headers: Headers, | ||||||
|  |     stringFormat: StringFormat, | ||||||
|  |     onUpload: OnUploadCallback | ||||||
|  | ): T? { | ||||||
|  |     val withBinary = data.values.any { it is MPPFile || it is UniUploadFileInfo } | ||||||
|  |  | ||||||
|  |     val formData = formData { | ||||||
|  |         for (k in data.keys) { | ||||||
|  |             val v = data[k] ?: continue | ||||||
|  |             when (v) { | ||||||
|  |                 is MPPFile -> append( | ||||||
|  |                     k, | ||||||
|  |                     v.inputProvider(), | ||||||
|  |                     Headers.build { | ||||||
|  |                         append(HttpHeaders.ContentType, v.mimeType) | ||||||
|  |                         append(HttpHeaders.ContentDisposition, "filename=\"${v.name}\"") | ||||||
|  |                     } | ||||||
|  |                 ) | ||||||
|  |                 is UniUploadFileInfo -> append( | ||||||
|  |                     k, | ||||||
|  |                     InputProvider(block = v.inputAllocator), | ||||||
|  |                     Headers.build { | ||||||
|  |                         append(HttpHeaders.ContentType, v.mimeType) | ||||||
|  |                         append(HttpHeaders.ContentDisposition, "filename=\"${v.fileName.name}\"") | ||||||
|  |                     } | ||||||
|  |                 ) | ||||||
|  |                 else -> append( | ||||||
|  |                     k, | ||||||
|  |                     stringFormat.encodeToString(v::class.serializer() as SerializationStrategy<in Any>, v) | ||||||
|  |                 ) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     val requestBuilder: HttpRequestBuilder.() -> Unit = { | ||||||
|  |         headers { | ||||||
|  |             appendAll(headers) | ||||||
|  |         } | ||||||
|  |         onUpload { bytesSentTotal, contentLength -> | ||||||
|  |             onUpload(bytesSentTotal, contentLength) | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     val response = if (withBinary) { | ||||||
|  |         submitFormWithBinaryData( | ||||||
|  |             url, | ||||||
|  |             formData, | ||||||
|  |             block = requestBuilder | ||||||
|  |         ) | ||||||
|  |     } else { | ||||||
|  |         submitForm( | ||||||
|  |             url, | ||||||
|  |             Parameters.build { | ||||||
|  |                 for (it in formData) { | ||||||
|  |                     val formItem = (it as PartData.FormItem) | ||||||
|  |                     append(it.name!!, it.value) | ||||||
|  |                 } | ||||||
|  |             }, | ||||||
|  |             block = requestBuilder | ||||||
|  |         ) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return if (response.status == HttpStatusCode.OK) { | ||||||
|  |         stringFormat.decodeFromString(resultDeserializer, response.bodyAsText()) | ||||||
|  |     } else { | ||||||
|  |         null | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								ktor/common/src/linuxArm64Main/kotlin/ActualMPPFileInput.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								ktor/common/src/linuxArm64Main/kotlin/ActualMPPFileInput.kt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | package dev.inmo.micro_utils.ktor.common | ||||||
|  |  | ||||||
|  | import dev.inmo.micro_utils.common.MPPFile | ||||||
|  | import dev.inmo.micro_utils.common.bytesAllocatorSync | ||||||
|  | import io.ktor.utils.io.core.ByteReadPacket | ||||||
|  | import io.ktor.utils.io.core.Input | ||||||
|  |  | ||||||
|  | actual fun MPPFile.input(): Input { | ||||||
|  |     return ByteReadPacket(bytesAllocatorSync()) | ||||||
|  | } | ||||||
|  |  | ||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -26,6 +26,6 @@ dependencies { | |||||||
| mainClassName="MainKt" | mainClassName="MainKt" | ||||||
|  |  | ||||||
| java { | java { | ||||||
|     sourceCompatibility = JavaVersion.VERSION_1_8 |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|     targetCompatibility = JavaVersion.VERSION_1_8 |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -4,4 +4,4 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|   | |||||||
| @@ -4,4 +4,4 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|   | |||||||
| @@ -4,8 +4,13 @@ project.group = "$group" | |||||||
| apply from: "$publishGradlePath" | apply from: "$publishGradlePath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     android { |     androidTarget { | ||||||
|         publishAllLibraryVariants() |         publishAllLibraryVariants() | ||||||
|  |         compilations.all { | ||||||
|  |             kotlinOptions { | ||||||
|  |                 jvmTarget = "17" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     sourceSets { |     sourceSets { | ||||||
| @@ -27,6 +32,6 @@ kotlin { | |||||||
| apply from: "$defaultAndroidSettingsPresetPath" | apply from: "$defaultAndroidSettingsPresetPath" | ||||||
|  |  | ||||||
| java { | java { | ||||||
|     sourceCompatibility = JavaVersion.VERSION_1_8 |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|     targetCompatibility = JavaVersion.VERSION_1_8 |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ kotlin { | |||||||
|     jvm { |     jvm { | ||||||
|         compilations.main { |         compilations.main { | ||||||
|             kotlinOptions { |             kotlinOptions { | ||||||
|                 jvmTarget = "1.8" |                 jvmTarget = "17" | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -35,6 +35,6 @@ kotlin { | |||||||
| } | } | ||||||
|  |  | ||||||
| java { | java { | ||||||
|     sourceCompatibility = JavaVersion.VERSION_1_8 |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|     targetCompatibility = JavaVersion.VERSION_1_8 |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										71
									
								
								mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								mppJvmJsAndroidLinuxMingwLinuxArm64Project.gradle
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | |||||||
|  | project.version = "$version" | ||||||
|  | project.group = "$group" | ||||||
|  |  | ||||||
|  | apply from: "$publishGradlePath" | ||||||
|  |  | ||||||
|  | kotlin { | ||||||
|  |     jvm { | ||||||
|  |         compilations.main { | ||||||
|  |             kotlinOptions { | ||||||
|  |                 jvmTarget = "17" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     js (IR) { | ||||||
|  |         browser() | ||||||
|  |         nodejs() | ||||||
|  |     } | ||||||
|  |     androidTarget { | ||||||
|  |         publishAllLibraryVariants() | ||||||
|  |         compilations.all { | ||||||
|  |             kotlinOptions { | ||||||
|  |                 jvmTarget = "17" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     linuxX64() | ||||||
|  |     mingwX64() | ||||||
|  |     linuxArm64() | ||||||
|  |  | ||||||
|  |     sourceSets { | ||||||
|  |         commonMain { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('stdlib') | ||||||
|  |                 api libs.kt.serialization | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         commonTest { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('test-common') | ||||||
|  |                 implementation kotlin('test-annotations-common') | ||||||
|  |                 implementation libs.kt.coroutines.test | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         androidUnitTest { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('test-junit') | ||||||
|  |                 implementation libs.android.test.junit | ||||||
|  |                 implementation libs.android.espresso | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         jvmTest { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('test-junit') | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         jsTest { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('test-js') | ||||||
|  |                 implementation kotlin('test-junit') | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | apply from: "$defaultAndroidSettingsPresetPath" | ||||||
|  |  | ||||||
|  | java { | ||||||
|  |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|  |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
|  | } | ||||||
| @@ -7,7 +7,7 @@ kotlin { | |||||||
|     jvm { |     jvm { | ||||||
|         compilations.main { |         compilations.main { | ||||||
|             kotlinOptions { |             kotlinOptions { | ||||||
|                 jvmTarget = "1.8" |                 jvmTarget = "17" | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -15,8 +15,13 @@ kotlin { | |||||||
|         browser() |         browser() | ||||||
|         nodejs() |         nodejs() | ||||||
|     } |     } | ||||||
|     android { |     androidTarget { | ||||||
|         publishAllLibraryVariants() |         publishAllLibraryVariants() | ||||||
|  |         compilations.all { | ||||||
|  |             kotlinOptions { | ||||||
|  |                 jvmTarget = "17" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     linuxX64() |     linuxX64() | ||||||
|     mingwX64() |     mingwX64() | ||||||
| @@ -71,6 +76,6 @@ kotlin { | |||||||
| apply from: "$defaultAndroidSettingsPresetPath" | apply from: "$defaultAndroidSettingsPresetPath" | ||||||
| 
 | 
 | ||||||
| java { | java { | ||||||
|     sourceCompatibility = JavaVersion.VERSION_1_8 |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|     targetCompatibility = JavaVersion.VERSION_1_8 |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
| } | } | ||||||
							
								
								
									
										54
									
								
								mppJvmJsLinuxMingwLinuxArm64Project.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								mppJvmJsLinuxMingwLinuxArm64Project.gradle
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | project.version = "$version" | ||||||
|  | project.group = "$group" | ||||||
|  |  | ||||||
|  | apply from: "$publishGradlePath" | ||||||
|  |  | ||||||
|  | kotlin { | ||||||
|  |     jvm { | ||||||
|  |         compilations.main { | ||||||
|  |             kotlinOptions { | ||||||
|  |                 jvmTarget = "17" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     js (IR) { | ||||||
|  |         browser() | ||||||
|  |         nodejs() | ||||||
|  |     } | ||||||
|  |     linuxX64() | ||||||
|  |     mingwX64() | ||||||
|  |     linuxArm64() | ||||||
|  |  | ||||||
|  |     sourceSets { | ||||||
|  |         commonMain { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('stdlib') | ||||||
|  |                 api libs.kt.serialization | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         commonTest { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('test-common') | ||||||
|  |                 implementation kotlin('test-annotations-common') | ||||||
|  |                 implementation libs.kt.coroutines.test | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         jvmTest { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('test-junit') | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         jsTest { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('test-js') | ||||||
|  |                 implementation kotlin('test-junit') | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | java { | ||||||
|  |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|  |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
|  | } | ||||||
| @@ -7,7 +7,7 @@ kotlin { | |||||||
|     jvm { |     jvm { | ||||||
|         compilations.main { |         compilations.main { | ||||||
|             kotlinOptions { |             kotlinOptions { | ||||||
|                 jvmTarget = "1.8" |                 jvmTarget = "17" | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -22,6 +22,7 @@ kotlin { | |||||||
|         commonMain { |         commonMain { | ||||||
|             dependencies { |             dependencies { | ||||||
|                 implementation kotlin('stdlib') |                 implementation kotlin('stdlib') | ||||||
|  |                 api libs.kt.serialization | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         commonTest { |         commonTest { | ||||||
| @@ -43,10 +44,22 @@ kotlin { | |||||||
|                 implementation kotlin('test-junit') |                 implementation kotlin('test-junit') | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |         mingwX64Test { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('test-junit') | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         linuxX64Test { | ||||||
|  |             dependencies { | ||||||
|  |                 implementation kotlin('test-junit') | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         androidMain.dependsOn jvmMain | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| java { | java { | ||||||
|     sourceCompatibility = JavaVersion.VERSION_1_8 |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|     targetCompatibility = JavaVersion.VERSION_1_8 |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ kotlin { | |||||||
|     jvm { |     jvm { | ||||||
|         compilations.main { |         compilations.main { | ||||||
|             kotlinOptions { |             kotlinOptions { | ||||||
|                 jvmTarget = "1.8" |                 jvmTarget = "17" | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -15,8 +15,13 @@ kotlin { | |||||||
|         browser() |         browser() | ||||||
|         nodejs() |         nodejs() | ||||||
|     } |     } | ||||||
|     android { |     androidTarget { | ||||||
|         publishAllLibraryVariants() |         publishAllLibraryVariants() | ||||||
|  |         compilations.all { | ||||||
|  |             kotlinOptions { | ||||||
|  |                 jvmTarget = "17" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     sourceSets { |     sourceSets { | ||||||
| @@ -70,6 +75,13 @@ kotlin { | |||||||
| apply from: "$defaultAndroidSettingsPresetPath" | apply from: "$defaultAndroidSettingsPresetPath" | ||||||
|  |  | ||||||
| java { | java { | ||||||
|     sourceCompatibility = JavaVersion.VERSION_1_8 |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|     targetCompatibility = JavaVersion.VERSION_1_8 |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | //compose { | ||||||
|  | //    if (composePluginKotlinVersion != null && !composePluginKotlinVersion.isEmpty()) { | ||||||
|  | //        kotlinCompilerPlugin.set(composePluginKotlinVersion) | ||||||
|  | //    } | ||||||
|  | //} | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| apply plugin: 'maven-publish' | apply plugin: 'maven-publish' | ||||||
|  |  | ||||||
| task javadocsJar(type: Jar) { | task javadocsJar(type: Jar) { | ||||||
|     classifier = 'javadoc' |     archiveClassifier = 'javadoc' | ||||||
| } | } | ||||||
|  |  | ||||||
| publishing { | publishing { | ||||||
| @@ -19,29 +19,29 @@ publishing { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             developers { |             developers { | ||||||
|  |                  | ||||||
|                     developer { |                     developer { | ||||||
|                         id = "InsanusMokrassar" |                         id = "InsanusMokrassar" | ||||||
|                         name = "Aleksei Ovsiannikov" |                         name = "Aleksei Ovsiannikov" | ||||||
|                         email = "ovsyannikov.alexey95@gmail.com" |                         email = "ovsyannikov.alexey95@gmail.com" | ||||||
|                     } |                     } | ||||||
|  |                  | ||||||
|  |  | ||||||
|                     developer { |                     developer { | ||||||
|                         id = "000Sanya" |                         id = "000Sanya" | ||||||
|                         name = "Syrov Aleksandr" |                         name = "Syrov Aleksandr" | ||||||
|                         email = "000sanya.000sanya@gmail.com" |                         email = "000sanya.000sanya@gmail.com" | ||||||
|                     } |                     } | ||||||
|  |                  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             licenses { |             licenses { | ||||||
|  |                  | ||||||
|                     license { |                     license { | ||||||
|                         name = "Apache Software License 2.0" |                         name = "Apache Software License 2.0" | ||||||
|                         url = "https://github.com/InsanusMokrassar/MicroUtils/blob/master/LICENSE" |                         url = "https://github.com/InsanusMokrassar/MicroUtils/blob/master/LICENSE" | ||||||
|                     } |                     } | ||||||
|  |                  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         repositories { |         repositories { | ||||||
| @@ -49,57 +49,64 @@ publishing { | |||||||
|                 maven { |                 maven { | ||||||
|                     name = "GithubPackages" |                     name = "GithubPackages" | ||||||
|                     url = uri("https://maven.pkg.github.com/InsanusMokrassar/MicroUtils") |                     url = uri("https://maven.pkg.github.com/InsanusMokrassar/MicroUtils") | ||||||
|  |              | ||||||
|                     credentials { |                     credentials { | ||||||
|                         username = project.hasProperty('GITHUBPACKAGES_USER') ? project.property('GITHUBPACKAGES_USER') : System.getenv('GITHUBPACKAGES_USER') |                         username = project.hasProperty('GITHUBPACKAGES_USER') ? project.property('GITHUBPACKAGES_USER') : System.getenv('GITHUBPACKAGES_USER') | ||||||
|                         password = project.hasProperty('GITHUBPACKAGES_PASSWORD') ? project.property('GITHUBPACKAGES_PASSWORD') : System.getenv('GITHUBPACKAGES_PASSWORD') |                         password = project.hasProperty('GITHUBPACKAGES_PASSWORD') ? project.property('GITHUBPACKAGES_PASSWORD') : System.getenv('GITHUBPACKAGES_PASSWORD') | ||||||
|                     } |                     } | ||||||
|  |              | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             if (project.hasProperty('GITEA_TOKEN') || System.getenv('GITEA_TOKEN') != null) { |             if (project.hasProperty('GITEA_TOKEN') || System.getenv('GITEA_TOKEN') != null) { | ||||||
|                 maven { |                 maven { | ||||||
|                     name = "Gitea" |                     name = "Gitea" | ||||||
|                     url = uri("https://git.inmo.dev/api/packages/InsanusMokrassar/maven") |                     url = uri("https://git.inmo.dev/api/packages/InsanusMokrassar/maven") | ||||||
|  |              | ||||||
|                     credentials(HttpHeaderCredentials) { |                     credentials(HttpHeaderCredentials) { | ||||||
|                         name = "Authorization" |                         name = "Authorization" | ||||||
|                         value = project.hasProperty('GITEA_TOKEN') ? project.property('GITEA_TOKEN') : System.getenv('GITEA_TOKEN') |                         value = project.hasProperty('GITEA_TOKEN') ? project.property('GITEA_TOKEN') : System.getenv('GITEA_TOKEN') | ||||||
|                     } |                     } | ||||||
|  |              | ||||||
|                     authentication { |                     authentication { | ||||||
|                         header(HttpHeaderAuthentication) |                         header(HttpHeaderAuthentication) | ||||||
|                     } |                     } | ||||||
|  |              | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) { |             if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) { | ||||||
|                 maven { |                 maven { | ||||||
|                     name = "sonatype" |                     name = "sonatype" | ||||||
|                     url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/") |                     url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/") | ||||||
|  |              | ||||||
|                     credentials { |                     credentials { | ||||||
|                         username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER') |                         username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER') | ||||||
|                         password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD') |                         password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD') | ||||||
|                     } |                     } | ||||||
|  |              | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |      | ||||||
| if (project.hasProperty("signing.gnupg.keyName")) { | if (project.hasProperty("signing.gnupg.keyName")) { | ||||||
|     apply plugin: 'signing' |     apply plugin: 'signing' | ||||||
|  |      | ||||||
|     signing { |     signing { | ||||||
|         useGpgCmd() |         useGpgCmd() | ||||||
|  |      | ||||||
|         sign publishing.publications |         sign publishing.publications | ||||||
|     } |     } | ||||||
|  |      | ||||||
|     task signAll { |     task signAll { | ||||||
|         tasks.withType(Sign).forEach { |         tasks.withType(Sign).forEach { | ||||||
|             dependsOn(it) |             dependsOn(it) | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // Workaround to make android sign operations depend on signing tasks | ||||||
|  |     project.getTasks().withType(AbstractPublishToMaven.class).configureEach { | ||||||
|  |         def signingTasks = project.getTasks().withType(Sign.class) | ||||||
|  |         mustRunAfter(signingTasks) | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								repos/cache/build.gradle
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								repos/cache/build.gradle
									
									
									
									
										vendored
									
									
								
							| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -1,12 +1,10 @@ | |||||||
| package dev.inmo.micro_utils.repos.exposed.onetomany | package dev.inmo.micro_utils.repos.exposed.onetomany | ||||||
| 
 | 
 | ||||||
| import dev.inmo.micro_utils.pagination.* | import dev.inmo.micro_utils.pagination.* | ||||||
| import dev.inmo.micro_utils.repos.ReadKeyValueRepo |  | ||||||
| import dev.inmo.micro_utils.repos.ReadKeyValuesRepo | import dev.inmo.micro_utils.repos.ReadKeyValuesRepo | ||||||
| import dev.inmo.micro_utils.repos.exposed.* | import dev.inmo.micro_utils.repos.exposed.* | ||||||
| import dev.inmo.micro_utils.repos.exposed.utils.selectPaginated | import dev.inmo.micro_utils.repos.exposed.utils.selectPaginated | ||||||
| import org.jetbrains.exposed.sql.* | import org.jetbrains.exposed.sql.* | ||||||
| import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq |  | ||||||
| import org.jetbrains.exposed.sql.transactions.transaction | import org.jetbrains.exposed.sql.transactions.transaction | ||||||
| 
 | 
 | ||||||
| abstract class AbstractExposedReadKeyValuesRepo<Key, Value>( | abstract class AbstractExposedReadKeyValuesRepo<Key, Value>( | ||||||
| @@ -73,4 +71,26 @@ abstract class AbstractExposedReadKeyValuesRepo<Key, Value>( | |||||||
|     override suspend fun contains(k: Key, v: Value): Boolean = transaction(database) { |     override suspend fun contains(k: Key, v: Value): Boolean = transaction(database) { | ||||||
|         select { selectById(k).and(selectByValue(v)) }.limit(1).any() |         select { selectById(k).and(selectByValue(v)) }.limit(1).any() | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     override suspend fun getAll(reverseLists: Boolean): Map<Key, List<Value>> = transaction(database) { | ||||||
|  |         val query = if (reverseLists) { | ||||||
|  |             selectAll().orderBy(keyColumn, SortOrder.DESC) | ||||||
|  |         } else { | ||||||
|  |             selectAll() | ||||||
|  |         } | ||||||
|  |         query.asSequence().map { it.asKey to it.asObject }.groupBy { it.first }.mapValues { | ||||||
|  |             it.value.map { it.second } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     override suspend fun getAll(k: Key, reverseLists: Boolean): List<Value> = transaction(database) { | ||||||
|  |         val query = if (reverseLists) { | ||||||
|  |             select { selectById(k) }.orderBy(keyColumn, SortOrder.DESC) | ||||||
|  |         } else { | ||||||
|  |             select { selectById(k) } | ||||||
|  |         } | ||||||
|  |         query.map { | ||||||
|  |             it.asObject | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| @@ -16,6 +16,6 @@ dependencies { | |||||||
| } | } | ||||||
|  |  | ||||||
| java { | java { | ||||||
|     sourceCompatibility = JavaVersion.VERSION_1_8 |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|     targetCompatibility = JavaVersion.VERSION_1_8 |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ plugins { | |||||||
|     id "com.google.devtools.ksp" |     id "com.google.devtools.ksp" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -4,4 +4,4 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|   | |||||||
| @@ -4,4 +4,4 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|   | |||||||
| @@ -4,4 +4,4 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|   | |||||||
| @@ -59,5 +59,3 @@ includes.each { originalName -> | |||||||
|     project.name = projectName |     project.name = projectName | ||||||
|     project.projectDir = new File(projectDirectory) |     project.projectDir = new File(projectDirectory) | ||||||
| } | } | ||||||
|  |  | ||||||
| enableFeaturePreview("VERSION_CATALOGS") |  | ||||||
|   | |||||||
| @@ -28,8 +28,8 @@ application { | |||||||
| } | } | ||||||
|  |  | ||||||
| java { | java { | ||||||
|     sourceCompatibility = JavaVersion.VERSION_1_8 |     sourceCompatibility = JavaVersion.VERSION_17 | ||||||
|     targetCompatibility = JavaVersion.VERSION_1_8 |     targetCompatibility = JavaVersion.VERSION_17 | ||||||
| } | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|   | |||||||
| @@ -10,7 +10,6 @@ kotlin { | |||||||
|         commonMain { |         commonMain { | ||||||
|             dependencies { |             dependencies { | ||||||
|                 api libs.koin |                 api libs.koin | ||||||
|                 api libs.kt.serialization |  | ||||||
|                 api libs.kslog |                 api libs.kslog | ||||||
|                 api libs.kt.reflect |                 api libs.kt.reflect | ||||||
|                 api project(":micro_utils.coroutines") |                 api project(":micro_utils.coroutines") | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ plugins { | |||||||
|     alias(libs.plugins.compose) |     alias(libs.plugins.compose) | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|  |  | ||||||
| kotlin { | kotlin { | ||||||
|     sourceSets { |     sourceSets { | ||||||
|   | |||||||
| @@ -4,4 +4,4 @@ plugins { | |||||||
|     id "com.android.library" |     id "com.android.library" | ||||||
| } | } | ||||||
|  |  | ||||||
| apply from: "$mppProjectWithSerializationPresetPath" | apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user