Fix fetching related mangas from extensions was not concurrently
This commit is contained in:
parent
914a7d2aa9
commit
ac86a9a2d9
2 changed files with 37 additions and 33 deletions
|
|
@ -1111,25 +1111,23 @@ class MangaScreenModel(
|
|||
val state = successState ?: return
|
||||
val relatedMangasEnabled = Injekt.get<SourcePreferences>().relatedMangas().get()
|
||||
try {
|
||||
withIOContext {
|
||||
if (state.source !is StubSource) {
|
||||
if (relatedMangasEnabled) {
|
||||
state.source.getRelatedMangaList(state.manga.toSManga()) { pair, _ ->
|
||||
/* Push found related mangas into collection */
|
||||
val relatedManga = RelatedManga.Success.fromPair(pair) { mangaList ->
|
||||
mangaList.map {
|
||||
networkToLocalManga.await(it.toDomainManga(state.source.id))
|
||||
}
|
||||
if (state.source !is StubSource) {
|
||||
if (relatedMangasEnabled) {
|
||||
state.source.getRelatedMangaList(state.manga.toSManga()) { pair, _ ->
|
||||
/* Push found related mangas into collection */
|
||||
val relatedManga = RelatedManga.Success.fromPair(pair) { mangaList ->
|
||||
mangaList.map {
|
||||
networkToLocalManga.await(it.toDomainManga(state.source.id))
|
||||
}
|
||||
}
|
||||
|
||||
updateSuccessState { successState ->
|
||||
val relatedMangaCollection =
|
||||
successState.relatedMangaCollection
|
||||
?.toMutableStateList()
|
||||
?.apply { add(relatedManga) }
|
||||
?: listOf(relatedManga)
|
||||
successState.copy(relatedMangaCollection = relatedMangaCollection)
|
||||
}
|
||||
updateSuccessState { successState ->
|
||||
val relatedMangaCollection =
|
||||
successState.relatedMangaCollection
|
||||
?.toMutableStateList()
|
||||
?.apply { add(relatedManga) }
|
||||
?: listOf(relatedManga)
|
||||
successState.copy(relatedMangaCollection = relatedMangaCollection)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,24 +98,30 @@ interface CatalogueSource : Source {
|
|||
pushResults: suspend (relatedManga: Pair<String, List<SManga>>, completed: Boolean) -> Unit,
|
||||
) {
|
||||
if (!disableRelatedMangas) {
|
||||
if (supportsRelatedMangas) {
|
||||
coroutineScope {
|
||||
launch {
|
||||
runCatching { fetchRelatedMangaList(manga) }
|
||||
.onSuccess { if (it.isNotEmpty()) pushResults(Pair("", it), false) }
|
||||
.onFailure {
|
||||
logcat(LogPriority.ERROR, it) { "## fetchRelatedMangaList: $it" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!disableRelatedMangasBySearch) {
|
||||
getRelatedMangaListBySearch(manga, pushResults)
|
||||
coroutineScope {
|
||||
if (supportsRelatedMangas) launch { getRelatedMangaListByExtension(manga, pushResults) }
|
||||
if (!disableRelatedMangasBySearch) launch { getRelatedMangaListBySearch(manga, pushResults) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get related mangas provided by extension
|
||||
*
|
||||
* @return a list of <keyword, related mangas>
|
||||
* @since komikku/extensions-lib 1.6
|
||||
*/
|
||||
suspend fun getRelatedMangaListByExtension(
|
||||
manga: SManga,
|
||||
pushResults: suspend (relatedManga: Pair<String, List<SManga>>, completed: Boolean) -> Unit,
|
||||
) {
|
||||
runCatching { fetchRelatedMangaList(manga) }
|
||||
.onSuccess { if (it.isNotEmpty()) pushResults(Pair("", it), false) }
|
||||
.onFailure { e ->
|
||||
logcat(LogPriority.ERROR, e) { "## getRelatedMangaListByExtension: $e" }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch related mangas for a manga from source/site.
|
||||
*
|
||||
|
|
@ -152,12 +158,12 @@ interface CatalogueSource : Source {
|
|||
}
|
||||
|
||||
/**
|
||||
* Fetch related mangas by searching for each keywords from manga's title.
|
||||
* Get related mangas by searching for each keywords from manga's title.
|
||||
*
|
||||
* @return a list of <keyword, related mangas>
|
||||
* @since komikku/extensions-lib 1.6
|
||||
*/
|
||||
private suspend fun getRelatedMangaListBySearch(
|
||||
suspend fun getRelatedMangaListBySearch(
|
||||
manga: SManga,
|
||||
pushResults: suspend (relatedManga: Pair<String, List<SManga>>, completed: Boolean) -> Unit,
|
||||
) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue