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

Verified Commit 7fdf3fa4 authored by Fahim M. Choudhury's avatar Fahim M. Choudhury
Browse files

refactor: delegate search suggestions to store repositories abstraction...

refactor: delegate search suggestions to store repositories abstraction instead of concrete implementation

SearchRepositoryImpl uses StoreRepository abstraction to get search suggestions from and getting rid of AppSourcesContainer dependency.

As CleanApk doesn't provide search suggestions yet, its repositories return empty list.
parent 1dcf5998
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -20,9 +20,11 @@ package foundation.e.apps.data

import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.application.data.Home
import foundation.e.apps.data.application.search.SearchSuggestion

interface StoreRepository {
    suspend fun getHomeScreenData(list: MutableList<Home>): List<Home>
    suspend fun getAppDetails(packageName: String): Application
    suspend fun getSearchResults(pattern: String): List<Application>
    suspend fun getSearchSuggestions(pattern: String): List<SearchSuggestion>
}
+13 −4
Original line number Diff line number Diff line
@@ -22,11 +22,11 @@ package foundation.e.apps.data.application.search
import android.content.Context
import com.aurora.gplayapi.data.models.SearchBundle
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.data.AppSourcesContainer
import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.Stores
import foundation.e.apps.data.application.ApplicationDataManager
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.cleanapk.repositories.CleanApkRepository
import foundation.e.apps.data.enums.ResultStatus
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.handleNetworkResult
@@ -39,7 +39,6 @@ import javax.inject.Singleton

@Singleton
class SearchRepositoryImpl @Inject constructor(
    private val appSources: AppSourcesContainer,
    private val stores: Stores,
    private val applicationDataManager: ApplicationDataManager
) : SearchRepository {
@@ -273,7 +272,11 @@ class SearchRepositoryImpl @Inject constructor(
    override suspend fun getSearchSuggestions(query: String): List<SearchSuggestion> {
        var searchSuggestions = listOf<SearchSuggestion>()
        handleNetworkResult {
            searchSuggestions = appSources.gplayRepo.getSearchSuggestions(query)
            searchSuggestions = stores.getStores()
                .map { it.value }
                .flatMap { storeRepository ->
                    storeRepository.getSearchSuggestions(query)
                }
        }

        return searchSuggestions
@@ -335,7 +338,13 @@ class SearchRepositoryImpl @Inject constructor(
            if (gPlayApps.isEmpty()) return emptyList()

            val packageNames = gPlayApps.map { it.package_name }
            val response = appSources.cleanApkAppsRepo.checkAvailablePackages(packageNames)
            val storeRepository = stores.getStore(Source.OPEN_SOURCE)

            if (storeRepository !is CleanApkRepository) {
                return gPlayApps
            }

            val response = storeRepository.checkAvailablePackages(packageNames)

            val availableApps = response.body()?.apps ?: emptyList()

+5 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import foundation.e.apps.data.application.ApplicationRepository
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.application.data.Home
import foundation.e.apps.data.application.search.SearchRepository
import foundation.e.apps.data.application.search.SearchSuggestion
import foundation.e.apps.data.cleanapk.CleanApkDownloadInfoFetcher
import foundation.e.apps.data.cleanapk.CleanApkRetrofit
import foundation.e.apps.data.cleanapk.CleanApkSearchHelper
@@ -99,6 +100,10 @@ class CleanApkAppsRepository @Inject constructor(
        )
    }

    override suspend fun getSearchSuggestions(pattern: String): List<SearchSuggestion> {
        return emptyList() // Not supported yet
    }

    override suspend fun getDownloadInfo(idOrPackageName: String, versionCode: Any?): Response<Download> {
        val version = versionCode?.let { it as String }
        return cleanApkRetrofit.getDownloadInfo(idOrPackageName, version, null)
+5 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.data.application.ApplicationRepository
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.application.data.Home
import foundation.e.apps.data.application.search.SearchSuggestion
import foundation.e.apps.data.cleanapk.CleanApkRetrofit
import foundation.e.apps.data.cleanapk.CleanApkSearchHelper
import foundation.e.apps.data.cleanapk.data.categories.Categories
@@ -96,4 +97,8 @@ class CleanApkPwaRepository @Inject constructor(
            appType = CleanApkRetrofit.APP_TYPE_PWA,
        )
    }

    override suspend fun getSearchSuggestions(pattern: String): List<SearchSuggestion> {
        return emptyList() // Not supported yet
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -104,8 +104,8 @@ class PlayStoreRepository @Inject constructor(
        return searchResult.map { it.toApplication(context) }
    }

    suspend fun getSearchSuggestions(query: String): List<SearchSuggestion> {
        return playStoreSearchHelper.getSearchSuggestions(query)
    override suspend fun getSearchSuggestions(pattern: String): List<SearchSuggestion> {
        return playStoreSearchHelper.getSearchSuggestions(pattern)
    }

    fun getAppsByCategory(category: String, pageUrl: String?): StreamCluster {
Loading