Moves to using cancellable coroutines to avoid cancelling the parent group all together.
This commit is contained in:
@@ -23,10 +23,10 @@ package com.vitorpamplona.amethyst
|
|||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.coroutineScope
|
import kotlinx.coroutines.coroutineScope
|
||||||
import kotlinx.coroutines.joinAll
|
import kotlinx.coroutines.joinAll
|
||||||
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import kotlinx.coroutines.withTimeoutOrNull
|
import kotlinx.coroutines.withTimeoutOrNull
|
||||||
import kotlin.coroutines.Continuation
|
import kotlin.coroutines.Continuation
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
import kotlin.coroutines.suspendCoroutine
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Launches an async coroutine for each item, runs the
|
* Launches an async coroutine for each item, runs the
|
||||||
@@ -59,7 +59,7 @@ suspend inline fun <T> tryAndWait(
|
|||||||
crossinline asyncFunc: (Continuation<T>) -> Unit,
|
crossinline asyncFunc: (Continuation<T>) -> Unit,
|
||||||
): T? =
|
): T? =
|
||||||
withTimeoutOrNull(timeoutMillis) {
|
withTimeoutOrNull(timeoutMillis) {
|
||||||
suspendCoroutine { continuation ->
|
suspendCancellableCoroutine { continuation ->
|
||||||
asyncFunc(continuation)
|
asyncFunc(continuation)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -35,11 +35,11 @@ import com.vitorpamplona.amethyst.ui.components.util.MediaCompressorFileUtils
|
|||||||
import id.zelory.compressor.Compressor
|
import id.zelory.compressor.Compressor
|
||||||
import id.zelory.compressor.constraint.default
|
import id.zelory.compressor.constraint.default
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import kotlinx.coroutines.withTimeoutOrNull
|
import kotlinx.coroutines.withTimeoutOrNull
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
import kotlin.coroutines.suspendCoroutine
|
|
||||||
|
|
||||||
class MediaCompressorResult(
|
class MediaCompressorResult(
|
||||||
val uri: Uri,
|
val uri: Uri,
|
||||||
@@ -94,7 +94,7 @@ class MediaCompressor {
|
|||||||
|
|
||||||
val result =
|
val result =
|
||||||
withTimeoutOrNull(30000) {
|
withTimeoutOrNull(30000) {
|
||||||
suspendCoroutine { continuation ->
|
suspendCancellableCoroutine { continuation ->
|
||||||
VideoCompressor.start(
|
VideoCompressor.start(
|
||||||
// => This is required
|
// => This is required
|
||||||
context = applicationContext,
|
context = applicationContext,
|
||||||
|
|||||||
@@ -44,9 +44,9 @@ import kotlinx.collections.immutable.ImmutableList
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.joinAll
|
import kotlinx.coroutines.joinAll
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import kotlinx.coroutines.withTimeoutOrNull
|
import kotlinx.coroutines.withTimeoutOrNull
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
import kotlin.coroutines.suspendCoroutine
|
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
open class NewMediaModel : ViewModel() {
|
open class NewMediaModel : ViewModel() {
|
||||||
@@ -138,7 +138,7 @@ open class NewMediaModel : ViewModel() {
|
|||||||
// upload each file as an individual nip95 event.
|
// upload each file as an individual nip95 event.
|
||||||
viewModelScope.launch(Dispatchers.IO) {
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
withTimeoutOrNull(30000) {
|
withTimeoutOrNull(30000) {
|
||||||
suspendCoroutine { continuation ->
|
suspendCancellableCoroutine { continuation ->
|
||||||
account?.createNip95(it.bytes, headerInfo = it.fileHeader, caption, sensitiveContent) { nip95 ->
|
account?.createNip95(it.bytes, headerInfo = it.fileHeader, caption, sensitiveContent) { nip95 ->
|
||||||
account?.consumeAndSendNip95(nip95.first, nip95.second, relayList)
|
account?.consumeAndSendNip95(nip95.first, nip95.second, relayList)
|
||||||
continuation.resume(true)
|
continuation.resume(true)
|
||||||
@@ -153,7 +153,7 @@ open class NewMediaModel : ViewModel() {
|
|||||||
// upload each file as an individual nip95 event.
|
// upload each file as an individual nip95 event.
|
||||||
viewModelScope.launch(Dispatchers.IO) {
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
withTimeoutOrNull(30000) {
|
withTimeoutOrNull(30000) {
|
||||||
suspendCoroutine { continuation ->
|
suspendCancellableCoroutine { continuation ->
|
||||||
account?.sendHeader(
|
account?.sendHeader(
|
||||||
it.url,
|
it.url,
|
||||||
it.magnet,
|
it.magnet,
|
||||||
@@ -174,7 +174,7 @@ open class NewMediaModel : ViewModel() {
|
|||||||
listOf(
|
listOf(
|
||||||
viewModelScope.launch(Dispatchers.IO) {
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
withTimeoutOrNull(30000) {
|
withTimeoutOrNull(30000) {
|
||||||
suspendCoroutine { continuation ->
|
suspendCancellableCoroutine { continuation ->
|
||||||
account?.sendAllAsOnePictureEvent(
|
account?.sendAllAsOnePictureEvent(
|
||||||
imageUrls,
|
imageUrls,
|
||||||
caption,
|
caption,
|
||||||
|
|||||||
Reference in New Issue
Block a user