Fix source feed crash on non-catalogue sources
This commit is contained in:
parent
c8446b8d65
commit
9d17b47bdb
@ -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())
|
||||
}
|
||||
}
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user