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

Commit cf19a70e authored by Hasib Prince's avatar Hasib Prince
Browse files

fixed: placeholder item

parent 9e4fc575
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -108,10 +108,10 @@ class FusedAPIRepository @Inject constructor(private val fusedAPIImpl: FusedApi)
        return fusedAPIImpl.getSearchSuggestions(query)
    }

    fun getSearchResults(
    suspend fun getSearchResults(
        query: String,
        authData: AuthData
    ): LiveData<ResultSupreme<Pair<List<FusedApp>, Boolean>>> {
    ): ResultSupreme<Pair<List<FusedApp>, Boolean>> {
        return fusedAPIImpl.getSearchResults(query, authData)
    }

+2 −2
Original line number Diff line number Diff line
@@ -60,10 +60,10 @@ interface FusedApi {
     * a Boolean signifying if more search results are being loaded.
     * Observe this livedata to display new apps as they are fetched from the network.
     */
    fun getSearchResults(
    suspend fun getSearchResults(
        query: String,
        authData: AuthData
    ): LiveData<ResultSupreme<Pair<List<FusedApp>, Boolean>>>
    ): ResultSupreme<Pair<List<FusedApp>, Boolean>>

    suspend fun getGplaySearchResult(
        query: String,
+965 −970
Original line number Diff line number Diff line
@@ -246,22 +246,21 @@ class FusedApiImpl @Inject constructor(
     * a Boolean signifying if more search results are being loaded.
     * Observe this livedata to display new apps as they are fetched from the network.
     */
    override fun getSearchResults(
    override suspend fun getSearchResults(
        query: String,
        authData: AuthData
    ): LiveData<ResultSupreme<Pair<List<FusedApp>, Boolean>>> {
    ): ResultSupreme<Pair<List<FusedApp>, Boolean>> {
        /*
         * Returning livedata to improve performance, so that we do not have to wait forever
         * for all results to be fetched from network before showing them.
         * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5171
         */
        return liveData {
        val packageSpecificResults = ArrayList<FusedApp>()
        var finalSearchResult: ResultSupreme<Pair<List<FusedApp>, Boolean>> = ResultSupreme.Error()

        fetchPackageSpecificResult(authData, query, packageSpecificResults).let {
            if (it.data?.second != true) { // if there are no data to load
                    emit(it)
                    return@liveData
                return it
            }
        }

@@ -269,22 +268,20 @@ class FusedApiImpl @Inject constructor(
        val cleanApkResults = mutableListOf<FusedApp>()

        if (preferenceManagerModule.isOpenSourceSelected()) {
                fetchOpenSourceSearchResult(
                    this@FusedApiImpl,
            finalSearchResult = fetchOpenSourceSearchResult(
                cleanApkResults,
                query,
                searchResult,
                packageSpecificResults
                ).let { emit(it) }
            )
        }

        if (preferenceManagerModule.isPWASelected()) {
                fetchPWASearchResult(
                    this@FusedApiImpl,
            finalSearchResult = fetchPWASearchResult(
                query,
                searchResult,
                packageSpecificResults
                ).let { emit(it) }
            )
        }

//            if (preferenceManagerModule.isGplaySelected()) {
@@ -296,17 +293,16 @@ class FusedApiImpl @Inject constructor(
//                    ).asLiveData()
//                )
//            }
        }
    return finalSearchResult
}

private suspend fun fetchPWASearchResult(
        fusedAPIImpl: FusedApiImpl,
    query: String,
    searchResult: MutableList<FusedApp>,
    packageSpecificResults: ArrayList<FusedApp>
): ResultSupreme<Pair<List<FusedApp>, Boolean>> {
    val pwaApps: MutableList<FusedApp> = mutableListOf()
        val status = fusedAPIImpl.runCodeWithTimeout({
    val status = runCodeWithTimeout({
        val apps =
            cleanApkPWARepository.getSearchResult(query).body()?.apps
        apps?.apply {
@@ -354,13 +350,12 @@ class FusedApiImpl @Inject constructor(
//    }

private suspend fun fetchOpenSourceSearchResult(
        fusedAPIImpl: FusedApiImpl,
    cleanApkResults: MutableList<FusedApp>,
    query: String,
    searchResult: MutableList<FusedApp>,
    packageSpecificResults: ArrayList<FusedApp>
): ResultSupreme<Pair<List<FusedApp>, Boolean>> {
        val status = fusedAPIImpl.runCodeWithTimeout({
    val status = runCodeWithTimeout({
        cleanApkResults.addAll(getCleanAPKSearchResults(query))
    })

+6 −0
Original line number Diff line number Diff line
@@ -115,6 +115,12 @@ class ApplicationListRVAdapter(
            onPlaceHolderShow?.invoke()
            // Do not process anything else for this entry
            return
        } else {
            val progressBar = holder.binding.placeholderProgressBar
            holder.binding.root.children.forEach {
                it.visibility = if (it != progressBar) View.VISIBLE
                else View.INVISIBLE
            }
        }

        holder.binding.apply {
+31 −32
Original line number Diff line number Diff line
@@ -98,39 +98,33 @@ class SearchViewModel @Inject constructor(
     * without having to wait for all of the apps.
     * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5171
     */
    fun getSearchResults(query: String, authData: AuthData, lifecycleOwner: LifecycleOwner) {
        viewModelScope.launch(Dispatchers.Main) {
            searchResultLiveData.removeObservers(lifecycleOwner)
            searchResultLiveData = fusedAPIRepository.getSearchResults(query, authData)
    private fun getSearchResults(query: String, authData: AuthData, lifecycleOwner: LifecycleOwner) {
        viewModelScope.launch(Dispatchers.IO) {
            val searchResultSupreme = fusedAPIRepository.getSearchResults(query, authData)

            searchResultLiveData.observe(lifecycleOwner) {
                searchResult.postValue(it)
            searchResult.postValue(searchResultSupreme)

                    if (!it.isSuccess()) {
            if (!searchResultSupreme.isSuccess()) {
                val exception =
                    if (authData.aasToken.isNotBlank() || authData.authToken.isNotBlank()) {
                        GPlayException(
                                it.isTimeout(),
                                it.message.ifBlank { "Data load error" }
                            searchResultSupreme.isTimeout(),
                            searchResultSupreme.message.ifBlank { "Data load error" }
                        )
                    } else {
                        CleanApkException(
                                it.isTimeout(),
                                it.message.ifBlank { "Data load error" }
                            searchResultSupreme.isTimeout(),
                            searchResultSupreme.message.ifBlank { "Data load error" }
                        )
                    }

                exceptionsList.add(exception)
                exceptionsLiveData.postValue(exceptionsList)
            }
            }

            withContext(Dispatchers.IO) {
            nextSubBundle = null
            fetchGplayData(query)
        }

        }
    }

    fun loadMore(query: String) {
@@ -150,10 +144,15 @@ class SearchViewModel @Inject constructor(
        val searchResult = searchResult.value
        val currentAppList = searchResult?.data?.first?.toMutableList() ?: mutableListOf()
        currentAppList.removeIf { item -> item.isPlaceHolder }
        currentAppList.plus(gplaySearchResult.first)
        currentAppList.addAll(gplaySearchResult.first)

        val finalResult = if (searchResult is ResultSupreme.Success) {
            ResultSupreme.Success(Pair(currentAppList.toList(), gplaySearchResult.second.isNotEmpty()))
            ResultSupreme.Success(
                Pair(
                    currentAppList.toList(),
                    gplaySearchResult.second.isNotEmpty()
                )
            )
        } else {
            ResultSupreme.Error()
        }