|
|
|
@ -1,13 +1,12 @@
|
|
|
|
package org.tasks.ui
|
|
|
|
package org.tasks.ui
|
|
|
|
|
|
|
|
|
|
|
|
import androidx.lifecycle.*
|
|
|
|
import androidx.lifecycle.*
|
|
|
|
import io.reactivex.disposables.CompositeDisposable
|
|
|
|
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
|
|
|
import timber.log.Timber
|
|
|
|
|
|
|
|
|
|
|
|
abstract class CompletableViewModel<T> : ViewModel() {
|
|
|
|
abstract class CompletableViewModel<T> : ViewModel() {
|
|
|
|
private val data = MutableLiveData<T>()
|
|
|
|
private val data = MutableLiveData<T>()
|
|
|
|
private val error = MutableLiveData<Throwable>()
|
|
|
|
private val error = MutableLiveData<Throwable>()
|
|
|
|
private val disposables = CompositeDisposable()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var inProgress = false
|
|
|
|
var inProgress = false
|
|
|
|
private set
|
|
|
|
private set
|
|
|
|
@ -28,16 +27,15 @@ abstract class CompletableViewModel<T> : ViewModel() {
|
|
|
|
if (!inProgress) {
|
|
|
|
if (!inProgress) {
|
|
|
|
inProgress = true
|
|
|
|
inProgress = true
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
data.value = callable.invoke()
|
|
|
|
data.postValue(callable.invoke())
|
|
|
|
} catch (e: Exception) {
|
|
|
|
} catch (e: Exception) {
|
|
|
|
error.value = e
|
|
|
|
Timber.e(e)
|
|
|
|
|
|
|
|
error.postValue(e)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
inProgress = false
|
|
|
|
inProgress = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
override fun onCleared() = disposables.dispose()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fun removeObserver(owner: LifecycleOwner) {
|
|
|
|
fun removeObserver(owner: LifecycleOwner) {
|
|
|
|
data.removeObservers(owner)
|
|
|
|
data.removeObservers(owner)
|
|
|
|
error.removeObservers(owner)
|
|
|
|
error.removeObservers(owner)
|
|
|
|
|