cloudstream/app/src/main/java/com/lagradost/cloudstream3/ui/download/DownloadChildAdapter.kt

95 lines
3.6 KiB
Kotlin
Raw Normal View History

2021-07-18 23:57:04 +00:00
package com.lagradost.cloudstream3.ui.download
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
2023-07-14 00:28:49 +00:00
import com.lagradost.cloudstream3.databinding.DownloadChildEpisodeBinding
2021-08-09 14:40:20 +00:00
import com.lagradost.cloudstream3.utils.AppUtils.getNameFull
2021-07-18 23:57:04 +00:00
import com.lagradost.cloudstream3.utils.DataStoreHelper.fixVisual
import com.lagradost.cloudstream3.utils.DataStoreHelper.getViewPos
import com.lagradost.cloudstream3.utils.VideoDownloadHelper
2021-07-24 15:13:21 +00:00
const val DOWNLOAD_ACTION_PLAY_FILE = 0
const val DOWNLOAD_ACTION_DELETE_FILE = 1
const val DOWNLOAD_ACTION_RESUME_DOWNLOAD = 2
const val DOWNLOAD_ACTION_PAUSE_DOWNLOAD = 3
2021-07-24 20:50:57 +00:00
const val DOWNLOAD_ACTION_DOWNLOAD = 4
2021-09-02 16:51:13 +00:00
const val DOWNLOAD_ACTION_LONG_CLICK = 5
2021-07-24 15:13:21 +00:00
2021-07-18 23:57:04 +00:00
data class VisualDownloadChildCached(
val currentBytes: Long,
val totalBytes: Long,
val data: VideoDownloadHelper.DownloadEpisodeCached,
)
data class DownloadClickEvent(val action: Int, val data: VideoDownloadHelper.DownloadEpisodeCached)
2021-07-18 23:57:04 +00:00
class DownloadChildAdapter(
var cardList: List<VisualDownloadChildCached>,
private val clickCallback: (DownloadClickEvent) -> Unit,
2021-07-28 19:14:45 +00:00
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
2021-07-18 23:57:04 +00:00
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return DownloadChildViewHolder(
2023-07-14 00:28:49 +00:00
DownloadChildEpisodeBinding.inflate(LayoutInflater.from(parent.context), parent, false),
2021-07-18 23:57:04 +00:00
clickCallback
)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is DownloadChildViewHolder -> {
holder.bind(cardList[position])
}
}
}
override fun getItemCount(): Int {
return cardList.size
}
class DownloadChildViewHolder
constructor(
2023-07-14 00:28:49 +00:00
val binding: DownloadChildEpisodeBinding,
2021-07-18 23:57:04 +00:00
private val clickCallback: (DownloadClickEvent) -> Unit,
2023-07-15 21:43:09 +00:00
) : RecyclerView.ViewHolder(binding.root) {
2021-07-28 19:14:45 +00:00
2023-07-14 00:28:49 +00:00
/*private val title: TextView = itemView.download_child_episode_text
2021-07-18 23:57:04 +00:00
private val extraInfo: TextView = itemView.download_child_episode_text_extra
private val holder: CardView = itemView.download_child_episode_holder
private val progressBar: ContentLoadingProgressBar = itemView.download_child_episode_progress
2021-07-24 15:13:21 +00:00
private val progressBarDownload: ContentLoadingProgressBar = itemView.download_child_episode_progress_downloaded
2023-07-14 00:28:49 +00:00
private val downloadImage: ImageView = itemView.download_child_episode_download*/
2021-07-18 23:57:04 +00:00
2021-07-28 19:14:45 +00:00
2021-07-18 23:57:04 +00:00
fun bind(card: VisualDownloadChildCached) {
val d = card.data
val posDur = getViewPos(d.id)
2023-07-14 00:28:49 +00:00
binding.downloadChildEpisodeProgress.apply {
if (posDur != null) {
val visualPos = posDur.fixVisual()
max = (visualPos.duration / 1000).toInt()
progress = (visualPos.position / 1000).toInt()
visibility = View.VISIBLE
} else {
visibility = View.GONE
}
}
2023-07-19 15:27:47 +00:00
binding.downloadButton.setDefaultClickListener(card.data, binding.downloadChildEpisodeTextExtra, clickCallback)
2023-07-14 00:28:49 +00:00
binding.downloadChildEpisodeText.apply {
text = context.getNameFull(d.name, d.episode, d.season)
isSelected = true // is needed for text repeating
2021-07-18 23:57:04 +00:00
}
2023-07-14 00:28:49 +00:00
binding.downloadChildEpisodeHolder.setOnClickListener {
2021-07-24 15:13:21 +00:00
clickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, d))
}
2021-07-18 23:57:04 +00:00
}
}
}