Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Verified Commit 6e8d0806 authored by Fahim M. Choudhury's avatar Fahim M. Choudhury
Browse files

refactor: use Source instead of SearchTabType in domain layer to decide store availability

parent f727d455
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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
@@ -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(
+2 −3
Original line number Diff line number Diff line
@@ -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
@@ -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(
+10 −10
Original line number Diff line number Diff line
@@ -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 {
@@ -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,
+4 −6
Original line number Diff line number Diff line
@@ -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
            }
        }
+2 −2
Original line number Diff line number Diff line
@@ -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