Fix ClusterStreamBrowse links - uses WebAPI

This commit is contained in:
Rahul Patel
2024-07-13 04:50:39 +05:30
parent 7917163a7c
commit e7d8960997
6 changed files with 34 additions and 57 deletions

View File

@@ -28,6 +28,7 @@ import androidx.navigation.fragment.findNavController
import androidx.viewbinding.ViewBinding
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.Category
import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.store.MobileNavigationDirections
import com.google.gson.Gson
import java.lang.reflect.ParameterizedType
@@ -93,16 +94,15 @@ abstract class BaseFragment<ViewBindingType : ViewBinding> : Fragment() {
title
)
)
} else {
findNavController().navigate(
MobileNavigationDirections.actionGlobalStreamBrowseFragment(
browseUrl,
title
)
)
}
}
fun openStreamBrowseFragment(streamCluster: StreamCluster) {
findNavController().navigate(
MobileNavigationDirections.actionGlobalStreamBrowseFragment(streamCluster)
)
}
fun openScreenshotFragment(app: App, position: Int) {
findNavController().navigate(
MobileNavigationDirections.actionGlobalScreenshotFragment(

View File

@@ -88,7 +88,7 @@ class CategoryBrowseFragment : BaseFragment<FragmentGenericWithToolbarBinding>()
}
override fun onHeaderClicked(streamCluster: StreamCluster) {
openStreamBrowseFragment(streamCluster)
}
override fun onClusterScrolled(streamCluster: StreamCluster) {

View File

@@ -98,7 +98,7 @@ class ForYouFragment : BaseFragment<FragmentForYouBinding>(),
}
override fun onHeaderClicked(streamCluster: StreamCluster) {
openStreamBrowseFragment(streamCluster)
}
override fun onClusterScrolled(streamCluster: StreamCluster) {

View File

@@ -38,38 +38,32 @@ class StreamBrowseFragment : BaseFragment<FragmentGenericWithToolbarBinding>() {
private val args: StreamBrowseFragmentArgs by navArgs()
private val viewModel: StreamBrowseViewModel by viewModels()
private lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener
private lateinit var cluster: StreamCluster
private lateinit var streamCluster: StreamCluster
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
streamCluster = args.cluster
// Toolbar
binding.layoutToolbarAction.apply {
txtTitle.text = args.title
txtTitle.text = streamCluster.clusterTitle
imgActionPrimary.setOnClickListener {
findNavController().navigateUp()
}
}
viewModel.liveData.observe(viewLifecycleOwner) {
if (!::cluster.isInitialized) {
endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() {
override fun onLoadMore(currentPage: Int) {
viewModel.nextCluster()
}
}
binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener)
binding.recycler.addOnScrollListener(object :
EndlessRecyclerOnScrollListener(visibleThreshold = 4) {
override fun onLoadMore(currentPage: Int) {
viewModel.nextCluster()
}
})
cluster = it
updateController(cluster)
binding.layoutToolbarAction.txtTitle.text = it.clusterTitle
viewModel.initCluster(streamCluster)
viewModel.liveData.observe(viewLifecycleOwner) {
updateController(streamCluster)
}
viewModel.getStreamBundle(args.browseUrl)
updateController(null)
}
private fun updateController(streamCluster: StreamCluster?) {

View File

@@ -25,7 +25,8 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.gplayapi.helpers.StreamHelper
import com.aurora.gplayapi.helpers.contracts.StreamContract
import com.aurora.gplayapi.helpers.web.WebStreamHelper
import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.util.Log
@@ -43,31 +44,16 @@ class StreamBrowseViewModel @Inject constructor(
private val authProvider: AuthProvider
) : ViewModel() {
private val streamHelper: StreamHelper = StreamHelper(authProvider.authData)
private val streamHelper: StreamContract = WebStreamHelper()
.using(HttpClient.getPreferredClient(context))
val liveData: MutableLiveData<StreamCluster> = MutableLiveData()
var streamCluster: StreamCluster = StreamCluster()
fun getStreamBundle(browseUrl: String) {
viewModelScope.launch(Dispatchers.IO) {
liveData.postValue(getInitialCluster(browseUrl))
}
}
private lateinit var streamCluster: StreamCluster
private fun getInitialCluster(browseUrl: String): StreamCluster {
val browseResponse = streamHelper.getBrowseStreamResponse(browseUrl)
if (browseResponse.contentsUrl.isNotEmpty())
streamCluster = streamHelper.getNextStreamCluster(browseResponse.contentsUrl)
else if (browseResponse.hasBrowseTab())
streamCluster = streamHelper.getNextStreamCluster(browseResponse.browseTab.listUrl)
streamCluster.apply {
clusterTitle = browseResponse.title
}
return streamCluster
fun initCluster(cluster: StreamCluster) {
streamCluster = cluster
liveData.postValue(streamCluster)
}
fun nextCluster() {
@@ -75,18 +61,18 @@ class StreamBrowseViewModel @Inject constructor(
supervisorScope {
try {
if (streamCluster.hasNext()) {
val newCluster = streamHelper.getNextStreamCluster(
val nextCluster = streamHelper.nextStreamCluster(
streamCluster.clusterNextPageUrl
)
streamCluster.apply {
clusterAppList.addAll(newCluster.clusterAppList)
clusterNextPageUrl = newCluster.clusterNextPageUrl
clusterAppList.addAll(nextCluster.clusterAppList)
clusterNextPageUrl = nextCluster.clusterNextPageUrl
}
liveData.postValue(streamCluster)
} else {
Log.i("End of Bundle")
Log.i("End of Cluster")
}
} catch (_: Exception) {
}