|
|
|
|
@ -2,7 +2,6 @@ package org.koitharu.kotatsu.utils.ext
|
|
|
|
|
|
|
|
|
|
import androidx.lifecycle.LifecycleOwner
|
|
|
|
|
import androidx.lifecycle.LiveData
|
|
|
|
|
import androidx.lifecycle.Observer
|
|
|
|
|
import androidx.lifecycle.liveData
|
|
|
|
|
import kotlinx.coroutines.flow.Flow
|
|
|
|
|
import kotlinx.coroutines.flow.StateFlow
|
|
|
|
|
@ -10,14 +9,6 @@ import org.koitharu.kotatsu.utils.BufferedObserver
|
|
|
|
|
import kotlin.coroutines.CoroutineContext
|
|
|
|
|
import kotlin.coroutines.EmptyCoroutineContext
|
|
|
|
|
|
|
|
|
|
fun <T> LiveData<T?>.observeNotNull(owner: LifecycleOwner, observer: Observer<T>) {
|
|
|
|
|
this.observe(owner) {
|
|
|
|
|
if (it != null) {
|
|
|
|
|
observer.onChanged(it)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun <T> LiveData<T>.requireValue(): T = checkNotNull(value) {
|
|
|
|
|
"LiveData value is null"
|
|
|
|
|
}
|
|
|
|
|
@ -30,17 +21,6 @@ fun <T> LiveData<T>.observeWithPrevious(owner: LifecycleOwner, observer: Buffere
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Deprecated("Use variant with default value")
|
|
|
|
|
fun <T> Flow<T>.asLiveDataDistinct(
|
|
|
|
|
context: CoroutineContext = EmptyCoroutineContext
|
|
|
|
|
): LiveData<T> = liveData(context) {
|
|
|
|
|
collect {
|
|
|
|
|
if (it != latestValue) {
|
|
|
|
|
emit(it)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun <T> StateFlow<T>.asLiveDataDistinct(
|
|
|
|
|
context: CoroutineContext = EmptyCoroutineContext
|
|
|
|
|
): LiveData<T> = asLiveDataDistinct(context, value)
|
|
|
|
|
@ -48,23 +28,9 @@ fun <T> StateFlow<T>.asLiveDataDistinct(
|
|
|
|
|
fun <T> Flow<T>.asLiveDataDistinct(
|
|
|
|
|
context: CoroutineContext = EmptyCoroutineContext,
|
|
|
|
|
defaultValue: T
|
|
|
|
|
): LiveData<T> = liveData(context, 0L) {
|
|
|
|
|
if (latestValue == null) {
|
|
|
|
|
emit(defaultValue)
|
|
|
|
|
}
|
|
|
|
|
collect {
|
|
|
|
|
if (it != latestValue) {
|
|
|
|
|
emit(it)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun <T> Flow<T>.asLiveDataDistinct(
|
|
|
|
|
context: CoroutineContext = EmptyCoroutineContext,
|
|
|
|
|
defaultValue: suspend () -> T
|
|
|
|
|
): LiveData<T> = liveData(context) {
|
|
|
|
|
if (latestValue == null) {
|
|
|
|
|
emit(defaultValue())
|
|
|
|
|
emit(defaultValue)
|
|
|
|
|
}
|
|
|
|
|
collect {
|
|
|
|
|
if (it != latestValue) {
|
|
|
|
|
|