Gitnuro/src/main/kotlin/com/jetpackduba/gitnuro/ErrorsManager.kt
2022-09-28 01:56:21 +02:00

40 lines
1.2 KiB
Kotlin

package com.jetpackduba.gitnuro
import com.jetpackduba.gitnuro.di.TabScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.withContext
import javax.inject.Inject
@TabScope
class ErrorsManager @Inject constructor() {
private val _errorsList = MutableStateFlow(listOf<Error>())
val errorsList: StateFlow<List<Error>>
get() = _errorsList
private val _error = MutableSharedFlow<Error?>()
val error: SharedFlow<Error?> = _error
suspend fun addError(error: Error) = withContext(Dispatchers.IO) {
_errorsList.value = _errorsList.value.toMutableList().apply {
add(error)
}
_error.emit(error)
println("LastError flow: $error")
}
fun removeError(error: Error) {
_errorsList.value = _errorsList.value.toMutableList().apply {
remove(error)
}
}
}
data class Error(val date: Long, val exception: Exception, val message: String)
fun newErrorNow(exception: Exception, message: String) = Error(System.currentTimeMillis(), exception, message)