fixed app not downloading multiple items
This commit is contained in:
parent
4d959a0b05
commit
ca6f5f6f20
13 changed files with 77 additions and 28 deletions
|
|
@ -7,6 +7,7 @@ import android.graphics.ColorMatrix
|
|||
import android.graphics.ColorMatrixColorFilter
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.text.format.DateFormat
|
||||
import android.text.format.DateUtils
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
|
|
@ -25,6 +26,7 @@ import com.google.android.material.button.MaterialButton
|
|||
import com.google.android.material.card.MaterialCardView
|
||||
import com.squareup.picasso.Picasso
|
||||
import java.io.File
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
|
||||
|
|
@ -87,12 +89,12 @@ class HistoryAdapter(onItemClickListener: OnItemClickListener, activity: Activit
|
|||
// TIME DOWNLOADED ----------------------------------
|
||||
val datetime = card.findViewById<TextView>(R.id.downloads_info_time)
|
||||
|
||||
val relativeTime = DateUtils.getRelativeTimeSpanString(
|
||||
item.time * 1000L,
|
||||
System.currentTimeMillis(),
|
||||
DateUtils.MINUTE_IN_MILLIS
|
||||
)
|
||||
datetime.text = relativeTime
|
||||
// val relativeTime = DateUtils.getRelativeTimeSpanString(
|
||||
// item.time * 1000L,
|
||||
// System.currentTimeMillis(),
|
||||
// DateUtils.MINUTE_IN_MILLIS
|
||||
// )
|
||||
datetime.text = SimpleDateFormat(DateFormat.getBestDateTimePattern(Locale.getDefault(), "ddMMMyyyy - HHmm"), Locale.getDefault()).format(item.time * 1000L)
|
||||
|
||||
// BUTTON ----------------------------------
|
||||
val btn = card.findViewById<MaterialButton>(R.id.downloads_download_button_type)
|
||||
|
|
|
|||
|
|
@ -31,6 +31,9 @@ interface DownloadDao {
|
|||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insert(item: DownloadItem) : Long
|
||||
|
||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||
suspend fun insertAll(list: List<DownloadItem>) : List<Long>
|
||||
|
||||
@Query("DELETE FROM downloads")
|
||||
suspend fun deleteAll()
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,10 @@ class DownloadRepository(private val downloadDao: DownloadDao) {
|
|||
return downloadDao.insert(item)
|
||||
}
|
||||
|
||||
suspend fun insertAll(items: List<DownloadItem>) : List<Long> {
|
||||
return downloadDao.insertAll(items)
|
||||
}
|
||||
|
||||
suspend fun delete(item: DownloadItem){
|
||||
downloadDao.delete(item.id)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.deniscerri.ytdlnis.database.viewmodel
|
|||
import android.app.Activity
|
||||
import android.app.Application
|
||||
import android.content.SharedPreferences
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
|
|
@ -256,16 +257,13 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
|
|||
return Gson().fromJson(string, DownloadItem::class.java)
|
||||
}
|
||||
|
||||
fun queueDownloads(items: List<DownloadItem>)= viewModelScope.launch(Dispatchers.IO) {
|
||||
suspend fun queueDownloads(items: List<DownloadItem>) {
|
||||
val context = getApplication<App>().applicationContext
|
||||
items.forEach {
|
||||
it.status = DownloadRepository.Status.Queued.toString()
|
||||
it.id = repository.checkIfReDownloadingErroredOrCancelled(it)
|
||||
if (it.id == 0L){
|
||||
val id = repository.insert(it)
|
||||
it.id = id
|
||||
}else repository.update(it)
|
||||
|
||||
items.forEach { it.status = DownloadRepository.Status.Queued.toString() }
|
||||
val ids = repository.insertAll(items)
|
||||
for (i in ids.indices){
|
||||
val it = items[i]
|
||||
it.id = ids[i]
|
||||
val currentTime = System.currentTimeMillis()
|
||||
var delay = if (it.downloadStartTime != 0L){
|
||||
it.downloadStartTime - currentTime
|
||||
|
|
@ -284,6 +282,12 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
|
|||
workRequest
|
||||
).enqueue()
|
||||
}
|
||||
items.forEach {
|
||||
it.id = repository.checkIfReDownloadingErroredOrCancelled(it)
|
||||
if (it.id != 0L){
|
||||
repository.delete(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -40,6 +40,7 @@ import com.google.android.material.button.MaterialButton
|
|||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import com.google.android.material.search.SearchBar
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.util.*
|
||||
|
|
@ -370,7 +371,9 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
|
|||
val bottomSheet = DownloadMultipleBottomSheetDialog(downloadList.toMutableList())
|
||||
bottomSheet.show(parentFragmentManager, "downloadMultipleSheet")
|
||||
} else {
|
||||
downloadViewModel.queueDownloads(downloadList)
|
||||
lifecycleScope.launch {
|
||||
downloadViewModel.queueDownloads(downloadList)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (viewIdName == "downloadAll") {
|
||||
|
|
@ -379,7 +382,9 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
|
|||
val bottomSheet = DownloadMultipleBottomSheetDialog(downloadList.toMutableList())
|
||||
bottomSheet.show(parentFragmentManager, "downloadMultipleSheet")
|
||||
} else {
|
||||
downloadViewModel.queueDownloads(downloadList)
|
||||
lifecycleScope.launch {
|
||||
downloadViewModel.queueDownloads(downloadList)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ import com.google.android.material.timepicker.MaterialTimePicker
|
|||
import com.google.android.material.timepicker.TimeFormat
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
|
@ -147,7 +148,9 @@ class DownloadBottomSheetDialog(private val resultItem: ResultItem, private val
|
|||
uiUtil.showDatePicker(fragmentManager) {
|
||||
val item: DownloadItem = getDownloadItem();
|
||||
item.downloadStartTime = it.timeInMillis
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
runBlocking {
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
|
@ -155,7 +158,9 @@ class DownloadBottomSheetDialog(private val resultItem: ResultItem, private val
|
|||
val download = view.findViewById<Button>(R.id.bottomsheet_download_button)
|
||||
download!!.setOnClickListener {
|
||||
val item: DownloadItem = getDownloadItem();
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
runBlocking {
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import com.google.android.material.timepicker.MaterialTimePicker
|
|||
import com.google.android.material.timepicker.TimeFormat
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.util.*
|
||||
|
||||
|
|
@ -98,14 +99,18 @@ class DownloadMultipleBottomSheetDialog(private var items: MutableList<DownloadI
|
|||
items.forEach { item ->
|
||||
item.downloadStartTime = it.timeInMillis
|
||||
}
|
||||
downloadViewModel.queueDownloads(items)
|
||||
runBlocking {
|
||||
downloadViewModel.queueDownloads(items)
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
val download = view.findViewById<Button>(R.id.bottomsheet_download_button)
|
||||
download!!.setOnClickListener {
|
||||
downloadViewModel.queueDownloads(items)
|
||||
runBlocking {
|
||||
downloadViewModel.queueDownloads(items)
|
||||
}
|
||||
dismiss()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@ class ActiveDownloadsFragment() : Fragment(), ActiveDownloadAdapter.OnItemClickL
|
|||
val outputText = view.findViewWithTag<TextView>("$id##output")
|
||||
|
||||
requireActivity().runOnUiThread {
|
||||
progressBar.setProgressCompat(progress, true)
|
||||
outputText.text = output
|
||||
progressBar?.setProgressCompat(progress, true)
|
||||
outputText?.text = output
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import android.widget.Toast
|
|||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
|
@ -29,6 +30,8 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
|
|||
import com.google.android.material.button.MaterialButton
|
||||
import com.google.android.material.chip.Chip
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
|
||||
|
||||
class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickListener {
|
||||
|
|
@ -85,7 +88,9 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic
|
|||
override fun onActionButtonClick(itemID: Long) {
|
||||
val item = items.find { it.id == itemID }
|
||||
if (item != null){
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
runBlocking {
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
}
|
||||
}else{
|
||||
Toast.makeText(requireContext(), getString(R.string.error_restarting_download), Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
|
@ -166,7 +171,9 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic
|
|||
val redownload = bottomSheet.findViewById<Button>(R.id.bottomsheet_redownload_button)
|
||||
redownload!!.tag = itemID
|
||||
redownload.setOnClickListener{
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
runBlocking {
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
}
|
||||
bottomSheet.cancel()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import android.widget.TextView
|
|||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
|
@ -32,6 +33,8 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
|
|||
import com.google.android.material.button.MaterialButton
|
||||
import com.google.android.material.chip.Chip
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import java.io.File
|
||||
|
||||
|
||||
|
|
@ -168,7 +171,9 @@ class ErroredDownloadsFragment() : Fragment(), GenericDownloadAdapter.OnItemClic
|
|||
val redownload = bottomSheet.findViewById<Button>(R.id.bottomsheet_redownload_button)
|
||||
redownload!!.tag = itemID
|
||||
redownload.setOnClickListener{
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
runBlocking{
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
}
|
||||
bottomSheet.cancel()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import androidx.appcompat.widget.SearchView
|
|||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
|
@ -40,6 +41,8 @@ import com.google.android.material.chip.Chip
|
|||
import com.google.android.material.chip.ChipGroup
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import java.io.File
|
||||
import java.text.DateFormat
|
||||
import java.text.SimpleDateFormat
|
||||
|
|
@ -473,7 +476,9 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{
|
|||
redownload!!.tag = itemID
|
||||
redownload.setOnClickListener{
|
||||
val downloadItem = downloadViewModel.createDownloadItemFromHistory(item)
|
||||
downloadViewModel.queueDownloads(listOf(downloadItem))
|
||||
runBlocking{
|
||||
downloadViewModel.queueDownloads(listOf(downloadItem))
|
||||
}
|
||||
historyViewModel.delete(item, false)
|
||||
bottomSheet!!.cancel()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ import com.google.android.material.chip.Chip
|
|||
import com.yausername.youtubedl_android.YoutubeDL
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.w3c.dom.Text
|
||||
import java.text.SimpleDateFormat
|
||||
|
|
@ -144,7 +145,9 @@ class QueuedDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickLi
|
|||
downloadViewModel.deleteDownload(item)
|
||||
item.downloadStartTime = it.timeInMillis
|
||||
WorkManager.getInstance(requireContext()).cancelUniqueWork(item.id.toString())
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
runBlocking {
|
||||
downloadViewModel.queueDownloads(listOf(item))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@
|
|||
android:ellipsize="end"
|
||||
android:gravity="bottom"
|
||||
android:maxLines="1"
|
||||
android:layout_marginTop="5dp"
|
||||
android:paddingStart="10dp"
|
||||
android:scrollbars="none"
|
||||
android:paddingEnd="10dp"
|
||||
|
|
|
|||
Loading…
Reference in a new issue