mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
Be extra careful and handle null in getItemViewType and other minor cleanup
This commit is contained in:
parent
f3d775ee21
commit
6588f2c33e
2 changed files with 20 additions and 31 deletions
|
@ -26,17 +26,17 @@ const val DOWNLOAD_ACTION_PAUSE_DOWNLOAD = 3
|
||||||
const val DOWNLOAD_ACTION_DOWNLOAD = 4
|
const val DOWNLOAD_ACTION_DOWNLOAD = 4
|
||||||
const val DOWNLOAD_ACTION_LONG_CLICK = 5
|
const val DOWNLOAD_ACTION_LONG_CLICK = 5
|
||||||
|
|
||||||
abstract class VisualDownloadCachedAbstract(
|
abstract class VisualDownloadCached(
|
||||||
open val currentBytes: Long,
|
open val currentBytes: Long,
|
||||||
open val totalBytes: Long,
|
open val totalBytes: Long,
|
||||||
open val data: VideoDownloadHelper.DownloadCachedAbstract
|
open val data: VideoDownloadHelper.DownloadCached
|
||||||
)
|
)
|
||||||
|
|
||||||
data class VisualDownloadChildCached(
|
data class VisualDownloadChildCached(
|
||||||
override val currentBytes: Long,
|
override val currentBytes: Long,
|
||||||
override val totalBytes: Long,
|
override val totalBytes: Long,
|
||||||
override val data: VideoDownloadHelper.DownloadEpisodeCached,
|
override val data: VideoDownloadHelper.DownloadEpisodeCached,
|
||||||
): VisualDownloadCachedAbstract(currentBytes, totalBytes, data)
|
): VisualDownloadCached(currentBytes, totalBytes, data)
|
||||||
|
|
||||||
data class VisualDownloadHeaderCached(
|
data class VisualDownloadHeaderCached(
|
||||||
override val currentBytes: Long,
|
override val currentBytes: Long,
|
||||||
|
@ -45,7 +45,7 @@ data class VisualDownloadHeaderCached(
|
||||||
val child: VideoDownloadHelper.DownloadEpisodeCached?,
|
val child: VideoDownloadHelper.DownloadEpisodeCached?,
|
||||||
val currentOngoingDownloads: Int,
|
val currentOngoingDownloads: Int,
|
||||||
val totalDownloads: Int,
|
val totalDownloads: Int,
|
||||||
): VisualDownloadCachedAbstract(currentBytes, totalBytes, data)
|
): VisualDownloadCached(currentBytes, totalBytes, data)
|
||||||
|
|
||||||
data class DownloadClickEvent(
|
data class DownloadClickEvent(
|
||||||
val action: Int,
|
val action: Int,
|
||||||
|
@ -58,9 +58,9 @@ data class DownloadHeaderClickEvent(
|
||||||
)
|
)
|
||||||
|
|
||||||
class DownloadAdapter(
|
class DownloadAdapter(
|
||||||
var cardList: List<VisualDownloadCachedAbstract>,
|
var cardList: List<VisualDownloadCached>,
|
||||||
private val clickCallback: (DownloadHeaderClickEvent) -> Unit,
|
private val clickCallback: (DownloadHeaderClickEvent) -> Unit,
|
||||||
private val movieClickCallback: (DownloadClickEvent) -> Unit,
|
private val mediaClickCallback: (DownloadClickEvent) -> Unit,
|
||||||
) : RecyclerView.Adapter<DownloadAdapter.DownloadViewHolder>() {
|
) : RecyclerView.Adapter<DownloadAdapter.DownloadViewHolder>() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -71,20 +71,11 @@ class DownloadAdapter(
|
||||||
inner class DownloadViewHolder(
|
inner class DownloadViewHolder(
|
||||||
private val binding: ViewBinding,
|
private val binding: ViewBinding,
|
||||||
private val clickCallback: (DownloadHeaderClickEvent) -> Unit,
|
private val clickCallback: (DownloadHeaderClickEvent) -> Unit,
|
||||||
private val movieClickCallback: (DownloadClickEvent) -> Unit,
|
private val mediaClickCallback: (DownloadClickEvent) -> Unit,
|
||||||
) : RecyclerView.ViewHolder(binding.root) {
|
) : RecyclerView.ViewHolder(binding.root) {
|
||||||
|
|
||||||
/* private val poster: ImageView? = itemView.download_header_poster
|
|
||||||
private val title: TextView = itemView.download_header_title
|
|
||||||
private val extraInfo: TextView = itemView.download_header_info
|
|
||||||
private val holder: CardView = itemView.episode_holder
|
|
||||||
|
|
||||||
private val downloadBar: ContentLoadingProgressBar = itemView.download_header_progress_downloaded
|
|
||||||
private val downloadImage: ImageView = itemView.download_header_episode_download
|
|
||||||
private val normalImage: ImageView = itemView.download_header_goto_child */
|
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
fun bind(card: VisualDownloadCachedAbstract?) {
|
fun bind(card: VisualDownloadCached?) {
|
||||||
when (binding) {
|
when (binding) {
|
||||||
is DownloadHeaderEpisodeBinding -> binding.apply {
|
is DownloadHeaderEpisodeBinding -> binding.apply {
|
||||||
if (card == null || card !is VisualDownloadHeaderCached) return@apply
|
if (card == null || card !is VisualDownloadHeaderCached) return@apply
|
||||||
|
@ -106,11 +97,7 @@ class DownloadAdapter(
|
||||||
// downloadHeaderEpisodeDownload.visibility = View.VISIBLE
|
// downloadHeaderEpisodeDownload.visibility = View.VISIBLE
|
||||||
downloadHeaderGotoChild.visibility = View.GONE
|
downloadHeaderGotoChild.visibility = View.GONE
|
||||||
|
|
||||||
downloadButton.setDefaultClickListener(
|
downloadButton.setDefaultClickListener(card.child, downloadHeaderInfo, mediaClickCallback)
|
||||||
card.child,
|
|
||||||
downloadHeaderInfo,
|
|
||||||
movieClickCallback
|
|
||||||
)
|
|
||||||
downloadButton.isVisible = true
|
downloadButton.isVisible = true
|
||||||
/* setUpButton(
|
/* setUpButton(
|
||||||
card.currentBytes,
|
card.currentBytes,
|
||||||
|
@ -119,11 +106,11 @@ class DownloadAdapter(
|
||||||
downloadImage,
|
downloadImage,
|
||||||
extraInfo,
|
extraInfo,
|
||||||
card.child,
|
card.child,
|
||||||
movieClickCallback
|
mediaClickCallback
|
||||||
) */
|
) */
|
||||||
|
|
||||||
episodeHolder.setOnClickListener {
|
episodeHolder.setOnClickListener {
|
||||||
movieClickCallback.invoke(
|
mediaClickCallback.invoke(
|
||||||
DownloadClickEvent(
|
DownloadClickEvent(
|
||||||
DOWNLOAD_ACTION_PLAY_FILE,
|
DOWNLOAD_ACTION_PLAY_FILE,
|
||||||
card.child
|
card.child
|
||||||
|
@ -174,7 +161,7 @@ class DownloadAdapter(
|
||||||
} else visibility = View.GONE
|
} else visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadButton.setDefaultClickListener(card.data, downloadChildEpisodeTextExtra, movieClickCallback)
|
downloadButton.setDefaultClickListener(card.data, downloadChildEpisodeTextExtra, mediaClickCallback)
|
||||||
|
|
||||||
downloadChildEpisodeText.apply {
|
downloadChildEpisodeText.apply {
|
||||||
text = context.getNameFull(d.name, d.episode, d.season)
|
text = context.getNameFull(d.name, d.episode, d.season)
|
||||||
|
@ -182,7 +169,7 @@ class DownloadAdapter(
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadChildEpisodeHolder.setOnClickListener {
|
downloadChildEpisodeHolder.setOnClickListener {
|
||||||
movieClickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, d))
|
mediaClickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, d))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -209,7 +196,7 @@ class DownloadAdapter(
|
||||||
else -> throw IllegalArgumentException("Invalid view type")
|
else -> throw IllegalArgumentException("Invalid view type")
|
||||||
},
|
},
|
||||||
clickCallback,
|
clickCallback,
|
||||||
movieClickCallback
|
mediaClickCallback
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: DownloadViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: DownloadViewHolder, position: Int) {
|
||||||
|
@ -221,7 +208,9 @@ class DownloadAdapter(
|
||||||
override fun getItemViewType(position: Int): Int {
|
override fun getItemViewType(position: Int): Int {
|
||||||
if (viewType != 0) return viewType
|
if (viewType != 0) return viewType
|
||||||
|
|
||||||
val isChildView = cardList[position] !is VisualDownloadHeaderCached
|
val card = cardList.getOrNull(position) ?: return 0
|
||||||
|
|
||||||
|
val isChildView = card is VisualDownloadChildCached
|
||||||
return if (isChildView) VIEW_TYPE_CHILD else VIEW_TYPE_HEADER
|
return if (isChildView) VIEW_TYPE_CHILD else VIEW_TYPE_HEADER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ package com.lagradost.cloudstream3.utils
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
import com.lagradost.cloudstream3.TvType
|
import com.lagradost.cloudstream3.TvType
|
||||||
object VideoDownloadHelper {
|
object VideoDownloadHelper {
|
||||||
abstract class DownloadCachedAbstract(
|
abstract class DownloadCached(
|
||||||
@JsonProperty("id") open val id: Int,
|
@JsonProperty("id") open val id: Int,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ object VideoDownloadHelper {
|
||||||
@JsonProperty("description") val description: String?,
|
@JsonProperty("description") val description: String?,
|
||||||
@JsonProperty("cacheTime") val cacheTime: Long,
|
@JsonProperty("cacheTime") val cacheTime: Long,
|
||||||
override val id: Int,
|
override val id: Int,
|
||||||
): DownloadCachedAbstract(id)
|
): DownloadCached(id)
|
||||||
|
|
||||||
data class DownloadHeaderCached(
|
data class DownloadHeaderCached(
|
||||||
@JsonProperty("apiName") val apiName: String,
|
@JsonProperty("apiName") val apiName: String,
|
||||||
|
@ -27,7 +27,7 @@ object VideoDownloadHelper {
|
||||||
@JsonProperty("poster") val poster: String?,
|
@JsonProperty("poster") val poster: String?,
|
||||||
@JsonProperty("cacheTime") val cacheTime: Long,
|
@JsonProperty("cacheTime") val cacheTime: Long,
|
||||||
override val id: Int,
|
override val id: Int,
|
||||||
): DownloadCachedAbstract(id)
|
): DownloadCached(id)
|
||||||
|
|
||||||
data class ResumeWatching(
|
data class ResumeWatching(
|
||||||
@JsonProperty("parentId") val parentId: Int,
|
@JsonProperty("parentId") val parentId: Int,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue