diff --git a/app/src/main/java/foundation/e/apps/data/application/search/SearchApiImpl.kt b/app/src/main/java/foundation/e/apps/data/application/search/SearchApiImpl.kt index 0a64ad81c48cc35769014ae2626f20e84402aee0..c7379ff436a1d1623fdfe120b64a845a43c47c7a 100644 --- a/app/src/main/java/foundation/e/apps/data/application/search/SearchApiImpl.kt +++ b/app/src/main/java/foundation/e/apps/data/application/search/SearchApiImpl.kt @@ -337,8 +337,7 @@ class SearchApiImpl @Inject constructor( ) } - val fusedAppList = - searchResults.first.map { app -> replaceWithFDroid(app) }.toMutableList() + val fusedAppList = replaceWithFDroid(searchResults.first).toMutableList() handleLimitedResult(fusedAppList) @@ -366,19 +365,21 @@ class SearchApiImpl @Inject constructor( * This function will replace a GPlay app with F-Droid app if exists, * else will show the GPlay app itself. */ - private suspend fun replaceWithFDroid(gPlayApp: App): Application { - val gPlayFusedApp = gPlayApp.toApplication(context) - val response = appSources.cleanApkAppsRepo.getAppDetails(gPlayApp.packageName) - if (response != null) { - val fdroidApp = getCleanApkPackageResult(gPlayFusedApp.package_name)?.apply { - this.updateSource(context) - isGplayReplaced = true - } + private suspend fun replaceWithFDroid(gPlayApps: List): List { - return fdroidApp ?: gPlayFusedApp - } + if (gPlayApps.isEmpty()) return emptyList() + + val packageNames = gPlayApps.map { it.packageName } + val response = appSources.cleanApkAppsRepo.checkAvailablePackages(packageNames) - return gPlayFusedApp + val availableApps = response.body()?.apps ?: emptyList() + + return gPlayApps.map { gPlayApp -> + availableApps.find { it.package_name == gPlayApp.packageName }?.apply { + isGplayReplaced = true + updateSource(context) + } ?: gPlayApp.toApplication(context) + } } private fun refreshToken() { diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/CleanApkRetrofit.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/CleanApkRetrofit.kt index d6660cd60a019a0d05f5465d526a316fed4be97a..3da3d4014c5d119b0b23b1d3bfb72832fe78f6e8 100644 --- a/app/src/main/java/foundation/e/apps/data/cleanapk/CleanApkRetrofit.kt +++ b/app/src/main/java/foundation/e/apps/data/cleanapk/CleanApkRetrofit.kt @@ -77,6 +77,12 @@ interface CleanApkRetrofit { @Query("page") page: Int = 1, ): Response + @GET("apps?action=list_apps") + suspend fun checkAvailablePackages( + @Query("package_names[]") packages: List, + @Query("source") source: String = "open", + ): Response + @GET("apps?action=download") suspend fun getDownloadInfo( @Query("app_id") id: String, diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/data/search/Search.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/data/search/Search.kt index 41d0b4362fe81345e39c108453e8a9ad43f30543..3bec2357d3e1b36f81e4573afce2ab21937b5a69 100644 --- a/app/src/main/java/foundation/e/apps/data/cleanapk/data/search/Search.kt +++ b/app/src/main/java/foundation/e/apps/data/cleanapk/data/search/Search.kt @@ -23,6 +23,5 @@ import foundation.e.apps.data.application.data.Application data class Search( val apps: List = emptyList(), val numberOfResults: Int = -1, - val pages: Int = -1, val success: Boolean = false ) diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepositoryImpl.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepositoryImpl.kt index fe16ef3a91a4241459a1a7a08b1a3270a0f921a4..e51a82823645d903fa0a85179db5745242cd9e48 100644 --- a/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepositoryImpl.kt +++ b/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkAppsRepositoryImpl.kt @@ -71,6 +71,10 @@ class CleanApkAppsRepositoryImpl( ) } + override suspend fun checkAvailablePackages(packageNames: List): Response { + return cleanApkRetrofit.checkAvailablePackages(packageNames) + } + override suspend fun getAppDetails(packageNameOrId: String): Response { return cleanApkAppDetailsRetrofit.getAppOrPWADetailsByID(packageNameOrId, null, null) } diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkPWARepository.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkPWARepository.kt index 03c43a6ceeb80dbc5167e2948413d4c87f19390a..8e8f84f6aac496bda4c4d5cfe5dc5f4588ee35d9 100644 --- a/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkPWARepository.kt +++ b/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkPWARepository.kt @@ -65,6 +65,10 @@ class CleanApkPWARepository( ) } + override suspend fun checkAvailablePackages(packageNames: List): Response { + return cleanAPKRetrofit.checkAvailablePackages(packageNames) + } + override suspend fun getAppDetails(packageNameOrId: String): Response { return cleanApkAppDetailsRetrofit.getAppOrPWADetailsByID(packageNameOrId, null, null) } diff --git a/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkRepository.kt b/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkRepository.kt index d4ae420c96fb2105ad01b073926ef37530fee575..2a9388f0240dcec8c8923ab72db9c7466a3942ec 100644 --- a/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/cleanapk/repositories/CleanApkRepository.kt @@ -30,4 +30,5 @@ interface CleanApkRepository : StoreRepository { suspend fun getSearchResult(query: String, searchBy: String? = null): Response suspend fun getAppsByCategory(category: String, paginationParameter: Any? = null): Response suspend fun getCategories(): Response + suspend fun checkAvailablePackages(packageNames: List): Response }