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

Verified Commit 1dcf5998 authored by Fahim M. Choudhury's avatar Fahim M. Choudhury
Browse files

refactor: remove authenticated GPlayAPI call while fetching search results

Search query is checked for package name structure and if matches, PlayStore app details is fetched using WebAppDetailsHelper instead of AppDetailsHelper, removing dependency on authenticated request to GPlayAPI.
parent d8244acb
Loading
Loading
Loading
Loading
+15 −13
Original line number Diff line number Diff line
@@ -26,20 +26,19 @@ 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.apps.AppsApi
import foundation.e.apps.data.application.data.Application
import foundation.e.apps.data.enums.ResultStatus
import foundation.e.apps.data.enums.Source
import foundation.e.apps.data.handleNetworkResult
import foundation.e.apps.data.login.exceptions.CleanApkIOException
import foundation.e.apps.data.login.exceptions.GPlayIOException
import foundation.e.apps.data.playstore.PlayStoreRepository
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class SearchRepositoryImpl @Inject constructor(
    private val appsApi: AppsApi,
    private val appSources: AppSourcesContainer,
    private val stores: Stores,
    private val applicationDataManager: ApplicationDataManager
@@ -63,8 +62,11 @@ class SearchRepositoryImpl @Inject constructor(
            exception = CleanApkIOException("Unable to reach CleanAPK API")
        )

        val packageSpecificResults =
        val packageSpecificResults = if (isPackageName(query)) {
            fetchPackageSpecificResult(query).data?.first ?: emptyList()
        } else {
            emptyList()
        }

        val searchResult = mutableListOf<Application>()
        if (stores.isStoreEnabled(Source.OPEN_SOURCE)) {
@@ -95,6 +97,11 @@ class SearchRepositoryImpl @Inject constructor(
        return finalSearchResult
    }

    private fun isPackageName(keyword: String): Boolean {
        val packageNameRegex = ".*\\..*".toRegex() // com.example
        return packageNameRegex.matches(keyword)
    }

    private suspend fun fetchPWASearchResult(
        query: String,
        searchResult: MutableList<Application>,
@@ -166,7 +173,7 @@ class SearchRepositoryImpl @Inject constructor(
    ): SearchResult {
        val packageSpecificResults: MutableList<Application> = mutableListOf()
        var gplayPackageResult: Application? = null
        var cleanapkPackageResult: Application? = null
        var cleanApkPackageResult: Application? = null

        val result = handleNetworkResult {
            if (stores.isStoreEnabled(Source.PLAY_STORE)) {
@@ -174,14 +181,14 @@ class SearchRepositoryImpl @Inject constructor(
            }

            if (stores.isStoreEnabled(Source.OPEN_SOURCE)) {
                cleanapkPackageResult = getCleanApkPackageResult(query)
                cleanApkPackageResult = getCleanApkPackageResult(query)
            }
        }

        /*
         * Currently only show open source package result if exists in both fdroid and gplay.
         */
        cleanapkPackageResult?.let { packageSpecificResults.add(it) } ?: run {
        cleanApkPackageResult?.let { packageSpecificResults.add(it) } ?: run {
            gplayPackageResult?.let { packageSpecificResults.add(it) }
        }

@@ -239,13 +246,8 @@ class SearchRepositoryImpl @Inject constructor(
    private suspend fun getGplayPackageResult(
        query: String,
    ): Application? {
        appsApi.getApplicationDetails(query, query, Source.PLAY_STORE).let {
            if (it.second == ResultStatus.OK && it.first.package_name.isNotEmpty()) {
                return it.first
            }
        }

        return null
        val storeRepository = stores.getStore(Source.PLAY_STORE) as? PlayStoreRepository
        return storeRepository?.getAppDetailsWeb(query)
    }

    /*
+0 −1
Original line number Diff line number Diff line
@@ -114,7 +114,6 @@ class SearchRepositoryImplTest {
        )

        searchRepository = SearchRepositoryImpl(
            appsApi,
            appSourcesContainer,
            stores,
            applicationDataManager