forked from recloudstream/cloudstream
none fix
This commit is contained in:
parent
fbb7046390
commit
710885a3b7
5 changed files with 136 additions and 83 deletions
|
@ -511,6 +511,9 @@ class HomeFragment : Fragment() {
|
||||||
observe(homeViewModel.apiName) { apiName ->
|
observe(homeViewModel.apiName) { apiName ->
|
||||||
currentApiName = apiName
|
currentApiName = apiName
|
||||||
home_api_fab?.text = apiName
|
home_api_fab?.text = apiName
|
||||||
|
(home_master_recycler?.adapter as? HomeParentItemAdapterPreview?)?.setApiName(
|
||||||
|
apiName
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
observe(homeViewModel.page) { data ->
|
observe(homeViewModel.page) { data ->
|
||||||
|
@ -529,6 +532,7 @@ class HomeFragment : Fragment() {
|
||||||
|
|
||||||
home_loading?.isVisible = false
|
home_loading?.isVisible = false
|
||||||
home_loading_error?.isVisible = false
|
home_loading_error?.isVisible = false
|
||||||
|
home_master_recycler?.isVisible = true
|
||||||
//home_loaded?.isVisible = true
|
//home_loaded?.isVisible = true
|
||||||
if (toggleRandomButton) {
|
if (toggleRandomButton) {
|
||||||
//Flatten list
|
//Flatten list
|
||||||
|
@ -569,6 +573,7 @@ class HomeFragment : Fragment() {
|
||||||
|
|
||||||
home_loading?.isVisible = false
|
home_loading?.isVisible = false
|
||||||
home_loading_error?.isVisible = true
|
home_loading_error?.isVisible = true
|
||||||
|
home_master_recycler?.isVisible = false
|
||||||
//home_loaded?.isVisible = false
|
//home_loaded?.isVisible = false
|
||||||
}
|
}
|
||||||
is Resource.Loading -> {
|
is Resource.Loading -> {
|
||||||
|
@ -576,6 +581,7 @@ class HomeFragment : Fragment() {
|
||||||
home_loading_shimmer?.startShimmer()
|
home_loading_shimmer?.startShimmer()
|
||||||
home_loading?.isVisible = true
|
home_loading?.isVisible = true
|
||||||
home_loading_error?.isVisible = false
|
home_loading_error?.isVisible = false
|
||||||
|
home_master_recycler?.isVisible = false
|
||||||
//home_loaded?.isVisible = false
|
//home_loaded?.isVisible = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.lagradost.cloudstream3.ui.home
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.FrameLayout
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import androidx.appcompat.widget.SearchView
|
import androidx.appcompat.widget.SearchView
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
@ -38,6 +39,7 @@ import com.lagradost.cloudstream3.utils.UIHelper.setImage
|
||||||
import kotlinx.android.synthetic.main.activity_main_tv.view.*
|
import kotlinx.android.synthetic.main.activity_main_tv.view.*
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head.view.*
|
import kotlinx.android.synthetic.main.fragment_home_head.view.*
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head.view.home_bookmarked_child_recyclerview
|
import kotlinx.android.synthetic.main.fragment_home_head.view.home_bookmarked_child_recyclerview
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head.view.home_header
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.*
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.*
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_bookmarked_holder
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_bookmarked_holder
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_plan_to_watch_btt
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_plan_to_watch_btt
|
||||||
|
@ -68,6 +70,7 @@ class HomeParentItemAdapterPreview(
|
||||||
private var resumeWatchingData: List<SearchResponse> = listOf()
|
private var resumeWatchingData: List<SearchResponse> = listOf()
|
||||||
private var bookmarkData: Pair<Boolean, List<SearchResponse>> =
|
private var bookmarkData: Pair<Boolean, List<SearchResponse>> =
|
||||||
false to listOf()
|
false to listOf()
|
||||||
|
private var apiName: String = "NONE"
|
||||||
|
|
||||||
val headItems = 1
|
val headItems = 1
|
||||||
|
|
||||||
|
@ -80,8 +83,8 @@ class HomeParentItemAdapterPreview(
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val VIEW_TYPE_HEADER = 4815
|
private const val VIEW_TYPE_HEADER = 2
|
||||||
private const val VIEW_TYPE_ITEM = 1623
|
private const val VIEW_TYPE_ITEM = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setResumeWatchingData(resumeWatching: List<SearchResponse>) {
|
fun setResumeWatchingData(resumeWatching: List<SearchResponse>) {
|
||||||
|
@ -95,6 +98,12 @@ class HomeParentItemAdapterPreview(
|
||||||
//notifyItemChanged(0)
|
//notifyItemChanged(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setApiName(name: String) {
|
||||||
|
apiName = name
|
||||||
|
holder?.updateApiName(name)
|
||||||
|
//notifyItemChanged(0)
|
||||||
|
}
|
||||||
|
|
||||||
fun setBookmarkData(data: Pair<Boolean, List<SearchResponse>>) {
|
fun setBookmarkData(data: Pair<Boolean, List<SearchResponse>>) {
|
||||||
bookmarkData = data
|
bookmarkData = data
|
||||||
holder?.updateBookmarks(data)
|
holder?.updateBookmarks(data)
|
||||||
|
@ -114,6 +123,7 @@ class HomeParentItemAdapterPreview(
|
||||||
holder.updateResume(resumeWatchingData)
|
holder.updateResume(resumeWatchingData)
|
||||||
holder.updateBookmarks(bookmarkData)
|
holder.updateBookmarks(bookmarkData)
|
||||||
holder.setAvailableWatchStatusTypes(availableWatchStatusTypes)
|
holder.setAvailableWatchStatusTypes(availableWatchStatusTypes)
|
||||||
|
holder.updateApiName(apiName)
|
||||||
}
|
}
|
||||||
else -> super.onBindViewHolder(holder, position - 1)
|
else -> super.onBindViewHolder(holder, position - 1)
|
||||||
}
|
}
|
||||||
|
@ -184,7 +194,7 @@ class HomeParentItemAdapterPreview(
|
||||||
) : RecyclerView.ViewHolder(itemView) {
|
) : RecyclerView.ViewHolder(itemView) {
|
||||||
private var previewAdapter: HomeScrollAdapter? = null
|
private var previewAdapter: HomeScrollAdapter? = null
|
||||||
private val previewViewpager: ViewPager2? = itemView.home_preview_viewpager
|
private val previewViewpager: ViewPager2? = itemView.home_preview_viewpager
|
||||||
private val previewHeader: LinearLayout? = itemView.home_preview
|
private val previewHeader: FrameLayout? = itemView.home_preview
|
||||||
private val previewCallback: ViewPager2.OnPageChangeCallback =
|
private val previewCallback: ViewPager2.OnPageChangeCallback =
|
||||||
object : ViewPager2.OnPageChangeCallback() {
|
object : ViewPager2.OnPageChangeCallback() {
|
||||||
override fun onPageSelected(position: Int) {
|
override fun onPageSelected(position: Int) {
|
||||||
|
@ -212,10 +222,6 @@ class HomeParentItemAdapterPreview(
|
||||||
itemView.home_preview_description?.text =
|
itemView.home_preview_description?.text =
|
||||||
this.plot ?: ""
|
this.plot ?: ""
|
||||||
itemView.home_preview_text?.text = this.name
|
itemView.home_preview_text?.text = this.name
|
||||||
itemView.home_preview_change_api?.text = apiName
|
|
||||||
itemView.home_preview_change_api?.setOnClickListener { view ->
|
|
||||||
changeHomePageCallback(view)
|
|
||||||
}
|
|
||||||
itemView.home_preview_tags?.apply {
|
itemView.home_preview_tags?.apply {
|
||||||
removeAllViews()
|
removeAllViews()
|
||||||
tags?.forEach { tag ->
|
tags?.forEach { tag ->
|
||||||
|
@ -366,6 +372,13 @@ class HomeParentItemAdapterPreview(
|
||||||
)
|
)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
itemView.home_preview_change_api?.setOnClickListener { view ->
|
||||||
|
changeHomePageCallback(view)
|
||||||
|
}
|
||||||
|
itemView.home_preview_change_api2?.setOnClickListener { view ->
|
||||||
|
changeHomePageCallback(view)
|
||||||
|
}
|
||||||
|
|
||||||
previewViewpager?.apply {
|
previewViewpager?.apply {
|
||||||
if (!isTvSettings())
|
if (!isTvSettings())
|
||||||
setPageTransformer(HomeScrollTransformer())
|
setPageTransformer(HomeScrollTransformer())
|
||||||
|
@ -538,7 +551,15 @@ class HomeParentItemAdapterPreview(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun updateApiName(name: String) {
|
||||||
|
itemView.home_preview_change_api2?.text = name
|
||||||
|
itemView.home_preview_change_api?.text = name
|
||||||
|
}
|
||||||
|
|
||||||
fun updatePreview(preview: Resource<Pair<Boolean, List<LoadResponse>>>) {
|
fun updatePreview(preview: Resource<Pair<Boolean, List<LoadResponse>>>) {
|
||||||
|
itemView.home_header?.isGone = preview is Resource.Loading
|
||||||
|
itemView.home_preview_change_api2?.isGone = preview is Resource.Success
|
||||||
|
|
||||||
when (preview) {
|
when (preview) {
|
||||||
is Resource.Success -> {
|
is Resource.Success -> {
|
||||||
previewHeader?.isVisible = true
|
previewHeader?.isVisible = true
|
||||||
|
@ -570,12 +591,17 @@ class HomeParentItemAdapterPreview(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setAvailableWatchStatusTypes(availableWatchStatusTypes: Pair<Set<WatchType>, Set<WatchType>>) {
|
fun setAvailableWatchStatusTypes(availableWatchStatusTypes: Pair<Set<WatchType>, Set<WatchType>>) {
|
||||||
|
var anyVisible = false
|
||||||
for ((chip, watch) in toggleList) {
|
for ((chip, watch) in toggleList) {
|
||||||
chip?.apply {
|
chip?.apply {
|
||||||
isVisible = availableWatchStatusTypes.second.contains(watch)
|
isVisible = availableWatchStatusTypes.second.contains(watch).also {
|
||||||
|
anyVisible = anyVisible || it
|
||||||
|
}
|
||||||
|
|
||||||
isChecked = availableWatchStatusTypes.first.contains(watch)
|
isChecked = availableWatchStatusTypes.first.contains(watch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
itemView.home_bookmarked_holder?.isVisible = anyVisible
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -265,80 +265,83 @@ class HomeViewModel : ViewModel() {
|
||||||
_apiName.postValue(repo?.name)
|
_apiName.postValue(repo?.name)
|
||||||
_randomItems.postValue(listOf())
|
_randomItems.postValue(listOf())
|
||||||
|
|
||||||
if (repo?.hasMainPage == true) {
|
if (repo?.hasMainPage != true) {
|
||||||
_page.postValue(Resource.Loading())
|
|
||||||
_preview.postValue(Resource.Loading())
|
|
||||||
addJob?.cancel()
|
|
||||||
|
|
||||||
when (val data = repo?.getMainPage(1, null)) {
|
|
||||||
is Resource.Success -> {
|
|
||||||
try {
|
|
||||||
expandable.clear()
|
|
||||||
data.value.forEach { home ->
|
|
||||||
home?.items?.forEach { list ->
|
|
||||||
val filteredList =
|
|
||||||
context?.filterHomePageListByFilmQuality(list) ?: list
|
|
||||||
expandable[list.name] =
|
|
||||||
ExpandableHomepageList(filteredList, 1, home.hasNext)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val items = data.value.mapNotNull { it?.items }.flatten()
|
|
||||||
|
|
||||||
|
|
||||||
previewResponses.clear()
|
|
||||||
previewResponsesAdded.clear()
|
|
||||||
|
|
||||||
//val home = data.value
|
|
||||||
if (items.isNotEmpty()) {
|
|
||||||
val currentList =
|
|
||||||
items.shuffled().filter { it.list.isNotEmpty() }
|
|
||||||
.flatMap { it.list }
|
|
||||||
.distinctBy { it.url }
|
|
||||||
.toList()
|
|
||||||
|
|
||||||
if (currentList.isNotEmpty()) {
|
|
||||||
val randomItems =
|
|
||||||
context?.filterSearchResultByFilmQuality(currentList.shuffled())
|
|
||||||
?: currentList.shuffled()
|
|
||||||
|
|
||||||
updatePreviewResponses(
|
|
||||||
previewResponses,
|
|
||||||
previewResponsesAdded,
|
|
||||||
randomItems,
|
|
||||||
3
|
|
||||||
)
|
|
||||||
|
|
||||||
_randomItems.postValue(randomItems)
|
|
||||||
currentShuffledList = randomItems
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (previewResponses.isEmpty()) {
|
|
||||||
_preview.postValue(
|
|
||||||
Resource.Failure(
|
|
||||||
false,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
"No homepage responses"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
_preview.postValue(Resource.Success((previewResponsesAdded.size < currentShuffledList.size) to previewResponses))
|
|
||||||
}
|
|
||||||
_page.postValue(Resource.Success(expandable))
|
|
||||||
} catch (e: Exception) {
|
|
||||||
_randomItems.postValue(emptyList())
|
|
||||||
logError(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
is Resource.Failure -> {
|
|
||||||
_page.postValue(data!!)
|
|
||||||
}
|
|
||||||
else -> Unit
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_page.postValue(Resource.Success(emptyMap()))
|
_page.postValue(Resource.Success(emptyMap()))
|
||||||
_preview.postValue(Resource.Failure(false, null, null, "No homepage"))
|
_preview.postValue(Resource.Failure(false, null, null, "No homepage"))
|
||||||
|
return@ioSafe
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_page.postValue(Resource.Loading())
|
||||||
|
_preview.postValue(Resource.Loading())
|
||||||
|
addJob?.cancel()
|
||||||
|
|
||||||
|
when (val data = repo?.getMainPage(1, null)) {
|
||||||
|
is Resource.Success -> {
|
||||||
|
try {
|
||||||
|
expandable.clear()
|
||||||
|
data.value.forEach { home ->
|
||||||
|
home?.items?.forEach { list ->
|
||||||
|
val filteredList =
|
||||||
|
context?.filterHomePageListByFilmQuality(list) ?: list
|
||||||
|
expandable[list.name] =
|
||||||
|
ExpandableHomepageList(filteredList, 1, home.hasNext)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val items = data.value.mapNotNull { it?.items }.flatten()
|
||||||
|
|
||||||
|
|
||||||
|
previewResponses.clear()
|
||||||
|
previewResponsesAdded.clear()
|
||||||
|
|
||||||
|
//val home = data.value
|
||||||
|
if (items.isNotEmpty()) {
|
||||||
|
val currentList =
|
||||||
|
items.shuffled().filter { it.list.isNotEmpty() }
|
||||||
|
.flatMap { it.list }
|
||||||
|
.distinctBy { it.url }
|
||||||
|
.toList()
|
||||||
|
|
||||||
|
if (currentList.isNotEmpty()) {
|
||||||
|
val randomItems =
|
||||||
|
context?.filterSearchResultByFilmQuality(currentList.shuffled())
|
||||||
|
?: currentList.shuffled()
|
||||||
|
|
||||||
|
updatePreviewResponses(
|
||||||
|
previewResponses,
|
||||||
|
previewResponsesAdded,
|
||||||
|
randomItems,
|
||||||
|
3
|
||||||
|
)
|
||||||
|
|
||||||
|
_randomItems.postValue(randomItems)
|
||||||
|
currentShuffledList = randomItems
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (previewResponses.isEmpty()) {
|
||||||
|
_preview.postValue(
|
||||||
|
Resource.Failure(
|
||||||
|
false,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
"No homepage responses"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
_preview.postValue(Resource.Success((previewResponsesAdded.size < currentShuffledList.size) to previewResponses))
|
||||||
|
}
|
||||||
|
_page.postValue(Resource.Success(expandable))
|
||||||
|
} catch (e: Exception) {
|
||||||
|
_randomItems.postValue(emptyList())
|
||||||
|
logError(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is Resource.Failure -> {
|
||||||
|
_page.postValue(data!!)
|
||||||
|
_preview.postValue(data!!)
|
||||||
|
}
|
||||||
|
else -> Unit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout android:orientation="vertical"
|
<LinearLayout android:orientation="vertical"
|
||||||
android:id="@+id/home_preview"
|
android:id="@+id/home_header"
|
||||||
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="?attr/primaryBlackBackground"
|
android:background="?attr/primaryBlackBackground"
|
||||||
|
@ -9,6 +10,7 @@
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
|
android:id="@+id/home_preview"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="500dp">
|
android:layout_height="500dp">
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout android:orientation="vertical"
|
<LinearLayout android:orientation="vertical"
|
||||||
android:id="@+id/home_preview"
|
android:id="@+id/home_header"
|
||||||
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="?attr/primaryBlackBackground"
|
android:background="?attr/primaryBlackBackground"
|
||||||
|
@ -9,6 +10,7 @@
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
|
android:id="@+id/home_preview"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
@ -35,7 +37,6 @@
|
||||||
android:minWidth="150dp" />
|
android:minWidth="150dp" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -118,6 +119,21 @@
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_margin="5dp">
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/home_preview_change_api2"
|
||||||
|
style="@style/BlackButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_gravity="top|start"
|
||||||
|
android:layout_marginStart="@dimen/navbar_width"
|
||||||
|
android:backgroundTint="@color/semiWhite"
|
||||||
|
android:minWidth="150dp" />
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/home_watch_holder"
|
android:id="@+id/home_watch_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
Loading…
Reference in a new issue