From eef78f827564acd3d0db3c14b95ae4ab4be1f4c2 Mon Sep 17 00:00:00 2001 From: LagradOst Date: Thu, 20 May 2021 22:56:21 +0200 Subject: [PATCH] load episode mirrors --- .../animeproviders/ShiroProvider.kt | 2 +- .../cloudstream3/ui/result/EpisodeAdapter.kt | 15 ++++++-- .../cloudstream3/ui/result/ResultFragment.kt | 37 +++++++++++++++++-- .../cloudstream3/ui/result/ResultViewModel.kt | 18 +++++---- 4 files changed, 57 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ShiroProvider.kt b/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ShiroProvider.kt index 91197a09..240bafd7 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ShiroProvider.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/animeproviders/ShiroProvider.kt @@ -207,7 +207,7 @@ class ShiroProvider : MainAPI() { override fun loadLinks(data: Any, isCasting: Boolean, callback: (ExtractorLink) -> Unit): Boolean { if (data is ShiroEpisodes) { - return Vidstream().getUrl(data._id, isCasting) { + return Vidstream().getUrl(data.videos[0].video_id, isCasting) { callback.invoke(it) } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt index 725a2387..03dd26d1 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/EpisodeAdapter.kt @@ -13,12 +13,16 @@ import com.lagradost.cloudstream3.APIHolder.getApiFromName import com.lagradost.cloudstream3.utils.ExtractorLink import kotlinx.android.synthetic.main.result_episode.view.* +const val ACTION_PLAY_EPISODE = 1 +const val ACTION_RELOAD_EPISODE = 2 + +data class EpisodeClickEvent(val action: Int, val data: ResultEpisode) class EpisodeAdapter( private var activity: Activity, var cardList: ArrayList, val resView: RecyclerView, - val clickCallback: (ResultEpisode) -> Unit + val clickCallback: (EpisodeClickEvent) -> Unit, ) : RecyclerView.Adapter() { @@ -44,7 +48,12 @@ class EpisodeAdapter( } class CardViewHolder - constructor(itemView: View, _activity: Activity, resView: RecyclerView, clickCallback: (ResultEpisode) -> Unit) : RecyclerView.ViewHolder(itemView) { + constructor( + itemView: View, + _activity: Activity, + resView: RecyclerView, + clickCallback: (EpisodeClickEvent) -> Unit, + ) : RecyclerView.ViewHolder(itemView) { val activity = _activity val episode_view_procentage: View = itemView.episode_view_procentage val episode_view_procentage_off: View = itemView.episode_view_procentage_off @@ -68,7 +77,7 @@ class EpisodeAdapter( setWidth(episode_view_procentage_off, 1 - card.watchProgress) episode_play.setOnClickListener { - clickCallback.invoke(card) + clickCallback.invoke(EpisodeClickEvent(ACTION_PLAY_EPISODE, card)) } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index 2707334c..1e76c07b 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -56,6 +56,7 @@ class ResultFragment : Fragment() { } private lateinit var viewModel: ResultViewModel + private var allEpisodes: HashMap> = HashMap() override fun onCreateView( inflater: LayoutInflater, @@ -91,6 +92,10 @@ class ResultFragment : Fragment() { activity?.onBackPressed() } + observe(viewModel.allEpisodes) { + allEpisodes = it + } + observe(viewModel.resultResponse) { data -> when (data) { is Resource.Success -> { @@ -121,13 +126,39 @@ class ResultFragment : Fragment() { } } - val adapter: RecyclerView.Adapter? = activity?.let { + fun playEpisode(data: ArrayList?) { + if (data != null) { + for (d in data) { + println(d) + } + } + } + + val adapter: RecyclerView.Adapter? = activity?.let { it -> EpisodeAdapter( it, ArrayList(), result_episodes, - ) { - viewModel.loadEpisode(it) + ) { episodeClick -> + val id = episodeClick.data.id + when (episodeClick.action) { + ACTION_PLAY_EPISODE -> { + if (allEpisodes.containsKey(id)) { + playEpisode(allEpisodes[id]) + } else { + viewModel.loadEpisode(episodeClick.data) { res -> + if (res is Resource.Success) { + playEpisode(allEpisodes[id]) + } + } + } + } + ACTION_RELOAD_EPISODE -> viewModel.loadEpisode(episodeClick.data) { res -> + if (res is Resource.Success) { + playEpisode(allEpisodes[id]) + } + } + } } } diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel.kt index 495210f6..eddb3278 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultViewModel.kt @@ -24,19 +24,21 @@ class ResultViewModel : ViewModel() { _resultResponse.postValue(data) } - val allEpisodes : MutableLiveData>> = MutableLiveData() - private val _episodeResponse: MutableLiveData> = MutableLiveData() - val episodeResponse: LiveData> get() = _episodeResponse + private val _allEpisodes: MutableLiveData>> = MutableLiveData(HashMap()) + val allEpisodes: LiveData>> get() = _allEpisodes - fun loadEpisode(episode: ResultEpisode) = viewModelScope.launch { - if(allEpisodes.value?.contains(episode.id) == true) { - allEpisodes.value?.remove(episode.id) + fun loadEpisode(episode: ResultEpisode, callback: (Resource) -> Unit) = viewModelScope.launch { + if (_allEpisodes.value?.contains(episode.id) == true) { + _allEpisodes.value?.remove(episode.id) } + val links = ArrayList() val data = safeApiCall { getApiFromName(episode.apiName).loadLinks(episode.data, false) { //TODO IMPLEMENT CASTING - allEpisodes.value?.get(episode.id)?.add(it) + links.add(it) + _allEpisodes.value?.set(episode.id, links) + // _allEpisodes.value?.get(episode.id)?.add(it) } } - _episodeResponse.postValue(data) + callback.invoke(data) } } \ No newline at end of file