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 state = successState ?: return
|
||||||
val relatedMangasEnabled = Injekt.get<SourcePreferences>().relatedMangas().get()
|
val relatedMangasEnabled = Injekt.get<SourcePreferences>().relatedMangas().get()
|
||||||
try {
|
try {
|
||||||
withIOContext {
|
if (state.source !is StubSource) {
|
||||||
if (state.source !is StubSource) {
|
if (relatedMangasEnabled) {
|
||||||
if (relatedMangasEnabled) {
|
state.source.getRelatedMangaList(state.manga.toSManga()) { pair, _ ->
|
||||||
state.source.getRelatedMangaList(state.manga.toSManga()) { pair, _ ->
|
/* Push found related mangas into collection */
|
||||||
/* Push found related mangas into collection */
|
val relatedManga = RelatedManga.Success.fromPair(pair) { mangaList ->
|
||||||
val relatedManga = RelatedManga.Success.fromPair(pair) { mangaList ->
|
mangaList.map {
|
||||||
mangaList.map {
|
networkToLocalManga.await(it.toDomainManga(state.source.id))
|
||||||
networkToLocalManga.await(it.toDomainManga(state.source.id))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
updateSuccessState { successState ->
|
updateSuccessState { successState ->
|
||||||
val relatedMangaCollection =
|
val relatedMangaCollection =
|
||||||
successState.relatedMangaCollection
|
successState.relatedMangaCollection
|
||||||
?.toMutableStateList()
|
?.toMutableStateList()
|
||||||
?.apply { add(relatedManga) }
|
?.apply { add(relatedManga) }
|
||||||
?: listOf(relatedManga)
|
?: listOf(relatedManga)
|
||||||
successState.copy(relatedMangaCollection = relatedMangaCollection)
|
successState.copy(relatedMangaCollection = relatedMangaCollection)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -98,24 +98,30 @@ interface CatalogueSource : Source {
|
||||||
pushResults: suspend (relatedManga: Pair<String, List<SManga>>, completed: Boolean) -> Unit,
|
pushResults: suspend (relatedManga: Pair<String, List<SManga>>, completed: Boolean) -> Unit,
|
||||||
) {
|
) {
|
||||||
if (!disableRelatedMangas) {
|
if (!disableRelatedMangas) {
|
||||||
if (supportsRelatedMangas) {
|
coroutineScope {
|
||||||
coroutineScope {
|
if (supportsRelatedMangas) launch { getRelatedMangaListByExtension(manga, pushResults) }
|
||||||
launch {
|
if (!disableRelatedMangasBySearch) launch { getRelatedMangaListBySearch(manga, pushResults) }
|
||||||
runCatching { fetchRelatedMangaList(manga) }
|
|
||||||
.onSuccess { if (it.isNotEmpty()) pushResults(Pair("", it), false) }
|
|
||||||
.onFailure {
|
|
||||||
logcat(LogPriority.ERROR, it) { "## fetchRelatedMangaList: $it" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!disableRelatedMangasBySearch) {
|
|
||||||
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.
|
* 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>
|
* @return a list of <keyword, related mangas>
|
||||||
* @since komikku/extensions-lib 1.6
|
* @since komikku/extensions-lib 1.6
|
||||||
*/
|
*/
|
||||||
private suspend fun getRelatedMangaListBySearch(
|
suspend fun getRelatedMangaListBySearch(
|
||||||
manga: SManga,
|
manga: SManga,
|
||||||
pushResults: suspend (relatedManga: Pair<String, List<SManga>>, completed: Boolean) -> Unit,
|
pushResults: suspend (relatedManga: Pair<String, List<SManga>>, completed: Boolean) -> Unit,
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue