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 0f4681c8..b2cfc74e 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 @@ -19,6 +19,9 @@ interface DownloadDao { @Query("SELECT * FROM downloads WHERE status='Active'") fun getActiveDownloadsList() : List + @Query("SELECT * FROM downloads WHERE status='Active' or status='Queued'") + fun getActiveAndQueuedDownloadsList() : List + @Query("SELECT * FROM downloads WHERE status='Queued' ORDER BY downloadStartTime, id") fun getQueuedDownloads() : LiveData> 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 5cab3019..fd43898f 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 @@ -49,6 +49,10 @@ class DownloadRepository(private val downloadDao: DownloadDao) { return downloadDao.getActiveDownloadsList() } + fun getActiveAndQueuedDownloads() : List { + return downloadDao.getActiveAndQueuedDownloadsList() + } + suspend fun deleteCancelled(){ downloadDao.deleteCancelled() } @@ -61,9 +65,6 @@ class DownloadRepository(private val downloadDao: DownloadDao) { downloadDao.cancelQueued() } - fun checkIfPresentForProcessing(item: ResultItem): DownloadItem{ - return downloadDao.checkIfErrorOrCancelled(item.url) - } fun checkIfReDownloadingErroredOrCancelled(item: DownloadItem) : Long { val converters = Converters() 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 b68d1883..2a2c58b5 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 @@ -354,14 +354,33 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel return repository.getActiveDownloads() } + fun getActiveAndQueuedDownloads() : List{ + return repository.getActiveAndQueuedDownloads() + } + suspend fun queueDownloads(items: List) { val context = getApplication().applicationContext + val activeAndQueuedDownloads = withContext(Dispatchers.IO){ + repository.getActiveAndQueuedDownloads() + } val allowMeteredNetworks = sharedPreferences.getBoolean("metered_networks", true) - 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 queuedItems = mutableListOf() + items.forEach { + it.status = DownloadRepository.Status.Queued.toString() + if (activeAndQueuedDownloads.firstOrNull{d -> + d.id = 0 + d.status = DownloadRepository.Status.Queued.toString() + d.toString() == it.toString() + } != null) { + Toast.makeText(context, context.getString(R.string.download_already_exists), Toast.LENGTH_LONG).show() + }else{ + it.id = withContext(Dispatchers.IO){ + repository.insert(it) + } + queuedItems.add(it) + } + } + queuedItems.forEach { val currentTime = System.currentTimeMillis() var delay = if (it.downloadStartTime != 0L){ it.downloadStartTime - currentTime @@ -383,8 +402,7 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel ExistingWorkPolicy.KEEP, workRequest ).enqueue() - } - items.forEach { + it.id = withContext(Dispatchers.IO){ repository.checkIfReDownloadingErroredOrCancelled(it) } @@ -392,6 +410,7 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel repository.delete(it) } } + val isCurrentNetworkMetered = (context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).isActiveNetworkMetered if (!allowMeteredNetworks && isCurrentNetworkMetered){ Toast.makeText(context, context.getString(R.string.metered_network_download_start_info), Toast.LENGTH_LONG).show() 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 f08f7072..13278ab4 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 @@ -154,7 +154,12 @@ class DownloadBottomSheetDialog(private val resultItem: ResultItem, private val viewPager2.setPageTransformer(BackgroundToForegroundPageTransformer()) val scheduleBtn = view.findViewById(R.id.bottomsheet_schedule_button) + val download = view.findViewById