2021-07-15 16:45:25 +00:00
|
|
|
package com.lagradost.cloudstream3.ui.download
|
|
|
|
|
|
|
|
import android.view.LayoutInflater
|
|
|
|
import android.view.View
|
|
|
|
import android.view.ViewGroup
|
|
|
|
import android.widget.ImageView
|
|
|
|
import android.widget.TextView
|
|
|
|
import androidx.cardview.widget.CardView
|
2021-07-25 14:25:09 +00:00
|
|
|
import androidx.core.widget.ContentLoadingProgressBar
|
2021-07-15 16:45:25 +00:00
|
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
|
|
import com.lagradost.cloudstream3.R
|
2021-08-19 20:05:18 +00:00
|
|
|
import com.lagradost.cloudstream3.utils.UIHelper.setImage
|
2021-07-15 16:45:25 +00:00
|
|
|
import com.lagradost.cloudstream3.utils.VideoDownloadHelper
|
|
|
|
import kotlinx.android.synthetic.main.download_header_episode.view.*
|
2021-07-28 19:14:45 +00:00
|
|
|
import java.util.*
|
2021-07-15 16:45:25 +00:00
|
|
|
|
|
|
|
data class VisualDownloadHeaderCached(
|
|
|
|
val currentOngoingDownloads: Int,
|
|
|
|
val totalDownloads: Int,
|
|
|
|
val totalBytes: Long,
|
2021-07-25 14:25:09 +00:00
|
|
|
val currentBytes: Long,
|
2021-07-15 16:45:25 +00:00
|
|
|
val data: VideoDownloadHelper.DownloadHeaderCached,
|
2021-07-25 14:25:09 +00:00
|
|
|
val child: VideoDownloadHelper.DownloadEpisodeCached?,
|
2021-07-15 16:45:25 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
data class DownloadHeaderClickEvent(val action: Int, val data: VideoDownloadHelper.DownloadHeaderCached)
|
|
|
|
|
|
|
|
class DownloadHeaderAdapter(
|
|
|
|
var cardList: List<VisualDownloadHeaderCached>,
|
|
|
|
private val clickCallback: (DownloadHeaderClickEvent) -> Unit,
|
2021-07-25 14:25:09 +00:00
|
|
|
private val movieClickCallback: (DownloadClickEvent) -> Unit,
|
2021-07-28 19:14:45 +00:00
|
|
|
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
|
|
|
|
|
|
|
private val mBoundViewHolders: HashSet<DownloadButtonViewHolder> = HashSet()
|
|
|
|
private fun getAllBoundViewHolders(): Set<DownloadButtonViewHolder?>? {
|
|
|
|
return Collections.unmodifiableSet(mBoundViewHolders)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun killAdapter() {
|
|
|
|
getAllBoundViewHolders()?.forEach { view ->
|
|
|
|
view?.downloadButton?.dispose()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onViewDetachedFromWindow(holder: RecyclerView.ViewHolder) {
|
|
|
|
if (holder is DownloadButtonViewHolder) {
|
|
|
|
holder.downloadButton.dispose()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onViewRecycled(holder: RecyclerView.ViewHolder) {
|
|
|
|
if (holder is DownloadButtonViewHolder) {
|
|
|
|
holder.downloadButton.dispose()
|
2021-08-19 20:05:18 +00:00
|
|
|
mBoundViewHolders.remove(holder)
|
2021-07-28 19:14:45 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onViewAttachedToWindow(holder: RecyclerView.ViewHolder) {
|
|
|
|
if (holder is DownloadButtonViewHolder) {
|
|
|
|
holder.reattachDownloadButton()
|
|
|
|
}
|
|
|
|
}
|
2021-07-15 16:45:25 +00:00
|
|
|
|
|
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
|
|
|
|
return DownloadHeaderViewHolder(
|
|
|
|
LayoutInflater.from(parent.context).inflate(R.layout.download_header_episode, parent, false),
|
2021-07-25 14:25:09 +00:00
|
|
|
clickCallback,
|
|
|
|
movieClickCallback
|
2021-07-15 16:45:25 +00:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
|
|
|
when (holder) {
|
|
|
|
is DownloadHeaderViewHolder -> {
|
|
|
|
holder.bind(cardList[position])
|
2021-07-28 19:14:45 +00:00
|
|
|
mBoundViewHolders.add(holder)
|
2021-07-15 16:45:25 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun getItemCount(): Int {
|
|
|
|
return cardList.size
|
|
|
|
}
|
|
|
|
|
|
|
|
class DownloadHeaderViewHolder
|
|
|
|
constructor(
|
|
|
|
itemView: View,
|
|
|
|
private val clickCallback: (DownloadHeaderClickEvent) -> Unit,
|
2021-07-25 14:25:09 +00:00
|
|
|
private val movieClickCallback: (DownloadClickEvent) -> Unit,
|
2021-07-28 19:14:45 +00:00
|
|
|
) : RecyclerView.ViewHolder(itemView), DownloadButtonViewHolder {
|
|
|
|
override var downloadButton = EasyDownloadButton()
|
|
|
|
|
2021-08-19 20:05:18 +00:00
|
|
|
private val poster: ImageView? = itemView.download_header_poster
|
2021-07-15 16:45:25 +00:00
|
|
|
private val title: TextView = itemView.download_header_title
|
|
|
|
private val extraInfo: TextView = itemView.download_header_info
|
|
|
|
private val holder: CardView = itemView.episode_holder
|
|
|
|
|
2021-07-25 14:25:09 +00:00
|
|
|
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
|
2021-10-19 20:17:06 +00:00
|
|
|
private var localCard: VisualDownloadHeaderCached? = null
|
2021-07-25 14:25:09 +00:00
|
|
|
|
2021-07-15 16:45:25 +00:00
|
|
|
fun bind(card: VisualDownloadHeaderCached) {
|
2021-07-28 19:14:45 +00:00
|
|
|
localCard = card
|
2021-07-15 16:45:25 +00:00
|
|
|
val d = card.data
|
|
|
|
|
2021-08-19 20:05:18 +00:00
|
|
|
poster?.setImage(d.poster)
|
2021-07-15 16:45:25 +00:00
|
|
|
|
|
|
|
title.text = d.name
|
|
|
|
val mbString = "%.1f".format(card.totalBytes / 1000000f)
|
|
|
|
|
2021-07-25 14:25:09 +00:00
|
|
|
//val isMovie = d.type.isMovieType()
|
|
|
|
if (card.child != null) {
|
|
|
|
downloadBar.visibility = View.VISIBLE
|
|
|
|
downloadImage.visibility = View.VISIBLE
|
|
|
|
normalImage.visibility = View.GONE
|
2021-07-28 19:14:45 +00:00
|
|
|
/*setUpButton(
|
2021-07-25 14:25:09 +00:00
|
|
|
card.currentBytes,
|
|
|
|
card.totalBytes,
|
|
|
|
downloadBar,
|
|
|
|
downloadImage,
|
|
|
|
extraInfo,
|
|
|
|
card.child,
|
|
|
|
movieClickCallback
|
2021-07-28 19:14:45 +00:00
|
|
|
)*/
|
2021-07-25 14:25:09 +00:00
|
|
|
|
|
|
|
holder.setOnClickListener {
|
|
|
|
movieClickCallback.invoke(DownloadClickEvent(DOWNLOAD_ACTION_PLAY_FILE, card.child))
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
downloadBar.visibility = View.GONE
|
|
|
|
downloadImage.visibility = View.GONE
|
|
|
|
normalImage.visibility = View.VISIBLE
|
|
|
|
|
|
|
|
extraInfo.text =
|
2021-09-02 13:19:50 +00:00
|
|
|
extraInfo.context.getString(R.string.extra_info_format).format(
|
|
|
|
card.totalDownloads,
|
|
|
|
if (card.totalDownloads == 1) extraInfo.context.getString(R.string.episode) else extraInfo.context.getString(
|
|
|
|
R.string.episodes
|
|
|
|
),
|
|
|
|
mbString
|
|
|
|
)
|
2021-07-15 16:45:25 +00:00
|
|
|
|
2021-07-25 14:25:09 +00:00
|
|
|
holder.setOnClickListener {
|
|
|
|
clickCallback.invoke(DownloadHeaderClickEvent(0, d))
|
|
|
|
}
|
2021-07-15 16:45:25 +00:00
|
|
|
}
|
|
|
|
}
|
2021-07-28 19:14:45 +00:00
|
|
|
|
|
|
|
override fun reattachDownloadButton() {
|
|
|
|
downloadButton.dispose()
|
|
|
|
val card = localCard
|
|
|
|
if (card?.child != null) {
|
|
|
|
downloadButton.setUpButton(
|
|
|
|
card.currentBytes,
|
|
|
|
card.totalBytes,
|
|
|
|
downloadBar,
|
|
|
|
downloadImage,
|
|
|
|
extraInfo,
|
|
|
|
card.child,
|
|
|
|
movieClickCallback
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
2021-07-15 16:45:25 +00:00
|
|
|
}
|
|
|
|
}
|