Loading app/src/main/java/foundation/e/apps/domain/search/CleanApkSearchPagingUseCase.kt +3 −3 Original line number Diff line number Diff line Loading @@ -20,9 +20,9 @@ package foundation.e.apps.domain.search import androidx.paging.PagingData import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import foundation.e.apps.data.search.CleanApkSearchParams import foundation.e.apps.data.search.SearchPagingRepository import foundation.e.apps.ui.search.v2.SearchTabType import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.filterNotNull Loading @@ -37,14 +37,14 @@ class CleanApkSearchPagingUseCase @Inject constructor( @OptIn(ExperimentalCoroutinesApi::class) operator fun invoke( requests: Flow<SearchRequest?>, tab: SearchTabType, source: Source, appSource: String, appType: String, ): Flow<PagingData<Application>> { return requests .filterNotNull() .mapLatest { request -> if (!request.visibleTabs.contains(tab) || request.query.isBlank()) { if (!request.enabledSources.contains(source) || request.query.isBlank()) { flowOf(PagingData.empty<Application>()) } else { searchPagingRepository.cleanApkSearch( Loading app/src/main/java/foundation/e/apps/domain/search/PlayStoreSearchPagingUseCase.kt +2 −3 Original line number Diff line number Diff line Loading @@ -22,8 +22,8 @@ import androidx.paging.PagingData import androidx.paging.map import com.aurora.gplayapi.data.models.App import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import foundation.e.apps.data.search.PlayStorePagingRepository import foundation.e.apps.ui.search.v2.SearchTabType import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.filterNotNull Loading @@ -41,12 +41,11 @@ class PlayStoreSearchPagingUseCase @Inject constructor( operator fun invoke( requests: Flow<SearchRequest?>, pageSize: Int, tab: SearchTabType = SearchTabType.COMMON_APPS, ): Flow<PagingData<Application>> { return requests .filterNotNull() .mapLatest { request -> if (!request.visibleTabs.contains(tab) || request.query.isBlank()) { if (!request.enabledSources.contains(Source.PLAY_STORE) || request.query.isBlank()) { flowOf(PagingData.empty<Application>()) } else { playStorePagingRepository.playStoreSearch( Loading app/src/main/java/foundation/e/apps/domain/search/PrepareSearchSubmissionUseCase.kt +10 −10 Original line number Diff line number Diff line Loading @@ -18,28 +18,28 @@ package foundation.e.apps.domain.search import foundation.e.apps.ui.search.v2.SearchTabType import foundation.e.apps.data.enums.Source import javax.inject.Inject class PrepareSearchSubmissionUseCase @Inject constructor( private val resolveVisibleSearchTabsUseCase: ResolveVisibleSearchTabsUseCase, private val resolveEnabledSearchSourcesUseCase: ResolveEnabledSearchSourcesUseCase, ) { operator fun invoke( submittedQuery: String, selectedTab: SearchTabType?, selectedSource: Source?, currentVersion: Int, ): SearchSubmissionResult { val trimmedQuery = submittedQuery.trim() val visibleTabs = resolveVisibleSearchTabsUseCase() val resolvedSelectedTab = selectedTab?.takeIf { visibleTabs.contains(it) } ?: visibleTabs.firstOrNull() val enabledSources = resolveEnabledSearchSourcesUseCase() val resolvedSelectedSource = selectedSource?.takeIf { enabledSources.contains(it) } ?: enabledSources.firstOrNull() val shouldIncrementVersion = trimmedQuery.isNotEmpty() val nextVersion = if (shouldIncrementVersion) currentVersion + 1 else currentVersion val hasSubmittedSearch = trimmedQuery.isNotEmpty() && visibleTabs.isNotEmpty() val hasSubmittedSearch = trimmedQuery.isNotEmpty() && enabledSources.isNotEmpty() val searchRequest = if (hasSubmittedSearch) { SearchRequest( query = trimmedQuery, visibleTabs = visibleTabs, enabledSources = enabledSources, version = nextVersion, ) } else { Loading @@ -48,8 +48,8 @@ class PrepareSearchSubmissionUseCase @Inject constructor( return SearchSubmissionResult( trimmedQuery = trimmedQuery, visibleTabs = visibleTabs, selectedTab = resolvedSelectedTab, enabledSources = enabledSources, selectedSource = resolvedSelectedSource, hasSubmittedSearch = hasSubmittedSearch, nextVersion = nextVersion, searchRequest = searchRequest, Loading app/src/main/java/foundation/e/apps/domain/search/ResolveVisibleSearchTabsUseCase.kt→app/src/main/java/foundation/e/apps/domain/search/ResolveEnabledSearchSourcesUseCase.kt +4 −6 Original line number Diff line number Diff line Loading @@ -19,21 +19,19 @@ package foundation.e.apps.domain.search import foundation.e.apps.data.Stores import foundation.e.apps.data.enums.Source import foundation.e.apps.data.enums.Source.OPEN_SOURCE import foundation.e.apps.data.enums.Source.PLAY_STORE import foundation.e.apps.data.enums.Source.PWA import foundation.e.apps.ui.search.v2.SearchTabType import javax.inject.Inject class ResolveVisibleSearchTabsUseCase @Inject constructor( class ResolveEnabledSearchSourcesUseCase @Inject constructor( private val stores: Stores, ) { operator fun invoke(): List<SearchTabType> { operator fun invoke(): List<Source> { return stores.getStores().mapNotNull { (key, _) -> when (key) { PLAY_STORE -> SearchTabType.COMMON_APPS OPEN_SOURCE -> SearchTabType.OPEN_SOURCE PWA -> SearchTabType.PWA PLAY_STORE, OPEN_SOURCE, PWA -> key else -> null } } Loading app/src/main/java/foundation/e/apps/domain/search/SearchRequest.kt +2 −2 Original line number Diff line number Diff line Loading @@ -18,10 +18,10 @@ package foundation.e.apps.domain.search import foundation.e.apps.ui.search.v2.SearchTabType import foundation.e.apps.data.enums.Source data class SearchRequest( val query: String, val visibleTabs: List<SearchTabType>, val enabledSources: List<Source>, val version: Int, ) Loading
app/src/main/java/foundation/e/apps/domain/search/CleanApkSearchPagingUseCase.kt +3 −3 Original line number Diff line number Diff line Loading @@ -20,9 +20,9 @@ package foundation.e.apps.domain.search import androidx.paging.PagingData import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import foundation.e.apps.data.search.CleanApkSearchParams import foundation.e.apps.data.search.SearchPagingRepository import foundation.e.apps.ui.search.v2.SearchTabType import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.filterNotNull Loading @@ -37,14 +37,14 @@ class CleanApkSearchPagingUseCase @Inject constructor( @OptIn(ExperimentalCoroutinesApi::class) operator fun invoke( requests: Flow<SearchRequest?>, tab: SearchTabType, source: Source, appSource: String, appType: String, ): Flow<PagingData<Application>> { return requests .filterNotNull() .mapLatest { request -> if (!request.visibleTabs.contains(tab) || request.query.isBlank()) { if (!request.enabledSources.contains(source) || request.query.isBlank()) { flowOf(PagingData.empty<Application>()) } else { searchPagingRepository.cleanApkSearch( Loading
app/src/main/java/foundation/e/apps/domain/search/PlayStoreSearchPagingUseCase.kt +2 −3 Original line number Diff line number Diff line Loading @@ -22,8 +22,8 @@ import androidx.paging.PagingData import androidx.paging.map import com.aurora.gplayapi.data.models.App import foundation.e.apps.data.application.data.Application import foundation.e.apps.data.enums.Source import foundation.e.apps.data.search.PlayStorePagingRepository import foundation.e.apps.ui.search.v2.SearchTabType import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.filterNotNull Loading @@ -41,12 +41,11 @@ class PlayStoreSearchPagingUseCase @Inject constructor( operator fun invoke( requests: Flow<SearchRequest?>, pageSize: Int, tab: SearchTabType = SearchTabType.COMMON_APPS, ): Flow<PagingData<Application>> { return requests .filterNotNull() .mapLatest { request -> if (!request.visibleTabs.contains(tab) || request.query.isBlank()) { if (!request.enabledSources.contains(Source.PLAY_STORE) || request.query.isBlank()) { flowOf(PagingData.empty<Application>()) } else { playStorePagingRepository.playStoreSearch( Loading
app/src/main/java/foundation/e/apps/domain/search/PrepareSearchSubmissionUseCase.kt +10 −10 Original line number Diff line number Diff line Loading @@ -18,28 +18,28 @@ package foundation.e.apps.domain.search import foundation.e.apps.ui.search.v2.SearchTabType import foundation.e.apps.data.enums.Source import javax.inject.Inject class PrepareSearchSubmissionUseCase @Inject constructor( private val resolveVisibleSearchTabsUseCase: ResolveVisibleSearchTabsUseCase, private val resolveEnabledSearchSourcesUseCase: ResolveEnabledSearchSourcesUseCase, ) { operator fun invoke( submittedQuery: String, selectedTab: SearchTabType?, selectedSource: Source?, currentVersion: Int, ): SearchSubmissionResult { val trimmedQuery = submittedQuery.trim() val visibleTabs = resolveVisibleSearchTabsUseCase() val resolvedSelectedTab = selectedTab?.takeIf { visibleTabs.contains(it) } ?: visibleTabs.firstOrNull() val enabledSources = resolveEnabledSearchSourcesUseCase() val resolvedSelectedSource = selectedSource?.takeIf { enabledSources.contains(it) } ?: enabledSources.firstOrNull() val shouldIncrementVersion = trimmedQuery.isNotEmpty() val nextVersion = if (shouldIncrementVersion) currentVersion + 1 else currentVersion val hasSubmittedSearch = trimmedQuery.isNotEmpty() && visibleTabs.isNotEmpty() val hasSubmittedSearch = trimmedQuery.isNotEmpty() && enabledSources.isNotEmpty() val searchRequest = if (hasSubmittedSearch) { SearchRequest( query = trimmedQuery, visibleTabs = visibleTabs, enabledSources = enabledSources, version = nextVersion, ) } else { Loading @@ -48,8 +48,8 @@ class PrepareSearchSubmissionUseCase @Inject constructor( return SearchSubmissionResult( trimmedQuery = trimmedQuery, visibleTabs = visibleTabs, selectedTab = resolvedSelectedTab, enabledSources = enabledSources, selectedSource = resolvedSelectedSource, hasSubmittedSearch = hasSubmittedSearch, nextVersion = nextVersion, searchRequest = searchRequest, Loading
app/src/main/java/foundation/e/apps/domain/search/ResolveVisibleSearchTabsUseCase.kt→app/src/main/java/foundation/e/apps/domain/search/ResolveEnabledSearchSourcesUseCase.kt +4 −6 Original line number Diff line number Diff line Loading @@ -19,21 +19,19 @@ package foundation.e.apps.domain.search import foundation.e.apps.data.Stores import foundation.e.apps.data.enums.Source import foundation.e.apps.data.enums.Source.OPEN_SOURCE import foundation.e.apps.data.enums.Source.PLAY_STORE import foundation.e.apps.data.enums.Source.PWA import foundation.e.apps.ui.search.v2.SearchTabType import javax.inject.Inject class ResolveVisibleSearchTabsUseCase @Inject constructor( class ResolveEnabledSearchSourcesUseCase @Inject constructor( private val stores: Stores, ) { operator fun invoke(): List<SearchTabType> { operator fun invoke(): List<Source> { return stores.getStores().mapNotNull { (key, _) -> when (key) { PLAY_STORE -> SearchTabType.COMMON_APPS OPEN_SOURCE -> SearchTabType.OPEN_SOURCE PWA -> SearchTabType.PWA PLAY_STORE, OPEN_SOURCE, PWA -> key else -> null } } Loading
app/src/main/java/foundation/e/apps/domain/search/SearchRequest.kt +2 −2 Original line number Diff line number Diff line Loading @@ -18,10 +18,10 @@ package foundation.e.apps.domain.search import foundation.e.apps.ui.search.v2.SearchTabType import foundation.e.apps.data.enums.Source data class SearchRequest( val query: String, val visibleTabs: List<SearchTabType>, val enabledSources: List<Source>, val version: Int, )