diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/adapter/HistoryAdapter.kt b/app/src/main/java/com/deniscerri/ytdl/ui/adapter/HistoryAdapter.kt deleted file mode 100644 index b73a8e26..00000000 --- a/app/src/main/java/com/deniscerri/ytdl/ui/adapter/HistoryAdapter.kt +++ /dev/null @@ -1,237 +0,0 @@ -package com.deniscerri.ytdl.ui.adapter - -import android.annotation.SuppressLint -import android.app.Activity -import android.content.SharedPreferences -import android.graphics.ColorMatrix -import android.graphics.ColorMatrixColorFilter -import android.os.Handler -import android.os.Looper -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.core.content.ContextCompat -import androidx.preference.PreferenceManager -import androidx.recyclerview.widget.AsyncDifferConfig -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.ListAdapter -import androidx.recyclerview.widget.RecyclerView -import com.deniscerri.ytdl.R -import com.deniscerri.ytdl.database.models.HistoryItem -import com.deniscerri.ytdl.database.viewmodel.DownloadViewModel -import com.deniscerri.ytdl.util.Extensions.loadThumbnail -import com.deniscerri.ytdl.util.Extensions.popup -import com.google.android.material.card.MaterialCardView -import com.google.android.material.color.MaterialColors -import com.google.android.material.floatingactionbutton.FloatingActionButton -import java.io.File -import java.text.SimpleDateFormat -import java.util.* - - -class HistoryAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder( - DIFF_CALLBACK -).build()) { - private val checkedItems: ArrayList - private val onItemClickListener: OnItemClickListener - private val activity: Activity - private val sharedPreferences: SharedPreferences - - init { - checkedItems = ArrayList() - this.onItemClickListener = onItemClickListener - this.activity = activity - sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity) - } - - class ViewHolder(itemView: View, onItemClickListener: OnItemClickListener?) : RecyclerView.ViewHolder(itemView) { - val cardView: MaterialCardView - - init { - cardView = itemView.findViewById(R.id.downloads_card_view) - } - } - - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HistoryAdapter.ViewHolder { - return if (viewType == 0){ - val cardView = LayoutInflater.from(parent.context) - .inflate(R.layout.history_card, parent, false) - ViewHolder(cardView, onItemClickListener) - }else{ - val cardView = LayoutInflater.from(parent.context) - .inflate(R.layout.history_card_multiple, parent, false) - ViewHolder(cardView, onItemClickListener) - } - } - - override fun getItemViewType(position: Int): Int { - getItem(position)?.apply { - return if(this.downloadPath.size == 1){ - 0 - }else{ - 1 - } - } - return 0 - } - - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val item = getItem(position) - val card = holder.cardView - card.popup() - - - val uiHandler = Handler(Looper.getMainLooper()) - val thumbnail = card.findViewById(R.id.downloads_image_view) - - // THUMBNAIL ---------------------------------- - val hideThumb = sharedPreferences.getStringSet("hide_thumbnails", emptySet())!!.contains("downloads") - uiHandler.post { thumbnail.loadThumbnail(hideThumb, item!!.thumb) } - - // TITLE ---------------------------------- - val itemTitle = card.findViewById(R.id.downloads_title) - var title = item!!.title.ifEmpty { item.url } - if (title.length > 100) { - title = title.substring(0, 40) + "..." - } - itemTitle.text = title - - // Bottom Info ---------------------------------- - val author = card.findViewById(R.id.downloads_info_bottom) - author.text = item.author - - val length = card.findViewById(R.id.length) - length.text = if(item.downloadPath.size == 1) item.duration else "" - - - // TIME DOWNLOADED ---------------------------------- - val datetime = card.findViewById(R.id.downloads_info_time) - datetime.text = SimpleDateFormat(android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "ddMMMyyyy - HHmm"), Locale.getDefault()).format(item.time * 1000L) - - // BUTTON ---------------------------------- - val btn = card.findViewById(R.id.downloads_download_button_type) - var filesPresent = true - - //IS IN THE FILE SYSTEM? - if (item.downloadPath.all { !File(it).exists() && it.isNotBlank()}) { - filesPresent = false - thumbnail.colorFilter = ColorMatrixColorFilter(object : ColorMatrix() { - init { - setSaturation(0f) - } - }) - thumbnail.alpha = 0.7f - btn.backgroundTintList = MaterialColors.getColorStateList(activity, R.attr.colorSurface, ContextCompat.getColorStateList(activity, android.R.color.transparent)!!) - }else{ - thumbnail.alpha = 1f - thumbnail.colorFilter = null - btn.backgroundTintList = MaterialColors.getColorStateList(activity, R.attr.colorPrimaryContainer, ContextCompat.getColorStateList(activity, android.R.color.transparent)!!) - } - - if (item.type == DownloadViewModel.Type.audio) { - if (filesPresent) btn.setImageResource(R.drawable.ic_music_downloaded) else { - btn.setImageResource(R.drawable.ic_music) - } - } else if (item.type == DownloadViewModel.Type.video) { - if (filesPresent) btn.setImageResource(R.drawable.ic_video_downloaded) else btn.setImageResource(R.drawable.ic_video) - }else{ - if (filesPresent) btn.setImageResource(R.drawable.ic_terminal) else btn.setImageResource(R.drawable.baseline_code_off_24) - } - if (btn.hasOnClickListeners()) btn.setOnClickListener(null) - btn.isClickable = filesPresent - - if (checkedItems.contains(item.id)) { - card.isChecked = true - card.strokeWidth = 5 - } else { - card.isChecked = false - card.strokeWidth = 0 - } - val finalFilePresent = filesPresent - card.setOnLongClickListener { - checkCard(card, item.id) - true - } - card.setOnClickListener { - if (checkedItems.size > 0) { - checkCard(card, item.id) - } else { - onItemClickListener.onCardClick(item.id, finalFilePresent) - } - } - - btn.setOnClickListener { - onItemClickListener.onButtonClick(item.id, finalFilePresent) - } - } - - private fun checkCard(card: MaterialCardView, itemID: Long) { - if (card.isChecked) { - card.strokeWidth = 0 - checkedItems.remove(itemID) - } else { - card.strokeWidth = 5 - checkedItems.add(itemID) - } - card.isChecked = !card.isChecked - onItemClickListener.onCardSelect(itemID, card.isChecked) - } - - @SuppressLint("NotifyDataSetChanged") - fun checkMultipleItems(list: List){ - checkedItems.clear() - checkedItems.addAll(list) - notifyDataSetChanged() - } - - interface OnItemClickListener { - fun onCardClick(itemID: Long, isPresent: Boolean) - fun onButtonClick(itemID: Long, isPresent: Boolean) - fun onCardSelect(itemID: Long, isChecked: Boolean) - } - - @SuppressLint("NotifyDataSetChanged") - fun clearCheckeditems() { - for (i in 0 until itemCount){ - val item = getItem(i) - if (checkedItems.find { it == item?.id } != null){ - checkedItems.remove(item?.id) - notifyItemChanged(i) - } - } - - checkedItems.clear() - } - - fun checkAll(items: List?){ - checkedItems.clear() - checkedItems.addAll(items!!.map { it!!.id }) - notifyDataSetChanged() - } - - fun invertSelected(items: List?){ - val invertedList = mutableListOf() - items?.forEach { - if (!checkedItems.contains(it!!.id)) invertedList.add(it.id) - } - checkedItems.clear() - checkedItems.addAll(invertedList) - notifyDataSetChanged() - } - - companion object { - private val DIFF_CALLBACK: DiffUtil.ItemCallback = object : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: HistoryItem, newItem: HistoryItem): Boolean { - val ranged = arrayListOf(oldItem.id, newItem.id) - return ranged[0] == ranged[1] - } - - override fun areContentsTheSame(oldItem: HistoryItem, newItem: HistoryItem): Boolean { - return oldItem.time == newItem.time - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdl/util/extractors/YTDLPUtil.kt b/app/src/main/java/com/deniscerri/ytdl/util/extractors/YTDLPUtil.kt index 65d3bdc5..ce3b7515 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/extractors/YTDLPUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/extractors/YTDLPUtil.kt @@ -858,13 +858,13 @@ class YTDLPUtil(private val context: Context, private val commandTemplateDao: Co } if(downloadItem.title.isNotBlank()){ - metadataCommands.addOption("--replace-in-metadata", "title", ".+", downloadItem.title) + metadataCommands.addOption("--replace-in-metadata", "title", """^.*$""", downloadItem.title) metadataCommands.addOption("--parse-metadata", "%(title)s:%(meta_title)s") } if (downloadItem.author.isNotBlank()){ - metadataCommands.addOption("--replace-in-metadata", "uploader", ".+", downloadItem.author) + metadataCommands.addOption("--replace-in-metadata", "uploader", """^.*$""", downloadItem.author) metadataCommands.addOption("--parse-metadata", "%(uploader)s:%(artist)s") }