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

Commit 730f511a authored by Hasib Prince's avatar Hasib Prince
Browse files

loading hompage data asynchronously

parent 547fbf84
Loading
Loading
Loading
Loading
Loading
+39 −18
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ package foundation.e.apps.api.fused
import android.content.Context
import android.text.format.Formatter
import androidx.lifecycle.LiveData
import androidx.lifecycle.LiveDataScope
import androidx.lifecycle.liveData
import androidx.lifecycle.map
import com.aurora.gplayapi.Constants
@@ -62,8 +61,7 @@ import foundation.e.apps.utils.enums.Type
import foundation.e.apps.utils.enums.isUnFiltered
import foundation.e.apps.utils.modules.PWAManagerModule
import foundation.e.apps.utils.modules.PreferenceManagerModule
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.withTimeout
import kotlinx.coroutines.*
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton
@@ -122,19 +120,37 @@ class FusedAPIImpl @Inject constructor(
    ): LiveData<ResultSupreme<List<FusedHome>>> {

        val list = mutableListOf<FusedHome>()
        var resultGplay: Deferred<ResultSupreme<List<FusedHome>>>? = null
        var resultOpenSource: Deferred<ResultSupreme<List<FusedHome>>>? = null
        var resultPWA: Deferred<ResultSupreme<List<FusedHome>>>? = null

        return liveData {
            coroutineScope {

                if (preferenceManagerModule.isGplaySelected()) {
                loadHomeData(list, Source.GPLAY, authData, this)
                    resultGplay = async { loadHomeData(list, Source.GPLAY, authData) }
                }

                if (preferenceManagerModule.isOpenSourceSelected()) {
                loadHomeData(list, Source.OPEN, authData, this)
                    resultOpenSource = async { loadHomeData(list, Source.OPEN, authData) }
                }

                if (preferenceManagerModule.isPWASelected()) {
                loadHomeData(list, Source.PWA, authData, this)
                    resultPWA = async { loadHomeData(list, Source.PWA, authData) }
                }

                resultGplay?.await()?.let {
                    emit(it)
                }
                resultOpenSource?.await()?.let {
                    emit(it)
                }
                resultPWA?.await()?.let {
                    emit(it)
                }

            }

        }
    }

@@ -142,11 +158,9 @@ class FusedAPIImpl @Inject constructor(
        priorList: MutableList<FusedHome>,
        source: Source,
        authData: AuthData,
        scope: LiveDataScope<ResultSupreme<List<FusedHome>>>,
    ) {
    ): ResultSupreme<List<FusedHome>> {

        val apiStatus = when (source) {

            Source.GPLAY -> runCodeBlockWithTimeout({
                priorList.addAll(fetchGPlayHome(authData))
            })
@@ -173,8 +187,14 @@ class FusedAPIImpl @Inject constructor(
        }

        setHomeErrorMessage(apiStatus, source)

        scope.emit(ResultSupreme.create(apiStatus, priorList))
        priorList.sortByDescending {
            when (it.source) {
                APP_TYPE_OPEN -> 2
                APP_TYPE_PWA -> 1
                else -> 3
            }
        }
        return ResultSupreme.create(apiStatus, priorList)
    }

    private fun setHomeErrorMessage(apiStatus: ResultStatus, source: Source) {
@@ -1190,7 +1210,8 @@ class FusedAPIImpl @Inject constructor(
        query: String,
        authData: AuthData
    ): LiveData<Pair<List<FusedApp>, Boolean>> {
        val searchResults = gPlayAPIRepository.getSearchResults(query, authData, ::replaceWithFDroid)
        val searchResults =
            gPlayAPIRepository.getSearchResults(query, authData, ::replaceWithFDroid)
        return searchResults.map {
            Pair(
                it.first,