Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,8 @@ class QuickSearchFragment : BaseFragment<QuickSearchBinding>(

val homePageList = HomePageList(
ongoing.key,
dataListFiltered
dataListFiltered,
isHorizontalImages = ongoing.value.isHorizontalImages
)

val expandableList = HomeViewModel.ExpandableHomepageList(
Expand Down Expand Up @@ -268,12 +269,15 @@ class QuickSearchFragment : BaseFragment<QuickSearchBinding>(
when (it) {
is Resource.Success -> {
it.value.let { data ->
val adapter =
(binding.quickSearchAutofitResults.adapter as? SearchAdapter)
adapter?.submitList(
context?.filterSearchResultByFilmQuality(data.list) ?: data.list
)
adapter?.hasNext = data.hasNext
val list = context?.filterSearchResultByFilmQuality(data.list) ?: data.list
val isHorizontal = data.isHorizontalImages
binding.quickSearchAutofitResults.spanCount =
context?.getSpanCount(isHorizontal) ?: binding.quickSearchAutofitResults.spanCount
(binding.quickSearchAutofitResults.adapter as? SearchAdapter)?.apply {
this.isHorizontal = isHorizontal
submitList(list)
hasNext = data.hasNext
}
}
searchExitIcon?.alpha = 1f
binding.quickSearchLoadingBar.alpha = 0f
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.app.Dialog
import android.content.Intent
import android.content.res.ColorStateList
import android.content.res.Configuration
import android.graphics.Rect
import android.net.Uri
import android.os.Build
Expand Down Expand Up @@ -1450,12 +1451,29 @@ open class ResultFragmentPhone : BaseFragment<FragmentResultSwipeBinding>(
private fun setRecommendations(rec: List<SearchResponse>?, validApiName: String?) {
val isInvalid = rec.isNullOrEmpty()
val matchAgainst = validApiName ?: rec?.firstOrNull()?.apiName
val isHorizontal = viewModel.isRecommendationsHorizontal()

recommendationBinding?.apply {
root.isGone = isInvalid
if (isHorizontal) {
val orientation = root.context.resources.configuration.orientation
resultRecommendationsList.spanCount =
if (orientation == Configuration.ORIENTATION_LANDSCAPE) 3 else 2
}
val currentAdapter = resultRecommendationsList.adapter as? SearchAdapter
val adapter = if (currentAdapter != null) {
currentAdapter.apply { this.isHorizontal = isHorizontal }
} else {
SearchAdapter(
resultRecommendationsList,
isHorizontal = isHorizontal,
) { callback ->
SearchHelper.handleSearchClickCallback(callback)
}.also { resultRecommendationsList.adapter = it }
}
root.post {
rec?.let { list ->
(resultRecommendationsList.adapter as? SearchAdapter)?.submitList(list.filter { it.apiName == matchAgainst })
adapter.submitList(list.filter { it.apiName == matchAgainst })
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,11 +152,30 @@ class ResultFragmentTv : BaseFragment<FragmentResultTvBinding>(
private fun setRecommendations(rec: List<SearchResponse>?, validApiName: String?) {
currentRecommendations = rec ?: emptyList()
val isInvalid = rec.isNullOrEmpty()
val matchAgainst = validApiName ?: rec?.firstOrNull()?.apiName
val isHorizontal = viewModel.isRecommendationsHorizontal()
binding?.apply {
resultRecommendationsList.isGone = isInvalid
resultRecommendationsHolder.isGone = isInvalid
val matchAgainst = validApiName ?: rec?.firstOrNull()?.apiName
(resultRecommendationsList.adapter as? SearchAdapter)?.submitList(rec?.filter { it.apiName == matchAgainst }
if (isHorizontal) {
resultRecommendationsList.spanCount = 5
} else {
resultRecommendationsList.spanCount = 8
}
val currentAdapter = resultRecommendationsList.adapter as? SearchAdapter
val adapter = if (currentAdapter != null) {
currentAdapter.apply { this.isHorizontal = isHorizontal }
} else {
SearchAdapter(
resultRecommendationsList,
isHorizontal = isHorizontal,
) { callback ->
if (callback.action == SEARCH_ACTION_FOCUSED) {
toggleEpisodes(false)
} else SearchHelper.handleSearchClickCallback(callback)
}.also { resultRecommendationsList.adapter = it }
}
adapter.submitList(rec?.filter { it.apiName == matchAgainst }
?: emptyList())

rec?.map { it.apiName }?.distinct()?.let { apiNames ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ data class ResultData(
val nextAiringDate: UiText?,
val nextAiringEpisode: UiText?,
val plotHeaderText: UiText,
val isHorizontalImages: Boolean = false,
val posterHeaders: Map<String, String>? = null,
)

Expand Down Expand Up @@ -305,6 +306,7 @@ fun LoadResponse.toResultData(repo: APIRepository): ResultData {
backgroundPosterUrl = backgroundPosterUrl,
logoUrl = logoUrl,
title = name,
isHorizontalImages = this.isHorizontalImages,
typeText = txt(
when (type) {
TvType.TvSeries -> R.string.tv_series_singular
Expand Down Expand Up @@ -492,6 +494,10 @@ class ResultViewModel2 : ViewModel() {
MutableLiveData(null)
val page: LiveData<Resource<ResultData>?> = _page

fun isRecommendationsHorizontal(): Boolean {
return (page.value as? Resource.Success)?.value?.isHorizontalImages == true
}

private val _episodes: MutableLiveData<Resource<List<ResultEpisode>>?> =
MutableLiveData(Resource.Loading())
val episodes: LiveData<Resource<List<ResultEpisode>>?> = _episodes
Expand Down Expand Up @@ -2501,8 +2507,8 @@ class ResultViewModel2 : ViewModel() {

// this instantly updates the metadata on the page
private fun postPage(loadResponse: LoadResponse, apiRepository: APIRepository) {
_recommendations.postValue(loadResponse.recommendations ?: emptyList())
_page.postValue(Resource.Success(loadResponse.toResultData(apiRepository)))
_recommendations.postValue(loadResponse.recommendations ?: emptyList())
}

fun hasLoaded() = currentResponse != null
Expand Down Expand Up @@ -2559,6 +2565,7 @@ class ResultViewModel2 : ViewModel() {
override var duration: Int? = null,
override var trailers: MutableList<TrailerData> = mutableListOf(),
override var recommendations: List<SearchResponse>? = null,
override var isHorizontalImages: Boolean = false,
override var actors: List<ActorData>? = null,
override var comingSoon: Boolean = false,
override var syncData: MutableMap<String, String> = mutableMapOf(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class SearchClickCallback(

class SearchAdapter(
private val resView: AutofitRecyclerView,
private val isHorizontal:Boolean = false,
var isHorizontal: Boolean = false,
private val clickCallback: (SearchClickCallback) -> Unit,
) : NoStateAdapter<SearchResponse>(diffCallback = BaseDiffCallback(itemSame = { a, b ->
if (a.id != null || b.id != null) {
Expand All @@ -48,7 +48,7 @@ class SearchAdapter(

var hasNext: Boolean = false

private val coverRatio = if(isHorizontal) 1.8 else 0.68
private val coverRatio get() = if (isHorizontal) 1.8 else 0.68

private val coverHeight: Int get() = (resView.itemWidth / coverRatio).roundToInt()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -469,9 +469,12 @@ class SearchFragment : BaseFragment<FragmentSearchBinding>(
it.value.let { data ->
val list = data.list
if (list.isNotEmpty()) {
(binding.searchAutofitResults.adapter as? SearchAdapter)?.submitList(
list
)
val isHorizontal = data.isHorizontalImages
binding.searchAutofitResults.spanCount = view?.context?.getSpanCount(isHorizontal) ?: currentSpan
(binding.searchAutofitResults.adapter as? SearchAdapter)?.apply {
this.isHorizontal = isHorizontal
submitList(list)
}
}
}
searchExitIcon?.alpha = 1f
Expand Down Expand Up @@ -512,7 +515,8 @@ class SearchFragment : BaseFragment<FragmentSearchBinding>(

val homePageList = HomePageList(
providerName,
dataListFiltered
dataListFiltered,
isHorizontalImages = providerData.isHorizontalImages
)

HomeViewModel.ExpandableHomepageList(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ import kotlinx.coroutines.withContext


data class ExpandableSearchList(
var list: List<SearchResponse>, var currentPage: Int, var hasNext: Boolean,
var list: List<SearchResponse>,
var currentPage: Int,
var hasNext: Boolean,
var isHorizontalImages: Boolean = false,
)

const val SEARCH_HISTORY_KEY = "search_history"
Expand Down Expand Up @@ -163,7 +166,7 @@ class SearchViewModel : ViewModel() {

val item = expandableSearches[name] ?: return null
return HomeViewModel.ExpandableHomepageList(
HomePageList(name, item.list),
HomePageList(name, item.list, isHorizontalImages = item.isHorizontalImages),
item.currentPage,
item.hasNext
)
Expand Down Expand Up @@ -192,7 +195,8 @@ class SearchViewModel : ViewModel() {
index++
}

return ExpandableSearchList(list, 1, false)
val isHorizontal = lists.values.any { it.isHorizontalImages }
return ExpandableSearchList(list, 1, false, isHorizontal)
}

private fun search(
Expand Down Expand Up @@ -237,7 +241,12 @@ class SearchViewModel : ViewModel() {
if (search is Resource.Success) {
val searchValue = search.value
expandableSearches[a.name] =
ExpandableSearchList(searchValue.items, 1, searchValue.hasNext)
ExpandableSearchList(
searchValue.items,
1,
searchValue.hasNext,
searchValue.isHorizontalImages
)
}

_currentSearch.postValue(expandableSearches)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ object UIHelper {

fun Context.getSpanCount(isHorizontal:Boolean=false): Int {
// val compactView = false
val spanCountLandscape = if (isHorizontal) 3 else 6
val spanCountLandscape = if (isHorizontal) 5 else 6
val spanCountPortrait = if (isHorizontal) 2 else 3
val orientation = resources.configuration.orientation

Expand Down
11 changes: 9 additions & 2 deletions library/api/jvm/library.api
Original file line number Diff line number Diff line change
Expand Up @@ -712,12 +712,14 @@ public abstract interface class com/lagradost/cloudstream3/LoadResponse {
public abstract fun getUniqueUrl ()Ljava/lang/String;
public abstract fun getUrl ()Ljava/lang/String;
public abstract fun getYear ()Ljava/lang/Integer;
public fun isHorizontalImages ()Z
public abstract fun setActors (Ljava/util/List;)V
public abstract fun setApiName (Ljava/lang/String;)V
public abstract fun setBackgroundPosterUrl (Ljava/lang/String;)V
public abstract fun setComingSoon (Z)V
public abstract fun setContentRating (Ljava/lang/String;)V
public abstract fun setDuration (Ljava/lang/Integer;)V
public fun setHorizontalImages (Z)V
public abstract fun setLogoUrl (Ljava/lang/String;)V
public abstract fun setName (Ljava/lang/String;)V
public abstract fun setPlot (Ljava/lang/String;)V
Expand Down Expand Up @@ -783,6 +785,8 @@ public final class com/lagradost/cloudstream3/LoadResponse$Companion {

public final class com/lagradost/cloudstream3/LoadResponse$DefaultImpls {
public static fun getRating (Lcom/lagradost/cloudstream3/LoadResponse;)Ljava/lang/Integer;
public static fun isHorizontalImages (Lcom/lagradost/cloudstream3/LoadResponse;)Z
public static fun setHorizontalImages (Lcom/lagradost/cloudstream3/LoadResponse;Z)V
public static fun setRating (Lcom/lagradost/cloudstream3/LoadResponse;Ljava/lang/Integer;)V
}

Expand Down Expand Up @@ -1279,10 +1283,13 @@ public abstract interface class com/lagradost/cloudstream3/SearchResponse {
public final class com/lagradost/cloudstream3/SearchResponseList {
public fun <init> (Ljava/util/List;Z)V
public synthetic fun <init> (Ljava/util/List;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Ljava/util/List;ZZ)V
public synthetic fun <init> (Ljava/util/List;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/util/List;
public final fun component2 ()Z
public final fun copy (Ljava/util/List;Z)Lcom/lagradost/cloudstream3/SearchResponseList;
public static synthetic fun copy$default (Lcom/lagradost/cloudstream3/SearchResponseList;Ljava/util/List;ZILjava/lang/Object;)Lcom/lagradost/cloudstream3/SearchResponseList;
public final fun component3 ()Z
public final fun copy (Ljava/util/List;ZZ)Lcom/lagradost/cloudstream3/SearchResponseList;
public static synthetic fun copy$default (Lcom/lagradost/cloudstream3/SearchResponseList;Ljava/util/List;ZZILjava/lang/Object;)Lcom/lagradost/cloudstream3/SearchResponseList;
public fun equals (Ljava/lang/Object;)Z
public final fun getHasNext ()Z
public final fun getItems ()Ljava/util/List;
Expand Down
Loading
Loading