Fix source feed crash on non-catalogue sources

This commit is contained in:
Jobobby04 2023-05-06 18:49:22 -04:00
parent c8446b8d65
commit 9d17b47bdb
2 changed files with 29 additions and 23 deletions

View File

@ -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())
}
}

View File

@ -69,7 +69,7 @@ open class SourceFeedScreenModel(
private val getExhSavedSearch: GetExhSavedSearch = Injekt.get(),
) : StateScreenModel<SourceFeedState>(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<FeedSavedSearch>): List<SourceFeedUI> {
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<SourceFeedUI>) {
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 {