|
@@ -19,6 +19,8 @@ import eu.kanade.tachiyomi.util.lang.withIOContext
|
|
|
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
|
|
|
import eu.kanade.tachiyomi.util.system.logcat
|
|
|
import kotlinx.coroutines.asCoroutineDispatcher
|
|
|
+import kotlinx.coroutines.async
|
|
|
+import kotlinx.coroutines.awaitAll
|
|
|
import kotlinx.coroutines.flow.collectLatest
|
|
|
import kotlinx.coroutines.launch
|
|
|
import kotlinx.coroutines.withContext
|
|
@@ -133,32 +135,36 @@ abstract class SearchScreenModel<T>(
|
|
|
updateItems(initialItems)
|
|
|
|
|
|
coroutineScope.launch {
|
|
|
- sources.forEach { source ->
|
|
|
- val page = try {
|
|
|
- withContext(coroutineDispatcher) {
|
|
|
- source.fetchSearchManga(1, query, source.getFilterList()).awaitSingle()
|
|
|
+ sources
|
|
|
+ .map { source ->
|
|
|
+ async {
|
|
|
+ try {
|
|
|
+ val page = withContext(coroutineDispatcher) {
|
|
|
+ logcat { "Searching ${source.name}" }
|
|
|
+ source.fetchSearchManga(1, query, source.getFilterList()).awaitSingle()
|
|
|
+ }
|
|
|
+
|
|
|
+ val titles = withIOContext {
|
|
|
+ page.mangas.map {
|
|
|
+ networkToLocalManga.await(it.toDomainManga(source.id))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ getAndUpdateItems { items ->
|
|
|
+ val mutableMap = items.toMutableMap()
|
|
|
+ mutableMap[source] = SearchItemResult.Success(titles)
|
|
|
+ mutableMap.toSortedMap(sortComparator(mutableMap))
|
|
|
+ }
|
|
|
+ } catch (e: Exception) {
|
|
|
+ getAndUpdateItems { items ->
|
|
|
+ val mutableMap = items.toMutableMap()
|
|
|
+ mutableMap[source] = SearchItemResult.Error(throwable = e)
|
|
|
+ mutableMap.toSortedMap(sortComparator(mutableMap))
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- } catch (e: Exception) {
|
|
|
- getAndUpdateItems { items ->
|
|
|
- val mutableMap = items.toMutableMap()
|
|
|
- mutableMap[source] = SearchItemResult.Error(throwable = e)
|
|
|
- mutableMap.toSortedMap(sortComparator(mutableMap))
|
|
|
- }
|
|
|
- return@forEach
|
|
|
- }
|
|
|
-
|
|
|
- val titles = page.mangas.map {
|
|
|
- withIOContext {
|
|
|
- networkToLocalManga.await(it.toDomainManga(source.id))
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- getAndUpdateItems { items ->
|
|
|
- val mutableMap = items.toMutableMap()
|
|
|
- mutableMap[source] = SearchItemResult.Success(titles)
|
|
|
- mutableMap.toSortedMap(sortComparator(mutableMap))
|
|
|
}
|
|
|
- }
|
|
|
+ .awaitAll()
|
|
|
}
|
|
|
}
|
|
|
}
|