|
|
|
|
@ -7,7 +7,9 @@ import kotlinx.coroutines.Dispatchers
|
|
|
|
|
import kotlinx.coroutines.flow.catch
|
|
|
|
|
import kotlinx.coroutines.flow.combine
|
|
|
|
|
import kotlinx.coroutines.flow.map
|
|
|
|
|
import kotlinx.coroutines.withContext
|
|
|
|
|
import org.koitharu.kotatsu.R
|
|
|
|
|
import org.koitharu.kotatsu.base.domain.ReversibleHandle
|
|
|
|
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
|
|
|
|
import org.koitharu.kotatsu.favourites.domain.FavouritesRepository
|
|
|
|
|
import org.koitharu.kotatsu.favourites.ui.list.FavouritesListFragment.Companion.NO_ID
|
|
|
|
|
@ -19,6 +21,7 @@ import org.koitharu.kotatsu.list.ui.model.toErrorState
|
|
|
|
|
import org.koitharu.kotatsu.list.ui.model.toUi
|
|
|
|
|
import org.koitharu.kotatsu.parsers.model.SortOrder
|
|
|
|
|
import org.koitharu.kotatsu.tracker.domain.TrackingRepository
|
|
|
|
|
import org.koitharu.kotatsu.utils.SingleLiveEvent
|
|
|
|
|
import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct
|
|
|
|
|
|
|
|
|
|
class FavouritesListViewModel(
|
|
|
|
|
@ -28,6 +31,9 @@ class FavouritesListViewModel(
|
|
|
|
|
settings: AppSettings,
|
|
|
|
|
) : MangaListViewModel(settings), CountersProvider {
|
|
|
|
|
|
|
|
|
|
var categoryName: String? = null
|
|
|
|
|
private set
|
|
|
|
|
|
|
|
|
|
var sortOrder: LiveData<SortOrder?> = if (categoryId == NO_ID) {
|
|
|
|
|
MutableLiveData(null)
|
|
|
|
|
} else {
|
|
|
|
|
@ -63,6 +69,20 @@ class FavouritesListViewModel(
|
|
|
|
|
emit(listOf(it.toErrorState(canRetry = false)))
|
|
|
|
|
}.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState))
|
|
|
|
|
|
|
|
|
|
val onItemsRemoved = SingleLiveEvent<ReversibleHandle>()
|
|
|
|
|
|
|
|
|
|
init {
|
|
|
|
|
if (categoryId != NO_ID) {
|
|
|
|
|
launchJob {
|
|
|
|
|
categoryName = withContext(Dispatchers.Default) {
|
|
|
|
|
runCatching {
|
|
|
|
|
repository.getCategory(categoryId).title
|
|
|
|
|
}.getOrNull()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override fun onRefresh() = Unit
|
|
|
|
|
|
|
|
|
|
override fun onRetry() = Unit
|
|
|
|
|
@ -71,12 +91,13 @@ class FavouritesListViewModel(
|
|
|
|
|
if (ids.isEmpty()) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
launchJob {
|
|
|
|
|
if (categoryId == NO_ID) {
|
|
|
|
|
launchJob(Dispatchers.Default) {
|
|
|
|
|
val handle = if (categoryId == NO_ID) {
|
|
|
|
|
repository.removeFromFavourites(ids)
|
|
|
|
|
} else {
|
|
|
|
|
repository.removeFromCategory(categoryId, ids)
|
|
|
|
|
}
|
|
|
|
|
onItemsRemoved.postCall(handle)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|