diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
index b16f267c..c4888134 100644
--- a/.idea/assetWizardSettings.xml
+++ b/.idea/assetWizardSettings.xml
@@ -320,7 +320,7 @@
@@ -330,7 +330,7 @@
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/CancelledDownloadAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/adapter/CancelledDownloadAdapter.kt
deleted file mode 100644
index 810ca3aa..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/CancelledDownloadAdapter.kt
+++ /dev/null
@@ -1,144 +0,0 @@
-package com.deniscerri.ytdlnis.adapter
-
-import android.annotation.SuppressLint
-import android.app.Activity
-import android.graphics.Color
-import android.graphics.ColorMatrix
-import android.graphics.ColorMatrixColorFilter
-import android.os.Handler
-import android.os.Looper
-import android.util.Log
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.ImageView
-import android.widget.LinearLayout
-import android.widget.TextView
-import androidx.core.content.ContextCompat
-import androidx.recyclerview.widget.AsyncDifferConfig
-import androidx.recyclerview.widget.DiffUtil
-import androidx.recyclerview.widget.ListAdapter
-import androidx.recyclerview.widget.RecyclerView
-import com.deniscerri.ytdlnis.R
-import com.deniscerri.ytdlnis.database.models.DownloadItem
-import com.deniscerri.ytdlnis.database.models.HistoryItem
-import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
-import com.deniscerri.ytdlnis.util.FileUtil
-import com.google.android.material.button.MaterialButton
-import com.google.android.material.card.MaterialCardView
-import com.squareup.picasso.Picasso
-import org.w3c.dom.Text
-import java.io.File
-import java.text.DateFormat
-import java.text.SimpleDateFormat
-import java.util.*
-
-class CancelledDownloadAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
- private val onItemClickListener: OnItemClickListener
- private val activity: Activity
- private var fileUtil: FileUtil
-
- init {
- this.onItemClickListener = onItemClickListener
- this.activity = activity
- fileUtil = FileUtil()
- }
-
- class ViewHolder(itemView: View, onItemClickListener: OnItemClickListener?) : RecyclerView.ViewHolder(itemView) {
- val cardView: MaterialCardView
- init {
- cardView = itemView.findViewById(R.id.queued_download_card_view)
- }
- }
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
- val cardView = LayoutInflater.from(parent.context)
- .inflate(R.layout.queued_download_card, parent, false)
- return ViewHolder(cardView, onItemClickListener)
- }
-
- override fun onBindViewHolder(holder: ViewHolder, position: Int) {
- val item = getItem(position)
- val card = holder.cardView
- // THUMBNAIL ----------------------------------
- val thumbnail = card.findViewById(R.id.image_view)
- val imageURL = item!!.thumb
- val uiHandler = Handler(Looper.getMainLooper())
- if (imageURL.isNotEmpty()) {
- uiHandler.post { Picasso.get().load(imageURL).into(thumbnail) }
- } else {
- uiHandler.post { Picasso.get().load(R.color.black).into(thumbnail) }
- }
- thumbnail.setColorFilter(Color.argb(95, 0, 0, 0))
-
- // TITLE ----------------------------------
- val itemTitle = card.findViewById(R.id.title)
- var title = item.title
- if (title.length > 100) {
- title = title.substring(0, 40) + "..."
- }
- itemTitle.text = title
-
- val formatNote = card.findViewById(R.id.format_note)
- formatNote.text = item.format.format_note
- val codec = card.findViewById(R.id.codec)
- val codecText =
- if (item.format.encoding != "") {
- item.format.encoding.uppercase()
- }else if (item.format.vcodec != "none" && item.format.vcodec != ""){
- item.format.vcodec.uppercase()
- } else {
- item.format.acodec.uppercase()
- }
- if (codecText == "" || codecText == "none"){
- codec.visibility = View.GONE
- }else{
- codec.visibility = View.VISIBLE
- codec.text = codecText
- }
-
- val fileSize = card.findViewById(R.id.file_size)
- fileSize.text = fileUtil.convertFileSize(item.format.filesize)
- val downloadStartTime = card.findViewById(R.id.time)
- val time = item.downloadStartTime
- if (time == 0L) {
- downloadStartTime.visibility = View.GONE
- } else {
- downloadStartTime.visibility = View.VISIBLE
- val cal = Calendar.getInstance()
- val date = Date(time * 1000L)
- cal.time = date
- val day = cal[Calendar.DAY_OF_MONTH]
- val month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault())
- val year = cal[Calendar.YEAR]
- val formatter: DateFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
- val timeString = formatter.format(date)
- downloadStartTime.text = "$day $month $year - $timeString"
- }
-
- // CANCEL BUTTON ----------------------------------
- val cancelButton = card.findViewById(R.id.queued_download_cancel)
- if (cancelButton.hasOnClickListeners()) cancelButton.setOnClickListener(null)
-
- cancelButton.setOnClickListener {
- onItemClickListener.onQueuedCancelClick(item.id)
- }
-
- }
- interface OnItemClickListener {
- fun onQueuedCancelClick(itemID: Long)
- }
-
- companion object {
- private val DIFF_CALLBACK: DiffUtil.ItemCallback = object : DiffUtil.ItemCallback() {
- override fun areItemsTheSame(oldItem: DownloadItem, newItem: DownloadItem): Boolean {
- val ranged = arrayListOf(oldItem.id, newItem.id)
- return ranged[0] == ranged[1]
- }
-
- override fun areContentsTheSame(oldItem: DownloadItem, newItem: DownloadItem): Boolean {
- return oldItem.url == newItem.url && oldItem.format.format_id == newItem.format.format_id
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ErroredDownloadAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/adapter/GenericDownloadAdapter.kt
similarity index 59%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/ErroredDownloadAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/adapter/GenericDownloadAdapter.kt
index 66022f3a..920968e2 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ErroredDownloadAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/GenericDownloadAdapter.kt
@@ -1,39 +1,33 @@
package com.deniscerri.ytdlnis.adapter
-import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.Color
-import android.graphics.ColorMatrix
-import android.graphics.ColorMatrixColorFilter
import android.os.Handler
import android.os.Looper
-import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
-import android.widget.LinearLayout
import android.widget.TextView
-import androidx.core.content.ContextCompat
+import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.models.DownloadItem
-import com.deniscerri.ytdlnis.database.models.HistoryItem
+import com.deniscerri.ytdlnis.database.repository.DownloadRepository
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
+import com.deniscerri.ytdlnis.ui.downloadcard.DownloadVideoFragment
import com.deniscerri.ytdlnis.util.FileUtil
import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
import com.squareup.picasso.Picasso
-import org.w3c.dom.Text
-import java.io.File
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.*
-class ErroredDownloadAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class GenericDownloadAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
private val onItemClickListener: OnItemClickListener
private val activity: Activity
private var fileUtil: FileUtil
@@ -47,40 +41,43 @@ class ErroredDownloadAdapter(onItemClickListener: OnItemClickListener, activity:
class ViewHolder(itemView: View, onItemClickListener: OnItemClickListener?) : RecyclerView.ViewHolder(itemView) {
val cardView: MaterialCardView
init {
- cardView = itemView.findViewById(R.id.queued_download_card_view)
+ cardView = itemView.findViewById(R.id.download_card_view)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val cardView = LayoutInflater.from(parent.context)
- .inflate(R.layout.queued_download_card, parent, false)
+ .inflate(R.layout.generic_download_card, parent, false)
return ViewHolder(cardView, onItemClickListener)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = getItem(position)
val card = holder.cardView
- // THUMBNAIL ----------------------------------
- val thumbnail = card.findViewById(R.id.image_view)
- val imageURL = item!!.thumb
- val uiHandler = Handler(Looper.getMainLooper())
- if (imageURL.isNotEmpty()) {
- uiHandler.post { Picasso.get().load(imageURL).into(thumbnail) }
- } else {
- uiHandler.post { Picasso.get().load(R.color.black).into(thumbnail) }
- }
- thumbnail.setColorFilter(Color.argb(95, 0, 0, 0))
// TITLE ----------------------------------
val itemTitle = card.findViewById(R.id.title)
- var title = item.title
+ var title = item!!.title
if (title.length > 100) {
title = title.substring(0, 40) + "..."
}
itemTitle.text = title
+ // TITLE ----------------------------------
+ val itemUrl = card.findViewById(R.id.url)
+ itemUrl.text = item.url
+
+ val type = card.findViewById(R.id.type)
+ type!!.text = item.type.toString().uppercase()
+
val formatNote = card.findViewById(R.id.format_note)
- formatNote.text = item.format.format_note
+ if (item.type == DownloadViewModel.Type.command){
+ formatNote.visibility = View.GONE
+ }else{
+ formatNote.text = item.format.format_note
+ }
+
+
val codec = card.findViewById(R.id.codec)
val codecText =
if (item.format.encoding != "") {
@@ -98,35 +95,34 @@ class ErroredDownloadAdapter(onItemClickListener: OnItemClickListener, activity:
}
val fileSize = card.findViewById(R.id.file_size)
- fileSize.text = fileUtil.convertFileSize(item.format.filesize)
- val downloadStartTime = card.findViewById(R.id.time)
- val time = item.downloadStartTime
- if (time == 0L) {
- downloadStartTime.visibility = View.GONE
- } else {
- downloadStartTime.visibility = View.VISIBLE
- val cal = Calendar.getInstance()
- val date = Date(time * 1000L)
- cal.time = date
- val day = cal[Calendar.DAY_OF_MONTH]
- val month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault())
- val year = cal[Calendar.YEAR]
- val formatter: DateFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
- val timeString = formatter.format(date)
- downloadStartTime.text = "$day $month $year - $timeString"
+ val fileSizeReadable = fileUtil.convertFileSize(item.format.filesize)
+ if (fileSizeReadable == "?") fileSize.visibility = View.GONE
+ else fileSize.text = fileSizeReadable
+
+ // ACTION BUTTON ----------------------------------
+ val actionButton = card.findViewById(R.id.action_button)
+ if (actionButton.hasOnClickListeners()) actionButton.setOnClickListener(null)
+
+ when(item.status){
+ DownloadRepository.Status.Cancelled.toString() -> actionButton.setIconResource(R.drawable.ic_refresh)
+ DownloadRepository.Status.Queued.toString() -> actionButton.setIconResource(R.drawable.ic_baseline_delete_outline_24)
+ else -> actionButton.setIconResource(R.drawable.ic_baseline_file_open_24)
}
- // CANCEL BUTTON ----------------------------------
- val cancelButton = card.findViewById(R.id.queued_download_cancel)
- if (cancelButton.hasOnClickListeners()) cancelButton.setOnClickListener(null)
- cancelButton.setOnClickListener {
- onItemClickListener.onQueuedCancelClick(item.id)
+
+ actionButton.setOnClickListener {
+ onItemClickListener.onActionButtonClick(item.id)
+ }
+
+ card.setOnClickListener {
+ onItemClickListener.onCardClick(item.id)
}
}
interface OnItemClickListener {
- fun onQueuedCancelClick(itemID: Long)
+ fun onActionButtonClick(itemID: Long)
+ fun onCardClick(itemID: Long)
}
companion object {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt
index f93c9a07..41e57f1b 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt
@@ -124,8 +124,10 @@ class HistoryAdapter(onItemClickListener: OnItemClickListener, activity: Activit
}
if (item.type == DownloadViewModel.Type.audio) {
if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music)
- } else {
+ } else if (item.type == DownloadViewModel.Type.video) {
if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video)
+ }else{
+ btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_terminal)
}
if (btn.hasOnClickListeners()) btn.setOnClickListener(null)
if (checkedItems.contains(item.id)) {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/QueuedDownloadAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/adapter/QueuedDownloadAdapter.kt
deleted file mode 100644
index 86d7cc69..00000000
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/QueuedDownloadAdapter.kt
+++ /dev/null
@@ -1,144 +0,0 @@
-package com.deniscerri.ytdlnis.adapter
-
-import android.annotation.SuppressLint
-import android.app.Activity
-import android.graphics.Color
-import android.graphics.ColorMatrix
-import android.graphics.ColorMatrixColorFilter
-import android.os.Handler
-import android.os.Looper
-import android.util.Log
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.ImageView
-import android.widget.LinearLayout
-import android.widget.TextView
-import androidx.core.content.ContextCompat
-import androidx.recyclerview.widget.AsyncDifferConfig
-import androidx.recyclerview.widget.DiffUtil
-import androidx.recyclerview.widget.ListAdapter
-import androidx.recyclerview.widget.RecyclerView
-import com.deniscerri.ytdlnis.R
-import com.deniscerri.ytdlnis.database.models.DownloadItem
-import com.deniscerri.ytdlnis.database.models.HistoryItem
-import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
-import com.deniscerri.ytdlnis.util.FileUtil
-import com.google.android.material.button.MaterialButton
-import com.google.android.material.card.MaterialCardView
-import com.squareup.picasso.Picasso
-import org.w3c.dom.Text
-import java.io.File
-import java.text.DateFormat
-import java.text.SimpleDateFormat
-import java.util.*
-
-class QueuedDownloadAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
- private val onItemClickListener: OnItemClickListener
- private val activity: Activity
- private var fileUtil: FileUtil
-
- init {
- this.onItemClickListener = onItemClickListener
- this.activity = activity
- fileUtil = FileUtil()
- }
-
- class ViewHolder(itemView: View, onItemClickListener: OnItemClickListener?) : RecyclerView.ViewHolder(itemView) {
- val cardView: MaterialCardView
- init {
- cardView = itemView.findViewById(R.id.queued_download_card_view)
- }
- }
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
- val cardView = LayoutInflater.from(parent.context)
- .inflate(R.layout.queued_download_card, parent, false)
- return ViewHolder(cardView, onItemClickListener)
- }
-
- override fun onBindViewHolder(holder: ViewHolder, position: Int) {
- val item = getItem(position)
- val card = holder.cardView
- // THUMBNAIL ----------------------------------
- val thumbnail = card.findViewById(R.id.image_view)
- val imageURL = item!!.thumb
- val uiHandler = Handler(Looper.getMainLooper())
- if (imageURL.isNotEmpty()) {
- uiHandler.post { Picasso.get().load(imageURL).into(thumbnail) }
- } else {
- uiHandler.post { Picasso.get().load(R.color.black).into(thumbnail) }
- }
- thumbnail.setColorFilter(Color.argb(95, 0, 0, 0))
-
- // TITLE ----------------------------------
- val itemTitle = card.findViewById(R.id.title)
- var title = item.title
- if (title.length > 100) {
- title = title.substring(0, 40) + "..."
- }
- itemTitle.text = title
-
- val formatNote = card.findViewById(R.id.format_note)
- formatNote.text = item.format.format_note
- val codec = card.findViewById(R.id.codec)
- val codecText =
- if (item.format.encoding != "") {
- item.format.encoding.uppercase()
- }else if (item.format.vcodec != "none" && item.format.vcodec != ""){
- item.format.vcodec.uppercase()
- } else {
- item.format.acodec.uppercase()
- }
- if (codecText == "" || codecText == "none"){
- codec.visibility = View.GONE
- }else{
- codec.visibility = View.VISIBLE
- codec.text = codecText
- }
-
- val fileSize = card.findViewById(R.id.file_size)
- fileSize.text = fileUtil.convertFileSize(item.format.filesize)
- val downloadStartTime = card.findViewById(R.id.time)
- val time = item.downloadStartTime
- if (time == 0L) {
- downloadStartTime.visibility = View.GONE
- } else {
- downloadStartTime.visibility = View.VISIBLE
- val cal = Calendar.getInstance()
- val date = Date(time * 1000L)
- cal.time = date
- val day = cal[Calendar.DAY_OF_MONTH]
- val month = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault())
- val year = cal[Calendar.YEAR]
- val formatter: DateFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
- val timeString = formatter.format(date)
- downloadStartTime.text = "$day $month $year - $timeString"
- }
-
- // CANCEL BUTTON ----------------------------------
- val cancelButton = card.findViewById(R.id.queued_download_cancel)
- if (cancelButton.hasOnClickListeners()) cancelButton.setOnClickListener(null)
-
- cancelButton.setOnClickListener {
- onItemClickListener.onQueuedCancelClick(item.id)
- }
-
- }
- interface OnItemClickListener {
- fun onQueuedCancelClick(itemID: Long)
- }
-
- companion object {
- private val DIFF_CALLBACK: DiffUtil.ItemCallback = object : DiffUtil.ItemCallback() {
- override fun areItemsTheSame(oldItem: DownloadItem, newItem: DownloadItem): Boolean {
- val ranged = arrayListOf(oldItem.id, newItem.id)
- return ranged[0] == ranged[1]
- }
-
- override fun areContentsTheSame(oldItem: DownloadItem, newItem: DownloadItem): Boolean {
- return oldItem.url == newItem.url && oldItem.format.format_id == newItem.format.format_id
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/TemplatesAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/adapter/TemplatesAdapter.kt
index 0a38af8a..f569001c 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/TemplatesAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/TemplatesAdapter.kt
@@ -47,11 +47,11 @@ class TemplatesAdapter(onItemClickListener: OnItemClickListener, activity: Activ
val content = card.findViewById(R.id.content)
content.text = item?.content
- val check = card.findViewById