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 302c4bb0..754e7663 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 @@ -106,6 +106,9 @@ interface DownloadDao { @Query("SELECT * FROM downloads WHERE id=:id LIMIT 1") fun getDownloadById(id: Long) : DownloadItem + @Query("SELECT * FROM downloads WHERE id IN (:ids)") + fun getDownloadsByIds(ids: List) : List + @Query("SELECT id FROM downloads ORDER BY id DESC LIMIT 1") fun getLastDownloadId(): Long 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 b8f31293..2336f2c0 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 @@ -81,6 +81,10 @@ class DownloadRepository(private val downloadDao: DownloadDao) { return downloadDao.getDownloadById(id) } + fun getAllItemsByIDs(ids : List) : List{ + return downloadDao.getDownloadsByIds(ids) + } + fun getActiveDownloads() : List { return downloadDao.getActiveAndPausedDownloadsList() } 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 1321e52e..94bf4364 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 @@ -913,11 +913,20 @@ class DownloadViewModel(private val application: Application) : AndroidViewModel } - suspend fun updateItemsWithIdsToProcessingStatus(ids: List) : Type { + suspend fun updateItemsWithIdsToProcessingStatus(ids: List) { repository.deleteProcessing() dao.updateItemsToProcessing(ids) val first = dao.getFirstProcessingDownload() - return first.type + } + + suspend fun addDownloadsToProcessing(ids: List) { + repository.deleteProcessing() + val items = repository.getAllItemsByIDs(ids) + items.forEach { + it.id = 0 + it.status = DownloadRepository.Status.Processing.toString() + insert(it) + } } fun getURLsByStatus(list: List) : List { 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 e39e6f96..52b07b00 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt @@ -308,11 +308,9 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, SearchSuggesti arguments?.remove("showDownloadsWithUpdatedFormats") CoroutineScope(Dispatchers.IO).launch { val ids = arguments?.getLongArray("downloadIds") ?: return@launch - val type = downloadViewModel.updateItemsWithIdsToProcessingStatus(ids.toList()) + downloadViewModel.updateItemsWithIdsToProcessingStatus(ids.toList()) withContext(Dispatchers.Main){ - findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2, bundleOf( - Pair("type", type) - )) + findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2) } } } @@ -714,7 +712,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, SearchSuggesti downloadViewModel.insertToProcessing(downloadList) } - findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2, bundleOf(Pair("type", downloadList[0].type))) + findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2) } else { downloadList.chunked(100).forEach { downloadViewModel.queueDownloads(it) @@ -780,9 +778,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, SearchSuggesti downloadViewModel.insertToProcessing(downloadList) } - findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2, bundleOf( - Pair("type", downloadList[0].type) - )) + findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2) } else { downloadViewModel.queueDownloads(downloadList) } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt index 33782404..28bd0e76 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt @@ -81,7 +81,6 @@ class DownloadMultipleBottomSheetDialog : BottomSheetDialogFragment(), Configure private lateinit var bottomAppBar: BottomAppBar private lateinit var filesize : TextView private lateinit var sharedPreferences: SharedPreferences - private lateinit var type: DownloadViewModel.Type override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -99,16 +98,6 @@ class DownloadMultipleBottomSheetDialog : BottomSheetDialogFragment(), Configure val view = LayoutInflater.from(context).inflate(R.layout.download_multiple_bottom_sheet, null) dialog.setContentView(view) - arguments?.getSerializable("type").apply { - if (this == null){ - dismiss() - return - }else{ - type = this as DownloadViewModel.Type - } - } - - dialog.setOnShowListener { behavior = BottomSheetBehavior.from(view.parent as View) val displayMetrics = DisplayMetrics() @@ -196,20 +185,6 @@ class DownloadMultipleBottomSheetDialog : BottomSheetDialogFragment(), Configure bottomAppBar = view.findViewById(R.id.bottomAppBar) val preferredDownloadType = bottomAppBar.menu.findItem(R.id.preferred_download_type) - when(type){ - DownloadViewModel.Type.audio -> { - preferredDownloadType.setIcon(R.drawable.baseline_audio_file_24) - } - DownloadViewModel.Type.video -> { - preferredDownloadType.setIcon(R.drawable.baseline_video_file_24) - - } - DownloadViewModel.Type.command -> { - preferredDownloadType.setIcon(R.drawable.baseline_insert_drive_file_24) - } - - else -> {} - } val formatListener = object : OnFormatClickListener { override fun onFormatClick(selectedFormats: List) { @@ -234,9 +209,7 @@ class DownloadMultipleBottomSheetDialog : BottomSheetDialogFragment(), Configure dismiss() } } - if (type == DownloadViewModel.Type.command){ - bottomAppBar.menu[3].icon?.alpha = 30 - } + bottomAppBar.setOnMenuItemClickListener { m: MenuItem -> when (m.itemId) { R.id.folder -> { @@ -580,6 +553,24 @@ class DownloadMultipleBottomSheetDialog : BottomSheetDialogFragment(), Configure bottomAppBar.menu[1].icon?.alpha = 30 bottomAppBar.menu[3].icon?.alpha = 30 } + + val type = it.first().type + + when(type){ + DownloadViewModel.Type.audio -> { + preferredDownloadType.setIcon(R.drawable.baseline_audio_file_24) + } + DownloadViewModel.Type.video -> { + preferredDownloadType.setIcon(R.drawable.baseline_video_file_24) + + } + DownloadViewModel.Type.command -> { + preferredDownloadType.setIcon(R.drawable.baseline_insert_drive_file_24) + } + + else -> {} + } + } } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/SelectPlaylistItemsDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/SelectPlaylistItemsDialog.kt index c3e24ea5..f6dbb206 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/SelectPlaylistItemsDialog.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/SelectPlaylistItemsDialog.kt @@ -203,9 +203,7 @@ class SelectPlaylistItemsDialog : DialogFragment(), PlaylistAdapter.OnItemClickL downloadViewModel.insertToProcessing(downloadItems) } - findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2, bundleOf( - Pair("type", downloadItems[0].type) - )) + findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2) } dismiss() diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt index 24055443..69c5e191 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt @@ -1,7 +1,9 @@ package com.deniscerri.ytdlnis.ui.downloads +import android.annotation.SuppressLint import android.app.Activity import android.content.DialogInterface +import android.content.SharedPreferences import android.graphics.Canvas import android.graphics.Color import android.os.Bundle @@ -50,6 +52,7 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic private var activity: Activity? = null private lateinit var downloadViewModel : DownloadViewModel private lateinit var cancelledRecyclerView : RecyclerView + private lateinit var preferences : SharedPreferences private lateinit var adapter : GenericDownloadAdapter private lateinit var noResults : RelativeLayout private var actionMode : ActionMode? = null @@ -63,9 +66,11 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic fragmentView = inflater.inflate(R.layout.generic_list, container, false) activity = getActivity() downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] + preferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) return fragmentView } + @SuppressLint("RestrictedApi") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -80,7 +85,6 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic cancelledRecyclerView.forceFastScrollMode() cancelledRecyclerView.adapter = adapter cancelledRecyclerView.enableFastScroll() - val preferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) if (preferences.getStringSet("swipe_gesture", requireContext().getStringArray(R.array.swipe_gestures_values).toSet())!!.toList().contains("cancelled")){ val itemTouchHelper = ItemTouchHelper(simpleCallback) itemTouchHelper.attachToRecyclerView(cancelledRecyclerView) @@ -230,9 +234,20 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic }else{ adapter.checkedItems.toList() } - withContext(Dispatchers.IO){ - downloadViewModel.reQueueDownloadItems(selectedObjects) + + if (preferences.getBoolean("download_card", true)){ + withContext(Dispatchers.IO){ + downloadViewModel.addDownloadsToProcessing(selectedObjects) + } + withContext(Dispatchers.Main){ + findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2) + } + }else{ + withContext(Dispatchers.IO) { + downloadViewModel.reQueueDownloadItems(selectedObjects) + } } + adapter.clearCheckedItems() } runBlocking { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt index 5d31deab..83edf5b6 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt @@ -1,7 +1,9 @@ package com.deniscerri.ytdlnis.ui.downloads +import android.annotation.SuppressLint import android.app.Activity import android.content.DialogInterface +import android.content.SharedPreferences import android.graphics.Canvas import android.graphics.Color import android.os.Bundle @@ -51,6 +53,7 @@ class ErroredDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickL private var activity: Activity? = null private lateinit var downloadViewModel : DownloadViewModel private lateinit var erroredRecyclerView : RecyclerView + private lateinit var preferences : SharedPreferences private lateinit var noResults : RelativeLayout private lateinit var adapter : GenericDownloadAdapter private var actionMode : ActionMode? = null @@ -63,9 +66,11 @@ class ErroredDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickL fragmentView = inflater.inflate(R.layout.generic_list, container, false) activity = getActivity() downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] + preferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) return fragmentView } + @SuppressLint("RestrictedApi") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -80,7 +85,7 @@ class ErroredDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickL erroredRecyclerView.forceFastScrollMode() erroredRecyclerView.adapter = adapter erroredRecyclerView.enableFastScroll() - val preferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) + preferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) if (preferences.getStringSet("swipe_gesture", requireContext().getStringArray(R.array.swipe_gestures_values).toSet())!!.toList().contains("errored")){ val itemTouchHelper = ItemTouchHelper(simpleCallback) itemTouchHelper.attachToRecyclerView(erroredRecyclerView) @@ -235,10 +240,21 @@ class ErroredDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickL }else{ adapter.checkedItems.toList() } - adapter.clearCheckedItems() - withContext(Dispatchers.IO){ - downloadViewModel.reQueueDownloadItems(selectedObjects) + + if (preferences.getBoolean("download_card", true)){ + withContext(Dispatchers.IO){ + downloadViewModel.addDownloadsToProcessing(selectedObjects) + } + withContext(Dispatchers.Main){ + findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2) + } + }else{ + withContext(Dispatchers.IO) { + downloadViewModel.reQueueDownloadItems(selectedObjects) + } } + + adapter.clearCheckedItems() actionMode?.finish() } true diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/SavedDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/SavedDownloadsFragment.kt index c767d9c7..3a37601d 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/SavedDownloadsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/SavedDownloadsFragment.kt @@ -1,7 +1,9 @@ package com.deniscerri.ytdlnis.ui.downloads +import android.annotation.SuppressLint import android.app.Activity import android.content.DialogInterface +import android.content.SharedPreferences import android.graphics.Canvas import android.graphics.Color import android.os.Bundle @@ -51,6 +53,7 @@ class SavedDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickLis private lateinit var downloadViewModel : DownloadViewModel private lateinit var savedRecyclerView: RecyclerView private lateinit var adapter: GenericDownloadAdapter + private lateinit var preferences: SharedPreferences private lateinit var noResults: RelativeLayout private var actionMode : ActionMode? = null private var totalSize : Int = 0 @@ -62,9 +65,11 @@ class SavedDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickLis fragmentView = inflater.inflate(R.layout.generic_list, container, false) activity = getActivity() downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] + preferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) return fragmentView } + @SuppressLint("RestrictedApi") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -79,7 +84,7 @@ class SavedDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickLis savedRecyclerView.forceFastScrollMode() savedRecyclerView.enableFastScroll() savedRecyclerView.adapter = adapter - val preferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) + preferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) if (preferences.getStringSet("swipe_gesture", requireContext().getStringArray(R.array.swipe_gestures_values).toSet())!!.toList().contains("saved")){ val itemTouchHelper = ItemTouchHelper(simpleCallback) itemTouchHelper.attachToRecyclerView(savedRecyclerView) @@ -232,7 +237,18 @@ class SavedDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickLis adapter.checkedItems.toList() } adapter.clearCheckedItems() - downloadViewModel.deleteAllWithID(selectedObjects) + if (preferences.getBoolean("download_card", true)){ + withContext(Dispatchers.IO){ + downloadViewModel.addDownloadsToProcessing(selectedObjects) + } + withContext(Dispatchers.Main){ + findNavController().navigate(R.id.downloadMultipleBottomSheetDialog2) + } + }else{ + withContext(Dispatchers.IO) { + downloadViewModel.reQueueDownloadItems(selectedObjects) + } + } actionMode?.finish() } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt index 26946486..8465abb2 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/work/DownloadWorker.kt @@ -102,7 +102,7 @@ class DownloadWorker( val eligibleDownloads = items.take(if (concurrentDownloads < 0) 0 else concurrentDownloads).filter { it.id !in running } eligibleDownloads.forEach{downloadItem -> - val notification = notificationUtil.createDownloadServiceNotification(pendingIntent, downloadItem.title, downloadItem.id.toInt()) + val notification = notificationUtil.createDownloadServiceNotification(pendingIntent, downloadItem.title.ifEmpty { downloadItem.url }, downloadItem.id.toInt()) notificationUtil.notify(downloadItem.id.toInt(), notification) CoroutineScope(Dispatchers.IO).launch { @@ -150,7 +150,7 @@ class DownloadWorker( runCatching { YoutubeDL.getInstance().execute(request, downloadItem.id.toString()){ progress, _, line -> setProgressAsync(workDataOf("progress" to progress.toInt(), "output" to line.chunked(5000).first().toString(), "id" to downloadItem.id)) - val title: String = downloadItem.title + val title: String = downloadItem.title.ifEmpty { downloadItem.url } notificationUtil.updateDownloadNotification( downloadItem.id.toInt(), line, progress.toInt(), 0, title, diff --git a/app/src/main/res/xml/downloading_preferences.xml b/app/src/main/res/xml/downloading_preferences.xml index a2740394..e1c7c7c6 100644 --- a/app/src/main/res/xml/downloading_preferences.xml +++ b/app/src/main/res/xml/downloading_preferences.xml @@ -12,14 +12,6 @@ app:summary="@string/incognito_summary" app:title="@string/incognito" /> - - + +