Parallelize feed properly
This commit is contained in:
parent
f93cf29df4
commit
a19be83f99
@ -32,6 +32,8 @@ import eu.kanade.tachiyomi.util.system.logcat
|
|||||||
import exh.savedsearches.models.FeedSavedSearch
|
import exh.savedsearches.models.FeedSavedSearch
|
||||||
import exh.savedsearches.models.SavedSearch
|
import exh.savedsearches.models.SavedSearch
|
||||||
import kotlinx.coroutines.asCoroutineDispatcher
|
import kotlinx.coroutines.asCoroutineDispatcher
|
||||||
|
import kotlinx.coroutines.async
|
||||||
|
import kotlinx.coroutines.awaitAll
|
||||||
import kotlinx.coroutines.channels.Channel
|
import kotlinx.coroutines.channels.Channel
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
@ -227,7 +229,8 @@ open class FeedScreenModel(
|
|||||||
*/
|
*/
|
||||||
private fun getFeed(feedSavedSearch: List<FeedItemUI>) {
|
private fun getFeed(feedSavedSearch: List<FeedItemUI>) {
|
||||||
coroutineScope.launch {
|
coroutineScope.launch {
|
||||||
feedSavedSearch.forEach { itemUI ->
|
feedSavedSearch.map { itemUI ->
|
||||||
|
async {
|
||||||
val page = try {
|
val page = try {
|
||||||
if (itemUI.source != null) {
|
if (itemUI.source != null) {
|
||||||
withContext(coroutineDispatcher) {
|
withContext(coroutineDispatcher) {
|
||||||
@ -248,13 +251,13 @@ open class FeedScreenModel(
|
|||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
val result = itemUI.copy(
|
val result = withIOContext {
|
||||||
|
itemUI.copy(
|
||||||
results = page.map {
|
results = page.map {
|
||||||
withIOContext {
|
|
||||||
networkToLocalManga.await(it.toDomainManga(itemUI.source!!.id))
|
networkToLocalManga.await(it.toDomainManga(itemUI.source!!.id))
|
||||||
}
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
|
||||||
mutableState.update { state ->
|
mutableState.update { state ->
|
||||||
state.copy(
|
state.copy(
|
||||||
@ -262,6 +265,7 @@ open class FeedScreenModel(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}.awaitAll()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,8 @@ import eu.kanade.tachiyomi.util.system.logcat
|
|||||||
import exh.savedsearches.models.FeedSavedSearch
|
import exh.savedsearches.models.FeedSavedSearch
|
||||||
import exh.savedsearches.models.SavedSearch
|
import exh.savedsearches.models.SavedSearch
|
||||||
import kotlinx.coroutines.asCoroutineDispatcher
|
import kotlinx.coroutines.asCoroutineDispatcher
|
||||||
|
import kotlinx.coroutines.async
|
||||||
|
import kotlinx.coroutines.awaitAll
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
@ -127,7 +129,8 @@ open class SourceFeedScreenModel(
|
|||||||
*/
|
*/
|
||||||
private fun getFeed(feedSavedSearch: List<SourceFeedUI>) {
|
private fun getFeed(feedSavedSearch: List<SourceFeedUI>) {
|
||||||
coroutineScope.launch {
|
coroutineScope.launch {
|
||||||
feedSavedSearch.forEach { sourceFeed ->
|
feedSavedSearch.map { sourceFeed ->
|
||||||
|
async {
|
||||||
val page = try {
|
val page = try {
|
||||||
withContext(coroutineDispatcher) {
|
withContext(coroutineDispatcher) {
|
||||||
when (sourceFeed) {
|
when (sourceFeed) {
|
||||||
@ -144,8 +147,8 @@ open class SourceFeedScreenModel(
|
|||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
val titles = page.map {
|
val titles = withIOContext {
|
||||||
withIOContext {
|
page.map {
|
||||||
networkToLocalManga.await(it.toDomainManga(source.id))
|
networkToLocalManga.await(it.toDomainManga(source.id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -156,6 +159,7 @@ open class SourceFeedScreenModel(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}.awaitAll()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user