diff --git a/app/src/main/java/org/koitharu/kotatsu/bookmarks/ui/BookmarksViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/bookmarks/ui/BookmarksViewModel.kt index 4c6d48a55..87adf5a1c 100644 --- a/app/src/main/java/org/koitharu/kotatsu/bookmarks/ui/BookmarksViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/bookmarks/ui/BookmarksViewModel.kt @@ -42,7 +42,7 @@ class BookmarksViewModel @Inject constructor( BookmarksGroup(manga, bookmarks) } } - .catch { e -> e.toErrorState(canRetry = false) } + .catch { e -> emit(listOf(e.toErrorState(canRetry = false))) } .asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) fun removeBookmarks(ids: Map>) { diff --git a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/EntityMapping.kt b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/EntityMapping.kt index af938a813..5960cb5e5 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/db/entity/EntityMapping.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/db/entity/EntityMapping.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.core.db.entity +import org.koitharu.kotatsu.core.model.MangaSource import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.util.mapToSet import org.koitharu.kotatsu.parsers.util.toTitleCase @@ -10,7 +11,7 @@ import org.koitharu.kotatsu.utils.ext.longHashCode fun TagEntity.toMangaTag() = MangaTag( key = this.key, title = this.title.toTitleCase(), - source = MangaSource.valueOf(this.source), + source = MangaSource(this.source) ?: MangaSource.DUMMY, ) fun Collection.toMangaTags() = mapToSet(TagEntity::toMangaTag) @@ -19,7 +20,7 @@ fun MangaEntity.toManga(tags: Set) = Manga( id = this.id, title = this.title, altTitle = this.altTitle, - state = this.state?.let { MangaState.valueOf(it) }, + state = this.state?.let { MangaState(it) }, rating = this.rating, isNsfw = this.isNsfw, url = this.url, @@ -27,8 +28,8 @@ fun MangaEntity.toManga(tags: Set) = Manga( coverUrl = this.coverUrl, largeCoverUrl = this.largeCoverUrl, author = this.author, - source = MangaSource.valueOf(this.source), - tags = tags + source = MangaSource(this.source) ?: MangaSource.DUMMY, + tags = tags, ) fun MangaWithTags.toManga() = manga.toManga(tags.toMangaTags()) @@ -54,14 +55,18 @@ fun MangaTag.toEntity() = TagEntity( title = title, key = key, source = source.name, - id = "${key}_${source.name}".longHashCode() + id = "${key}_${source.name}".longHashCode(), ) fun Collection.toEntities() = map(MangaTag::toEntity) // Other -@Suppress("FunctionName") fun SortOrder(name: String, fallback: SortOrder): SortOrder = runCatching { SortOrder.valueOf(name) -}.getOrDefault(fallback) \ No newline at end of file +}.getOrDefault(fallback) + +@Suppress("FunctionName") +fun MangaState(name: String): MangaState? = runCatching { + MangaState.valueOf(name) +}.getOrNull() diff --git a/app/src/main/java/org/koitharu/kotatsu/details/ui/model/ListModelConversionExt.kt b/app/src/main/java/org/koitharu/kotatsu/details/ui/model/ListModelConversionExt.kt index e15669f94..9e57bd7f0 100644 --- a/app/src/main/java/org/koitharu/kotatsu/details/ui/model/ListModelConversionExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/details/ui/model/ListModelConversionExt.kt @@ -28,4 +28,4 @@ fun MangaChapter.toListItem( uploadDateMs = uploadDate, dateFormat = dateFormat, ) -} \ No newline at end of file +} diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/list/FavouritesListViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/list/FavouritesListViewModel.kt index cca1dffe6..85e7a45e6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/list/FavouritesListViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/list/FavouritesListViewModel.kt @@ -26,6 +26,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.asFlowLiveData import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct class FavouritesListViewModel @AssistedInject constructor( @@ -53,7 +54,7 @@ class FavouritesListViewModel @AssistedInject constructor( } else { repository.observeAll(categoryId) }, - createListModeFlow() + createListModeFlow(), ) { list, mode -> when { list.isEmpty() -> listOf( @@ -66,13 +67,13 @@ class FavouritesListViewModel @AssistedInject constructor( R.string.favourites_category_empty }, actionStringRes = 0, - ) + ), ) else -> list.toUi(mode, this) } }.catch { emit(listOf(it.toErrorState(canRetry = false))) - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) init { if (categoryId != NO_ID) { diff --git a/app/src/main/java/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt index cbf38db4b..c9f851f62 100644 --- a/app/src/main/java/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/history/ui/HistoryListViewModel.kt @@ -23,7 +23,7 @@ import org.koitharu.kotatsu.history.domain.PROGRESS_NONE import org.koitharu.kotatsu.list.ui.MangaListViewModel import org.koitharu.kotatsu.list.ui.model.* import org.koitharu.kotatsu.tracker.domain.TrackingRepository -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.utils.ext.daysDiff import org.koitharu.kotatsu.utils.ext.onFirst @@ -60,8 +60,8 @@ class HistoryListViewModel @Inject constructor( }.onFirst { loadingCounter.decrement() }.catch { - it.toErrorState(canRetry = false) - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) + emit(listOf(it.toErrorState(canRetry = false))) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) override fun onRefresh() = Unit diff --git a/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryViewModel.kt index 46e318b1f..140be0638 100644 --- a/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/library/ui/LibraryViewModel.kt @@ -27,7 +27,7 @@ import org.koitharu.kotatsu.list.ui.model.* import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.tracker.domain.TrackingRepository import org.koitharu.kotatsu.utils.SingleLiveEvent -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.utils.ext.daysDiff private const val HISTORY_MAX_SEGMENTS = 2 @@ -49,8 +49,8 @@ class LibraryViewModel @Inject constructor( ) { history, favourites -> mapList(history, favourites) }.catch { e -> - e.toErrorState(canRetry = false) - }.asLiveDataDistinct(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) + emit(listOf(e.toErrorState(canRetry = false))) + }.asFlowLiveData(viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState)) override suspend fun getCounter(mangaId: Long): Int { return trackingRepository.getNewChaptersCount(mangaId) diff --git a/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt index d8d19d243..6b98d88db 100644 --- a/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/suggestions/ui/SuggestionsViewModel.kt @@ -15,7 +15,7 @@ import org.koitharu.kotatsu.list.ui.model.LoadingState import org.koitharu.kotatsu.list.ui.model.toErrorState import org.koitharu.kotatsu.list.ui.model.toUi import org.koitharu.kotatsu.suggestions.domain.SuggestionRepository -import org.koitharu.kotatsu.utils.ext.asLiveDataDistinct +import org.koitharu.kotatsu.utils.asFlowLiveData import org.koitharu.kotatsu.utils.ext.onFirst @HiltViewModel @@ -44,8 +44,8 @@ class SuggestionsViewModel @Inject constructor( }.onFirst { loadingCounter.decrement() }.catch { - it.toErrorState(canRetry = false) - }.asLiveDataDistinct( + emit(listOf(it.toErrorState(canRetry = false))) + }.asFlowLiveData( viewModelScope.coroutineContext + Dispatchers.Default, listOf(LoadingState), )