Skip to content

Commit

Permalink
Exceptions in executeWithTimeoutOrDefault are now correctly handled
Browse files Browse the repository at this point in the history
  • Loading branch information
TommyDL-Infomaniak authored and KevinBoulongne committed Jun 12, 2024
1 parent 7045908 commit 2b07978
Showing 1 changed file with 5 additions and 12 deletions.
17 changes: 5 additions & 12 deletions app/src/main/java/com/infomaniak/mail/utils/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ import com.infomaniak.lib.core.utils.UtilsUi.openUrl
import com.infomaniak.mail.BuildConfig
import com.infomaniak.mail.data.models.Folder.FolderRole
import io.sentry.Sentry
import kotlinx.coroutines.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.withTimeout
import okhttp3.internal.toHexString
import java.nio.charset.StandardCharsets

Expand Down Expand Up @@ -66,24 +68,15 @@ object Utils {
suspend fun <T> executeWithTimeoutOrDefault(
timeout: Long,
defaultValue: T,
block: CoroutineScope.() -> T,
block: suspend CoroutineScope.() -> T,
onTimeout: (() -> Unit)? = null,
): T = runCatching {
coroutineWithTimeout(timeout, block)
withTimeout(timeout, block)
}.getOrElse {
if (it is TimeoutCancellationException) onTimeout?.invoke() else Sentry.captureException(it)
defaultValue
}

private suspend fun <T> coroutineWithTimeout(
timeout: Long,
block: CoroutineScope.() -> T,
): T = withTimeout(timeout) {
var result: T? = null
CoroutineScope(Dispatchers.Default).launch { result = block() }.join()
result!!
}

fun <T1, T2> waitInitMediator(liveData1: LiveData<T1>, liveData2: LiveData<T2>): MediatorLiveData<Pair<T1, T2>> {

fun areLiveDataInitialized() = liveData1.isInitialized && liveData2.isInitialized
Expand Down

0 comments on commit 2b07978

Please sign in to comment.