mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-12-05 00:10:09 +00:00
Compare commits
No commits in common. "e785a99bd749b2cfd59cecab1d8ac74887ab871d" and "9fb8626d8c8afe63470fd2327c3ae9d90d979b50" have entirely different histories.
e785a99bd7
...
9fb8626d8c
@ -1,12 +1,5 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## 0.11.4
|
|
||||||
|
|
||||||
* `Coroutines`:
|
|
||||||
* `Compose`:
|
|
||||||
* Add extension `StateFlow#asMutableComposeListState` and `StateFlow#asComposeList`
|
|
||||||
* Add extension `StateFlow#asMutableComposeState`/`StateFlow#asComposeState`
|
|
||||||
|
|
||||||
## 0.11.3
|
## 0.11.3
|
||||||
|
|
||||||
* `Ktor`:
|
* `Ktor`:
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
package dev.inmo.micro_utils.coroutines.compose
|
|
||||||
|
|
||||||
import androidx.compose.runtime.*
|
|
||||||
import androidx.compose.runtime.snapshots.SnapshotStateList
|
|
||||||
import dev.inmo.micro_utils.common.applyDiff
|
|
||||||
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
|
||||||
inline fun <reified T> Flow<List<T>>.asMutableComposeListState(
|
|
||||||
scope: CoroutineScope
|
|
||||||
): SnapshotStateList<T> {
|
|
||||||
val state = mutableStateListOf<T>()
|
|
||||||
subscribeSafelyWithoutExceptions(scope) {
|
|
||||||
state.applyDiff(it)
|
|
||||||
}
|
|
||||||
return state
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
|
||||||
inline fun <reified T> Flow<List<T>>.asComposeList(
|
|
||||||
scope: CoroutineScope
|
|
||||||
): List<T> = asMutableComposeListState(scope)
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
package dev.inmo.micro_utils.coroutines.compose
|
|
||||||
|
|
||||||
import androidx.compose.runtime.*
|
|
||||||
import dev.inmo.micro_utils.coroutines.subscribeSafelyWithoutExceptions
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
|
||||||
|
|
||||||
fun <T> Flow<T>.asMutableComposeState(
|
|
||||||
initial: T,
|
|
||||||
scope: CoroutineScope
|
|
||||||
): MutableState<T> {
|
|
||||||
val state = mutableStateOf(initial)
|
|
||||||
subscribeSafelyWithoutExceptions(scope) { state.value = it }
|
|
||||||
return state
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
|
||||||
inline fun <T> StateFlow<T>.asMutableComposeState(
|
|
||||||
scope: CoroutineScope
|
|
||||||
): MutableState<T> = asMutableComposeState(value, scope)
|
|
||||||
|
|
||||||
fun <T> Flow<T>.asComposeState(
|
|
||||||
initial: T,
|
|
||||||
scope: CoroutineScope
|
|
||||||
): State<T> {
|
|
||||||
val state = asMutableComposeState(initial, scope)
|
|
||||||
return derivedStateOf { state.value }
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("NOTHING_TO_INLINE")
|
|
||||||
inline fun <T> StateFlow<T>.asComposeState(
|
|
||||||
scope: CoroutineScope
|
|
||||||
): State<T> = asComposeState(value, scope)
|
|
||||||
|
|
@ -14,5 +14,5 @@ crypto_js_version=4.1.1
|
|||||||
# Project data
|
# Project data
|
||||||
|
|
||||||
group=dev.inmo
|
group=dev.inmo
|
||||||
version=0.11.4
|
version=0.11.3
|
||||||
android_code_version=128
|
android_code_version=127
|
||||||
|
@ -4,10 +4,7 @@ import dev.inmo.micro_utils.common.MPPFile
|
|||||||
import dev.inmo.micro_utils.ktor.common.TemporalFileId
|
import dev.inmo.micro_utils.ktor.common.TemporalFileId
|
||||||
import io.ktor.client.HttpClient
|
import io.ktor.client.HttpClient
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import org.w3c.dom.mediasource.ENDED
|
|
||||||
import org.w3c.dom.mediasource.ReadyState
|
|
||||||
import org.w3c.xhr.*
|
import org.w3c.xhr.*
|
||||||
import org.w3c.xhr.XMLHttpRequest.Companion.DONE
|
|
||||||
|
|
||||||
suspend fun tempUpload(
|
suspend fun tempUpload(
|
||||||
fullTempUploadDraftPath: String,
|
fullTempUploadDraftPath: String,
|
||||||
@ -15,7 +12,7 @@ suspend fun tempUpload(
|
|||||||
onUpload: (Long, Long) -> Unit
|
onUpload: (Long, Long) -> Unit
|
||||||
): TemporalFileId {
|
): TemporalFileId {
|
||||||
val formData = FormData()
|
val formData = FormData()
|
||||||
val answer = CompletableDeferred<TemporalFileId>(currentCoroutineContext().job)
|
val answer = CompletableDeferred<TemporalFileId>()
|
||||||
|
|
||||||
formData.append(
|
formData.append(
|
||||||
"data",
|
"data",
|
||||||
@ -40,15 +37,17 @@ suspend fun tempUpload(
|
|||||||
request.open("POST", fullTempUploadDraftPath, true)
|
request.open("POST", fullTempUploadDraftPath, true)
|
||||||
request.send(formData)
|
request.send(formData)
|
||||||
|
|
||||||
answer.invokeOnCompletion {
|
val handle = currentCoroutineContext().job.invokeOnCompletion {
|
||||||
runCatching {
|
runCatching {
|
||||||
if (request.readyState != DONE) {
|
request.abort()
|
||||||
request.abort()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer.await()
|
return runCatching {
|
||||||
|
answer.await()
|
||||||
|
}.also {
|
||||||
|
handle.dispose()
|
||||||
|
}.getOrThrow()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user