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

Commit 54ac01f9 authored by Abhishek Aggarwal's avatar Abhishek Aggarwal
Browse files

fix: remove shared mutable messages from result status enums

parent 077be645
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ class ApplicationRepository @Inject constructor(
            storeRepository.getHomeScreenData(list)
        }

        setHomeErrorMessage(result.getResultStatus(), source)
        prefixHomeErrorMessage(result, source)
        list.sortBy {
            when (it.source) {
                APP_TYPE_OPEN -> AppSourceWeight.OPEN_SOURCE.ordinal
@@ -118,17 +118,25 @@ class ApplicationRepository @Inject constructor(
            }
        }

        return ResultSupreme.create(result.getResultStatus(), list)
        return ResultSupreme.create(
            result.getResultStatus(),
            list,
            result.message,
            result.exception,
        )
    }

    private fun setHomeErrorMessage(apiStatus: ResultStatus, source: Source) {
        if (apiStatus != ResultStatus.OK) {
            apiStatus.message = when (source) {
                Source.PLAY_STORE -> ("GPlay home loading error\n" + apiStatus.message).trim()
                Source.SYSTEM_APP -> ("Gitlab home not allowed\n" + apiStatus.message).trim()
                Source.OPEN_SOURCE -> ("Open Source home loading error\n" + apiStatus.message).trim()
                Source.PWA -> ("PWA home loading error\n" + apiStatus.message).trim()
    private fun prefixHomeErrorMessage(result: ResultSupreme<*>, source: Source) {
        if (result.getResultStatus() != ResultStatus.OK) {
            val prefix = when (source) {
                Source.PLAY_STORE -> "GPlay home loading error"
                Source.SYSTEM_APP -> "Gitlab home not allowed"
                Source.OPEN_SOURCE -> "Open Source home loading error"
                Source.PWA -> "PWA home loading error"
            }
            result.message = listOf(prefix, result.message)
                .filter { it.isNotBlank() }
                .joinToString("\n")
        }
    }

+2 −1
Original line number Diff line number Diff line
@@ -9,5 +9,6 @@ data class CategoriesResponse(
    val categories: List<Category>,
    val type: CategoryType,
    val source: Source,
    val status: ResultStatus
    val status: ResultStatus,
    val message: String = "",
)
+40 −20
Original line number Diff line number Diff line
@@ -51,19 +51,25 @@ class CategoryApiImpl @Inject constructor(
        val categoryResponses = mutableListOf<CategoriesResponse>()

        for ((source, _) in enabledStoreRepositoryProvider.awaitEnabledStores()) {
            val categories = mutableListOf<Category>()
            val status = fetchCategoryResult(categories, type, source)
            categoryResponses.add(CategoriesResponse(categories, type, source, status))
            val result = fetchCategoryResult(type, source)
            categoryResponses.add(
                CategoriesResponse(
                    categories = result.categories,
                    type = type,
                    source = source,
                    status = result.status,
                    message = result.message,
                )
            )
        }
        return categoryResponses
    }

    private suspend fun fetchCategoryResult(
        categoriesList: MutableList<Category>,
        type: CategoryType,
        source: Source
    ): ResultStatus {
        val categoryResult = when (source) {
    ): CategoryFetchResult {
        return when (source) {
            Source.OPEN_SOURCE -> {
                fetchCleanApkCategories(type, Source.OPEN_SOURCE)
            }
@@ -76,21 +82,16 @@ class CategoryApiImpl @Inject constructor(
                fetchGplayCategories(type)
            }
        }

        categoryResult.let {
            categoriesList.addAll(it.first)
        }

        return categoryResult.second
    }

    private suspend fun fetchGplayCategories(
        type: CategoryType,
    ): Pair<List<Category>, ResultStatus> {
    ): CategoryFetchResult {
        val playStoreRepository = awaitPlayStoreRepository()
            ?: return Pair(
                emptyList(),
                ResultStatus.UNKNOWN.apply { message = getPlayStoreUnavailableMessage() },
            ?: return CategoryFetchResult(
                categories = emptyList(),
                status = ResultStatus.UNKNOWN,
                message = getPlayStoreUnavailableMessage(),
            )
        val categoryList = mutableListOf<Category>()
        val result = handleNetworkResult {
@@ -107,13 +108,17 @@ class CategoryApiImpl @Inject constructor(
            categoryList
        }

        return Pair(result.data ?: listOf(), result.getResultStatus())
        return CategoryFetchResult(
            categories = result.data ?: listOf(),
            status = result.getResultStatus(),
            message = result.message,
        )
    }

    private suspend fun fetchCleanApkCategories(
        type: CategoryType,
        source: Source
    ): Pair<List<Category>, ResultStatus> {
    ): CategoryFetchResult {
        val categoryList = mutableListOf<Category>()
        var tag: AppTag? = null

@@ -137,7 +142,11 @@ class CategoryApiImpl @Inject constructor(
            }
        }

        return Pair(categoryList, result.getResultStatus())
        return CategoryFetchResult(
            categories = categoryList,
            status = result.getResultStatus(),
            message = result.message,
        )
    }

    private fun getFusedCategoryBasedOnCategoryType(
@@ -227,7 +236,12 @@ class CategoryApiImpl @Inject constructor(
                list.add(it)
            }
        }
        return ResultSupreme.create(result.getResultStatus(), Pair(list, ""))
        return ResultSupreme.create(
            result.getResultStatus(),
            Pair(list, ""),
            result.message,
            result.exception,
        )
    }

    private suspend fun getCleanApkAppsResponse(
@@ -248,4 +262,10 @@ class CategoryApiImpl @Inject constructor(
    private suspend fun awaitPlayStoreRepository(): PlayStoreRepository? {
        return enabledStoreRepositoryProvider.awaitStore(Source.PLAY_STORE) as? PlayStoreRepository
    }

    private data class CategoryFetchResult(
        val categories: List<Category>,
        val status: ResultStatus,
        val message: String = "",
    )
}
+6 −1
Original line number Diff line number Diff line
@@ -234,7 +234,12 @@ class SearchRepositoryImpl @Inject constructor(
            }
        }

        return ResultSupreme.create(result.getResultStatus(), application)
        return ResultSupreme.create(
            result.getResultStatus(),
            application,
            result.message,
            result.exception,
        )
    }

    override suspend fun getSearchSuggestions(query: String): List<SearchSuggestion> {
+2 −2
Original line number Diff line number Diff line
@@ -81,12 +81,12 @@ class CategoriesViewModel @Inject constructor(
                    val error = if (data.source == Source.PLAY_STORE) {
                        GPlayException(
                            data.status == ResultStatus.TIMEOUT,
                            data.status.message.ifBlank { "Data load error" }
                            data.message.ifBlank { "Data load error" }
                        )
                    } else {
                        CleanApkException(
                            data.status == ResultStatus.TIMEOUT,
                            data.status.message.ifBlank { "Data load error" }
                            data.message.ifBlank { "Data load error" }
                        )
                    }
                    exceptions.add(
Loading