From 347e29cd90478503248dd33a94487a4001407181 Mon Sep 17 00:00:00 2001 From: Sayantan Roychowdhury Date: Mon, 8 Jan 2024 16:51:41 +0530 Subject: [PATCH 1/7] new API --- .../foundation/e/apps/data/cleanapk/CleanApkRetrofit.kt | 6 ++++++ .../foundation/e/apps/data/cleanapk/data/search/Search.kt | 2 +- .../cleanapk/repositories/CleanApkAppsRepositoryImpl.kt | 4 ++++ .../data/cleanapk/repositories/CleanApkPWARepository.kt | 4 ++++ .../e/apps/data/cleanapk/repositories/CleanApkRepository.kt | 1 + 5 files changed, 16 insertions(+), 1 deletion(-) 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 d6660cd60..3da3d4014 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 41d0b4362..28418687d 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,6 @@ import foundation.e.apps.data.application.data.Application data class Search( val apps: List = emptyList(), val numberOfResults: Int = -1, - val pages: 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 fe16ef3a9..e51a82823 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 03c43a6ce..8e8f84f6a 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 d4ae420c9..2a9388f02 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 } -- GitLab From 1232542787e60b34276bfad424a74f5a09b53f09 Mon Sep 17 00:00:00 2001 From: Sayantan Roychowdhury Date: Mon, 8 Jan 2024 16:52:20 +0530 Subject: [PATCH 2/7] update replacement --- .../data/application/search/SearchApiImpl.kt | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) 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 0a64ad81c..eead0177a 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,29 @@ 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 { + val packageNames = gPlayApps.map { it.packageName } + val response = cleanApkAppsRepository.checkAvailablePackages(packageNames) + + if (!response.isSuccessful) return gPlayApps.map { it.toApplication(context) } + + val availableApps = response.body()?.apps ?: emptyList() + val availableAppsPackageNames = availableApps.map { it.package_name } - return fdroidApp ?: gPlayFusedApp + val replacedList = ArrayList(0) + + gPlayApps.forEach { gPlayApp -> + if (gPlayApp.packageName in availableAppsPackageNames) { + val availableApp = availableApps.first { it.package_name == gPlayApp.packageName } + availableApp.isGplayReplaced = true + availableApp.updateSource(context) + replacedList.add(availableApp) + } else { + replacedList.add(gPlayApp.toApplication(context)) + } } - return gPlayFusedApp + return replacedList } private fun refreshToken() { -- GitLab From ade5242c7ca568e3ed4784f1d62e13f668a5fbfb Mon Sep 17 00:00:00 2001 From: Sayantan Roychowdhury Date: Mon, 8 Jan 2024 16:56:58 +0530 Subject: [PATCH 3/7] update code after rebase --- .../foundation/e/apps/data/application/search/SearchApiImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 eead0177a..821ee5ae8 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 @@ -367,7 +367,7 @@ class SearchApiImpl @Inject constructor( */ private suspend fun replaceWithFDroid(gPlayApps: List): List { val packageNames = gPlayApps.map { it.packageName } - val response = cleanApkAppsRepository.checkAvailablePackages(packageNames) + val response = appSources.cleanApkAppsRepo.checkAvailablePackages(packageNames) if (!response.isSuccessful) return gPlayApps.map { it.toApplication(context) } -- GitLab From ac777d8d3d73147a0b72896e216496fe95b004e5 Mon Sep 17 00:00:00 2001 From: Sayantan Roychowdhury Date: Thu, 11 Jan 2024 13:35:37 +0530 Subject: [PATCH 4/7] fix unit test --- .../foundation/e/apps/data/application/search/SearchApiImpl.kt | 3 +++ 1 file changed, 3 insertions(+) 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 821ee5ae8..c23ea62d8 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 @@ -366,6 +366,9 @@ class SearchApiImpl @Inject constructor( * else will show the GPlay app itself. */ private suspend fun replaceWithFDroid(gPlayApps: List): List { + + if (gPlayApps.isEmpty()) return emptyList() + val packageNames = gPlayApps.map { it.packageName } val response = appSources.cleanApkAppsRepo.checkAvailablePackages(packageNames) -- GitLab From 71eb2a994a760bab89959af886143f410b7d8b0a Mon Sep 17 00:00:00 2001 From: Sayantan Roychowdhury Date: Thu, 11 Jan 2024 14:08:28 +0530 Subject: [PATCH 5/7] remove pages variable --- .../java/foundation/e/apps/data/cleanapk/data/search/Search.kt | 1 - 1 file changed, 1 deletion(-) 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 28418687d..3bec2357d 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 ) -- GitLab From 95024cf38e0121eb5b4500c3c1c28022ea39d1c9 Mon Sep 17 00:00:00 2001 From: Sayantan Roychowdhury Date: Thu, 11 Jan 2024 14:20:03 +0530 Subject: [PATCH 6/7] shorten code --- .../data/application/search/SearchApiImpl.kt | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) 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 c23ea62d8..eb1d84a70 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 @@ -375,22 +375,13 @@ class SearchApiImpl @Inject constructor( if (!response.isSuccessful) return gPlayApps.map { it.toApplication(context) } val availableApps = response.body()?.apps ?: emptyList() - val availableAppsPackageNames = availableApps.map { it.package_name } - - val replacedList = ArrayList(0) - - gPlayApps.forEach { gPlayApp -> - if (gPlayApp.packageName in availableAppsPackageNames) { - val availableApp = availableApps.first { it.package_name == gPlayApp.packageName } - availableApp.isGplayReplaced = true - availableApp.updateSource(context) - replacedList.add(availableApp) - } else { - replacedList.add(gPlayApp.toApplication(context)) - } - } - return replacedList + return gPlayApps.map { gPlayApp -> + availableApps.find { it.package_name == gPlayApp.packageName }?.apply { + isGplayReplaced = true + updateSource(context) + } ?: gPlayApp.toApplication(context) + } } private fun refreshToken() { -- GitLab From d1d88bc86f5452aa7fc0309ce1e818a7e39932fe Mon Sep 17 00:00:00 2001 From: Sayantan Roychowdhury Date: Thu, 11 Jan 2024 14:52:58 +0530 Subject: [PATCH 7/7] remove a return statement --- .../foundation/e/apps/data/application/search/SearchApiImpl.kt | 2 -- 1 file changed, 2 deletions(-) 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 eb1d84a70..c7379ff43 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 @@ -372,8 +372,6 @@ class SearchApiImpl @Inject constructor( val packageNames = gPlayApps.map { it.packageName } val response = appSources.cleanApkAppsRepo.checkAvailablePackages(packageNames) - if (!response.isSuccessful) return gPlayApps.map { it.toApplication(context) } - val availableApps = response.body()?.apps ?: emptyList() return gPlayApps.map { gPlayApp -> -- GitLab