From ee2c3934bdaea2221759af2d09e8fbd73f782095 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Thu, 27 Feb 2025 13:28:34 +0100 Subject: [PATCH] feat: remember previous playlist download options --- .../ui/dialogs/DownloadPlaylistDialog.kt | 49 ++++++++++++++++++- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/DownloadPlaylistDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/DownloadPlaylistDialog.kt index b626b7518..7cadde1bf 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/DownloadPlaylistDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/DownloadPlaylistDialog.kt @@ -13,6 +13,7 @@ import com.github.libretube.enums.PlaylistType import com.github.libretube.extensions.getWhileDigit import com.github.libretube.extensions.serializable import com.github.libretube.helpers.LocaleHelper +import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.services.PlaylistDownloadEnqueueService import com.github.libretube.util.TextUtils import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -26,7 +27,8 @@ class DownloadPlaylistDialog : DialogFragment() { super.onCreate(savedInstanceState) playlistId = requireArguments().getString(IntentData.playlistId)!! - playlistName = requireArguments().getString(IntentData.playlistName) ?: TextUtils.getFileSafeTimeStampNow() + playlistName = requireArguments().getString(IntentData.playlistName) + ?: TextUtils.getFileSafeTimeStampNow() playlistType = requireArguments().serializable(IntentData.playlistType)!! } @@ -38,6 +40,7 @@ class DownloadPlaylistDialog : DialogFragment() { it.subList(1, it.size) } val possibleAudioQualities = resources.getStringArray(R.array.audioQualityBitrates) + .toList() val availableLanguages = LocaleHelper.getAvailableLocales() binding.videoSpinner.items = listOf(getString(R.string.no_video)) + possibleVideoQualities @@ -47,6 +50,8 @@ class DownloadPlaylistDialog : DialogFragment() { binding.audioLanguageSpinner.items = listOf(getString(R.string.default_language)) + availableLanguages.map { it.name } + restoreSelections(binding) + return MaterialAlertDialogBuilder(requireContext()) .setTitle(getString(R.string.download_playlist) + ": " + playlistName) .setView(binding.root) @@ -78,6 +83,8 @@ class DownloadPlaylistDialog : DialogFragment() { null } + saveSelections(binding) + if (maxVideoQuality == null && maxAudioQuality == null) { Toast.makeText(context, R.string.nothing_selected, Toast.LENGTH_SHORT) .show() @@ -100,4 +107,44 @@ class DownloadPlaylistDialog : DialogFragment() { .setNegativeButton(R.string.cancel, null) .show() } + + private fun saveSelections(binding: DialogDownloadPlaylistBinding) { + binding.audioSpinner.selectedItemPosition.let { index -> + val item = binding.audioSpinner.items[index].takeIf { index != 0 } + PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, item.orEmpty()) + } + binding.videoSpinner.selectedItemPosition.let { index -> + val item = binding.videoSpinner.items[index].takeIf { index != 0 } + PreferenceHelper.putString(PLAYLIST_DOWNLOAD_VIDEO_QUALITY, item.orEmpty()) + } + binding.audioLanguageSpinner.selectedItemPosition.let { index -> + val item = binding.audioLanguageSpinner.items[index].takeIf { index != 0 } + PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, item.orEmpty()) + } + binding.subtitleSpinner.selectedItemPosition.let { index -> + val item = binding.subtitleSpinner.items[index].takeIf { index != 0 } + PreferenceHelper.putString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, item.orEmpty()) + } + } + + private fun restoreSelections(binding: DialogDownloadPlaylistBinding) { + val videoQuality = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_VIDEO_QUALITY, "") + binding.videoSpinner.selectedItemPosition = binding.videoSpinner.items.indexOf(videoQuality).takeIf { it != -1 } ?: 0 + + val audioQuality = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, "") + binding.audioSpinner.selectedItemPosition = binding.audioSpinner.items.indexOf(audioQuality).takeIf { it != -1 } ?: 0 + + val audioLanguage = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, "") + binding.audioLanguageSpinner.selectedItemPosition = binding.audioLanguageSpinner.items.indexOf(audioLanguage).takeIf { it != -1 } ?: 0 + + val captionLanguage = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, "") + binding.subtitleSpinner.selectedItemPosition = binding.subtitleSpinner.items.indexOf(captionLanguage).takeIf { it != -1 } ?: 0 + } + + companion object { + private const val PLAYLIST_DOWNLOAD_VIDEO_QUALITY = "playlist_download_video_quality" + private const val PLAYLIST_DOWNLOAD_AUDIO_QUALITY = "playlist_download_audio_quality" + private const val PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE = "playlist_download_audio_language" + private const val PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE = "playlist_download_caption_language" + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 906d266ab..1e7efdaf7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -331,7 +331,7 @@ Audio track Unsupported file format: %1$s Use HLS - Use HLS instead of DASH for streaming media. Try toggling this option if video playback doesn't work. + Use HLS instead of DASH for streaming media. Try toggling this option if video playback doesn\'t work. Auto Limit to runtime Trends