fixed app not downloading multiple items

pull/51/head
deniscerri 3 years ago
parent 4d959a0b05
commit ca6f5f6f20
No known key found for this signature in database
GPG Key ID: 95C43D517D830350

@ -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…
Cancel
Save