From 9d17b47bdb87d13eb96fb7e0e6131d9f3d6a74ab Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Sat, 6 May 2023 18:49:22 -0400 Subject: [PATCH] Fix source feed crash on non-catalogue sources --- .../ui/browse/source/feed/SourceFeedScreen.kt | 10 ++--- .../source/feed/SourceFeedScreenModel.kt | 42 +++++++++++-------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt index af60aebcf..8c7821b43 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreen.kt @@ -13,7 +13,7 @@ import eu.kanade.presentation.browse.SourceFeedScreen import eu.kanade.presentation.browse.components.SourceFeedAddDialog import eu.kanade.presentation.browse.components.SourceFeedDeleteDialog import eu.kanade.presentation.util.Screen -import eu.kanade.tachiyomi.source.CatalogueSource +import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen import eu.kanade.tachiyomi.ui.browse.source.browse.SourceFilterDialog import eu.kanade.tachiyomi.ui.manga.MangaScreen @@ -150,19 +150,19 @@ class SourceFeedScreen(val sourceId: Long) : Screen() { navigator.replace(BrowseSourceScreen(sourceId, search, savedSearch = savedSearch, filtersJson = filters)) } - private fun onLatestClick(navigator: Navigator, source: CatalogueSource) { + private fun onLatestClick(navigator: Navigator, source: Source) { navigator.replace(BrowseSourceScreen(source.id, GetRemoteManga.QUERY_LATEST)) } - fun onBrowseClick(navigator: Navigator, source: CatalogueSource) { + fun onBrowseClick(navigator: Navigator, source: Source) { navigator.replace(BrowseSourceScreen(source.id, GetRemoteManga.QUERY_POPULAR)) } - private fun onSavedSearchClick(navigator: Navigator, source: CatalogueSource, savedSearch: SavedSearch) { + private fun onSavedSearchClick(navigator: Navigator, source: Source, savedSearch: SavedSearch) { navigator.replace(BrowseSourceScreen(source.id, listingQuery = null, savedSearch = savedSearch.id)) } - private fun onSearchClick(navigator: Navigator, source: CatalogueSource, query: String) { + private fun onSearchClick(navigator: Navigator, source: Source, query: String) { onBrowseClick(navigator, source.id, query.nullIfBlank()) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreenModel.kt index f69cb4c04..bc26ada82 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/feed/SourceFeedScreenModel.kt @@ -69,7 +69,7 @@ open class SourceFeedScreenModel( private val getExhSavedSearch: GetExhSavedSearch = Injekt.get(), ) : StateScreenModel(SourceFeedState()) { - val source = sourceManager.getOrStub(sourceId) as CatalogueSource + val source = sourceManager.getOrStub(sourceId) val sourceIsMangaDex = sourceId in mangaDexSourceIds @@ -78,24 +78,26 @@ open class SourceFeedScreenModel( val startExpanded by uiPreferences.expandFilters().asState(coroutineScope) init { - setFilters(source.getFilterList()) + if (source is CatalogueSource) { + setFilters(source.getFilterList()) - coroutineScope.launchIO { - val searches = loadSearches() - mutableState.update { it.copy(savedSearches = searches) } - } - - getFeedSavedSearchBySourceId.subscribe(source.id) - .onEach { - val items = getSourcesToGetFeed(it) - mutableState.update { state -> - state.copy( - items = items, - ) - } - getFeed(items) + coroutineScope.launchIO { + val searches = loadSearches() + mutableState.update { it.copy(savedSearches = searches) } } - .launchIn(coroutineScope) + + getFeedSavedSearchBySourceId.subscribe(source.id) + .onEach { + val items = getSourcesToGetFeed(it) + mutableState.update { state -> + state.copy( + items = items, + ) + } + getFeed(items) + } + .launchIn(coroutineScope) + } } fun setFilters(filters: FilterList) { @@ -126,6 +128,7 @@ open class SourceFeedScreenModel( } private suspend fun getSourcesToGetFeed(feedSavedSearch: List): List { + if (source !is CatalogueSource) return emptyList() val savedSearches = getSavedSearchBySourceIdFeed.await(source.id) .associateBy { it.id } @@ -144,6 +147,7 @@ open class SourceFeedScreenModel( * Initiates get manga per feed. */ private fun getFeed(feedSavedSearch: List) { + if (source !is CatalogueSource) return coroutineScope.launch { feedSavedSearch.map { sourceFeed -> async { @@ -204,10 +208,11 @@ open class SourceFeedScreenModel( } } private suspend fun loadSearches() = - getExhSavedSearch.await(source.id, source::getFilterList) + getExhSavedSearch.await(source.id, (source as CatalogueSource)::getFilterList) .sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, EXHSavedSearch::name)) fun onFilter(onBrowseClick: (query: String?, filters: String?) -> Unit) { + if (source !is CatalogueSource) return coroutineScope.launchIO { val allDefault = state.value.filters == source.getFilterList() dismissDialog() @@ -230,6 +235,7 @@ open class SourceFeedScreenModel( onBrowseClick: (query: String?, searchId: Long) -> Unit, onToast: (Int) -> Unit, ) { + if (source !is CatalogueSource) return coroutineScope.launchIO { if (search.filterList == null && state.value.filters.isNotEmpty()) { withUIContext {