From ee4d422bf0d193ed586b0163eeec54e593aebd2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C3=87erri?= <64997243+deniscerri@users.noreply.github.com> Date: Sat, 25 Feb 2023 21:32:17 +0100 Subject: [PATCH] added mtime preference & format updating on empty formatted results --- .idea/assetWizardSettings.xml | 4 +- .../ytdlnis/database/models/ResultItem.kt | 2 +- .../ui/downloadcard/DownloadAudioFragment.kt | 2 +- .../ui/downloadcard/DownloadVideoFragment.kt | 29 +++++++---- .../FormatSelectionBottomSheetDialog.kt | 34 ++++++++++-- .../ytdlnis/ui/settings/SettingsFragment.kt | 10 ++++ .../com/deniscerri/ytdlnis/util/UiUtil.kt | 3 ++ .../deniscerri/ytdlnis/work/DownloadWorker.kt | 17 +++--- app/src/main/res/drawable/ic_refresh.xml | 5 ++ .../res/layout/format_select_bottom_sheet.xml | 52 +++++++++++++++---- app/src/main/res/values/strings.xml | 4 ++ app/src/main/res/xml/root_preferences.xml | 7 +++ 12 files changed, 133 insertions(+), 36 deletions(-) create mode 100644 app/src/main/res/drawable/ic_refresh.xml diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 67e0dae6..52269cb2 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -320,7 +320,7 @@ @@ -330,7 +330,7 @@ diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/ResultItem.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/ResultItem.kt index c3a945d0..22981e6d 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/ResultItem.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/ResultItem.kt @@ -17,6 +17,6 @@ data class ResultItem( val thumb: String, val website: String, var playlistTitle: String, - val formats: ArrayList, + var formats: ArrayList, var creationTime: Long = System.currentTimeMillis() / 1000, ) \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt index bac99288..d3d6f40e 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadAudioFragment.kt @@ -146,7 +146,7 @@ class DownloadAudioFragment(private var resultItem: ResultItem) : Fragment() { formats.forEach { Log.e("aa", it.toString()) } - val bottomSheet = FormatSelectionBottomSheetDialog(formats, listener) + val bottomSheet = FormatSelectionBottomSheetDialog(downloadItem, formats, listener) bottomSheet.show(parentFragmentManager, "formatSheet") } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt index 269c2ab4..82177403 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadVideoFragment.kt @@ -5,31 +5,31 @@ import android.content.Intent import android.os.Bundle import android.text.Editable import android.text.TextWatcher +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.* +import android.widget.ArrayAdapter +import android.widget.AutoCompleteTextView +import android.widget.TextView import androidx.activity.result.contract.ActivityResultContracts import androidx.constraintlayout.widget.ConstraintLayout import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope -import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.database.models.DownloadItem import com.deniscerri.ytdlnis.database.models.Format import com.deniscerri.ytdlnis.database.models.ResultItem import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel +import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel.Type import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel import com.deniscerri.ytdlnis.databinding.FragmentHomeBinding import com.deniscerri.ytdlnis.util.FileUtil +import com.deniscerri.ytdlnis.util.UiUtil import com.google.android.material.chip.Chip import com.google.android.material.textfield.TextInputLayout -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel.Type -import com.deniscerri.ytdlnis.util.UiUtil class DownloadVideoFragment(private val resultItem: ResultItem) : Fragment() { @@ -37,6 +37,7 @@ class DownloadVideoFragment(private val resultItem: ResultItem) : Fragment() { private var fragmentView: View? = null private var activity: Activity? = null private lateinit var downloadViewModel : DownloadViewModel + private lateinit var resultViewModel: ResultViewModel private lateinit var fileUtil : FileUtil private lateinit var uiUtil : UiUtil @@ -55,6 +56,7 @@ class DownloadVideoFragment(private val resultItem: ResultItem) : Fragment() { fragmentView = inflater.inflate(R.layout.fragment_download_video, container, false) activity = getActivity() downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] + resultViewModel = ViewModelProvider(this)[ResultViewModel::class.java] downloadItem = downloadViewModel.createDownloadItemFromResult(resultItem, Type.video) fileUtil = FileUtil() uiUtil = UiUtil(fileUtil) @@ -107,7 +109,7 @@ class DownloadVideoFragment(private val resultItem: ResultItem) : Fragment() { videoPathResultLauncher.launch(intent) } - val formats = mutableListOf() + var formats = mutableListOf() formats.addAll(resultItem.formats.filter { !it.format_note.contains("audio", ignoreCase = true) }) if (formats.isEmpty()) { val videoFormats = resources.getStringArray(R.array.video_formats) @@ -140,19 +142,28 @@ class DownloadVideoFragment(private val resultItem: ResultItem) : Fragment() { val listener = object : OnFormatClickListener { override fun onFormatClick(allFormats: List, item: Format) { downloadItem.format = item + Log.e("Aa", item.toString()) if (containers.contains(item.container)){ downloadItem.format.container = item.container containerAutoCompleteTextView.setText(item.container, false) }else{ - downloadItem.format.container = containers[0] containerAutoCompleteTextView.setText(containers[0], false) } + if (resultItem.formats.isEmpty()){ + resultItem.formats = ArrayList(allFormats) + }else{ + resultItem.formats = ArrayList(resultItem.formats.filter { it.format_note.contains("audio", ignoreCase = true) }) + resultItem.formats.addAll(allFormats) + } + resultViewModel.update(resultItem) + formats = allFormats.toMutableList() + Log.e("Aa", item.toString()) uiUtil.populateFormatCard(formatCard, item) } } formatCard.setOnClickListener{_ -> - val bottomSheet = FormatSelectionBottomSheetDialog(formats, listener) + val bottomSheet = FormatSelectionBottomSheetDialog(downloadItem, formats, listener) bottomSheet.show(parentFragmentManager, "formatSheet") } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt index 73f75acc..f5f658a2 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/FormatSelectionBottomSheetDialog.kt @@ -11,10 +11,7 @@ import android.util.Log import android.view.Display import android.view.LayoutInflater import android.view.View -import android.widget.Adapter -import android.widget.Button -import android.widget.LinearLayout -import android.widget.TextView +import android.widget.* import androidx.constraintlayout.widget.ConstraintLayout import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.view.get @@ -28,6 +25,7 @@ import com.deniscerri.ytdlnis.database.models.ResultItem import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel.Type import com.deniscerri.ytdlnis.util.FileUtil +import com.deniscerri.ytdlnis.util.InfoUtil import com.deniscerri.ytdlnis.util.UiUtil import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialogFragment @@ -42,15 +40,17 @@ import com.google.android.material.timepicker.TimeFormat import java.util.* -class FormatSelectionBottomSheetDialog(private val formats: List, private val listener: OnFormatClickListener) : BottomSheetDialogFragment() { +class FormatSelectionBottomSheetDialog(private val item: DownloadItem, private var formats: List, private val listener: OnFormatClickListener) : BottomSheetDialogFragment() { private lateinit var behavior: BottomSheetBehavior private lateinit var fileUtil: FileUtil + private lateinit var infoUtil: InfoUtil private lateinit var uiUtil: UiUtil override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) fileUtil = FileUtil() uiUtil = UiUtil(fileUtil) + infoUtil = InfoUtil(requireActivity().applicationContext) } @@ -68,7 +68,31 @@ class FormatSelectionBottomSheetDialog(private val formats: List, privat } val linearLayout = view.findViewById(R.id.format_list_linear_layout) + addFormatsToView(linearLayout) + val refreshBtn = view.findViewById