From ca6f5f6f20f0bd142a089fba92196633d8ad4bd3 Mon Sep 17 00:00:00 2001 From: deniscerri <64997243+deniscerri@users.noreply.github.com> Date: Tue, 14 Mar 2023 17:37:40 +0100 Subject: [PATCH] fixed app not downloading multiple items --- .../ytdlnis/adapter/HistoryAdapter.kt | 14 +++++++----- .../ytdlnis/database/dao/DownloadDao.kt | 3 +++ .../database/repository/DownloadRepository.kt | 4 ++++ .../database/viewmodel/DownloadViewModel.kt | 22 +++++++++++-------- .../com/deniscerri/ytdlnis/ui/HomeFragment.kt | 9 ++++++-- .../downloadcard/DownloadBottomSheetDialog.kt | 9 ++++++-- .../DownloadMultipleBottomSheetDialog.kt | 9 ++++++-- .../ui/downloads/ActiveDownloadsFragment.kt | 4 ++-- .../downloads/CancelledDownloadsFragment.kt | 11 ++++++++-- .../ui/downloads/ErroredDownloadsFragment.kt | 7 +++++- .../ytdlnis/ui/downloads/HistoryFragment.kt | 7 +++++- .../ui/downloads/QueuedDownloadsFragment.kt | 5 ++++- .../main/res/layout/active_download_card.xml | 1 + 13 files changed, 77 insertions(+), 28 deletions(-) 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 b06b51fb..68d84f15 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt @@ -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(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(R.id.downloads_download_button_type) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/DownloadDao.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/DownloadDao.kt index 1f9333e4..4191bb73 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/DownloadDao.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/DownloadDao.kt @@ -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) : List + @Query("DELETE FROM downloads") suspend fun deleteAll() diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt index 9e1e88c7..73139c38 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt @@ -22,6 +22,10 @@ class DownloadRepository(private val downloadDao: DownloadDao) { return downloadDao.insert(item) } + suspend fun insertAll(items: List) : List { + return downloadDao.insertAll(items) + } + suspend fun delete(item: DownloadItem){ downloadDao.delete(item.id) } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt index 6088b331..346eadb1 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt @@ -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)= viewModelScope.launch(Dispatchers.IO) { + suspend fun queueDownloads(items: List) { val context = getApplication().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) + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt index 36993db3..b368e75d 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt @@ -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) + } } } } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt index 23c3b2e7..d8ab7e87 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadBottomSheetDialog.kt @@ -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