Skip to content

Commit b1be7a3

Browse files
committed
refactor(home): optimize home catalogs loader
1 parent ab437cc commit b1be7a3

File tree

2 files changed

+22
-22
lines changed

2 files changed

+22
-22
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ plugins {
1212
// Version
1313
val versionMajor = 2
1414
val versionMinor = 1
15-
val versionPatch = 1
15+
val versionPatch = 2
1616
val versionBuild = 0
1717
val applicationName: String = libs.versions.applicationName.get()
1818
val _applicationId: String = libs.versions.applicationId.get()

domain/home/src/main/kotlin/com/flixclusive/domain/home/HomeItemsProviderUseCase.kt

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package com.flixclusive.domain.home
22

33
import com.flixclusive.core.network.util.Resource
44
import com.flixclusive.core.ui.common.util.PagingState
5-
import com.flixclusive.core.util.coroutines.AppDispatchers
5+
import com.flixclusive.core.util.coroutines.AppDispatchers.Companion.launchOnIO
6+
import com.flixclusive.core.util.coroutines.AppDispatchers.Companion.withDefaultContext
67
import com.flixclusive.core.util.exception.safeCall
78
import com.flixclusive.data.configuration.AppConfigurationManager
89
import com.flixclusive.data.provider.ProviderManager
@@ -20,11 +21,9 @@ import com.flixclusive.model.provider.ProviderCatalog
2021
import kotlinx.coroutines.flow.MutableStateFlow
2122
import kotlinx.coroutines.flow.asStateFlow
2223
import kotlinx.coroutines.flow.collectLatest
23-
import kotlinx.coroutines.flow.combine
2424
import kotlinx.coroutines.flow.distinctUntilChanged
2525
import kotlinx.coroutines.flow.map
2626
import kotlinx.coroutines.flow.update
27-
import kotlinx.coroutines.launch
2827
import javax.inject.Inject
2928
import javax.inject.Singleton
3029
import kotlin.random.Random
@@ -55,20 +54,23 @@ class HomeItemsProviderUseCase @Inject constructor(
5554
}
5655

5756
operator fun invoke() {
58-
AppDispatchers.Default.scope.launch {
57+
launchOnIO {
5958
_state.update { it.copy(status = Resource.Loading) }
59+
6060
try {
61-
val catalogs = getHomeRecommendations()
61+
val catalogs = withDefaultContext { getHomeRecommendations() }
6262
_state.update {
6363
it.copy(
6464
catalogs = catalogs,
6565
rowItems = List(catalogs.size) { emptyList() },
66-
rowItemsPagingState = catalogs.map { catalog ->
67-
PaginationStateInfo(
68-
canPaginate = catalog.canPaginate,
69-
pagingState = if (!catalog.canPaginate) PagingState.PAGINATING_EXHAUST else PagingState.IDLE,
70-
currentPage = 1
71-
)
66+
rowItemsPagingState = withDefaultContext {
67+
catalogs.map { catalog ->
68+
PaginationStateInfo(
69+
canPaginate = catalog.canPaginate,
70+
pagingState = if (!catalog.canPaginate) PagingState.PAGINATING_EXHAUST else PagingState.IDLE,
71+
currentPage = 1
72+
)
73+
}
7274
}
7375
)
7476
}
@@ -110,17 +112,14 @@ class HomeItemsProviderUseCase @Inject constructor(
110112
it.flatMap { api -> api.catalogs }
111113
}.distinctUntilChanged()
112114

113-
AppDispatchers.Default.scope.launch {
114-
configurationProvider.configurationStatus
115-
.combine(catalogs) { configStatus, catalogs ->
116-
configStatus to catalogs
117-
}
118-
.collectLatest { (configStatus, catalogs) ->
119-
if (configStatus is Resource.Success) {
120-
_state.update { it.copy(providerCatalogs = catalogs) }
121-
invoke()
122-
}
115+
launchOnIO {
116+
catalogs.collectLatest {
117+
_state.update { homeState ->
118+
homeState.copy(providerCatalogs = it)
123119
}
120+
121+
invoke()
122+
}
124123
}
125124
}
126125

@@ -166,6 +165,7 @@ class HomeItemsProviderUseCase @Inject constructor(
166165
}
167166
}
168167
}
168+
169169
private suspend fun getHeaderItem(catalogs: List<Catalog>): Film? {
170170
val traversedCatalogs = mutableSetOf<Int>()
171171
val traversedFilms = mutableSetOf<String>()

0 commit comments

Comments
 (0)