refactor: simplify download options storing and restoring logic

This commit is contained in:
Bnyro 2025-02-27 13:44:06 +01:00
parent ee2c3934bd
commit 644f012e32
No known key found for this signature in database
3 changed files with 35 additions and 48 deletions

View File

@ -23,6 +23,8 @@ class DownloadPlaylistDialog : DialogFragment() {
private lateinit var playlistName: String private lateinit var playlistName: String
private lateinit var playlistType: PlaylistType private lateinit var playlistType: PlaylistType
private val availableLanguages = LocaleHelper.getAvailableLocales()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -41,7 +43,6 @@ class DownloadPlaylistDialog : DialogFragment() {
} }
val possibleAudioQualities = resources.getStringArray(R.array.audioQualityBitrates) val possibleAudioQualities = resources.getStringArray(R.array.audioQualityBitrates)
.toList() .toList()
val availableLanguages = LocaleHelper.getAvailableLocales()
binding.videoSpinner.items = listOf(getString(R.string.no_video)) + possibleVideoQualities binding.videoSpinner.items = listOf(getString(R.string.no_video)) + possibleVideoQualities
binding.audioSpinner.items = listOf(getString(R.string.no_audio)) + possibleAudioQualities binding.audioSpinner.items = listOf(getString(R.string.no_audio)) + possibleAudioQualities
@ -57,31 +58,12 @@ class DownloadPlaylistDialog : DialogFragment() {
.setView(binding.root) .setView(binding.root)
.setPositiveButton(R.string.download) { _, _ -> .setPositiveButton(R.string.download) { _, _ ->
with(binding) { with(binding) {
val maxVideoQuality = if (videoSpinner.selectedItemPosition >= 1) { val maxVideoQuality = possibleVideoQualities.getOrNull(videoSpinner.selectedItemPosition - 1)
possibleVideoQualities[videoSpinner.selectedItemPosition - 1] .getWhileDigit()
.getWhileDigit() val maxAudioQuality = possibleAudioQualities.getOrNull(audioSpinner.selectedItemPosition - 1)
} else { .getWhileDigit()
null val captionLanguage = availableLanguages.getOrNull(subtitleSpinner.selectedItemPosition - 1)?.code
} val audioLanguage = availableLanguages.getOrNull(audioLanguageSpinner.selectedItemPosition - 1)?.code
val maxAudioQuality = if (audioSpinner.selectedItemPosition >= 1) {
possibleAudioQualities[audioSpinner.selectedItemPosition - 1]
.getWhileDigit()
} else {
null
}
val captionLanguage = if (subtitleSpinner.selectedItemPosition >= 1) {
availableLanguages[subtitleSpinner.selectedItemPosition - 1].code
} else {
null
}
val audioLanguage = if (audioLanguageSpinner.selectedItemPosition >= 1) {
availableLanguages[audioLanguageSpinner.selectedItemPosition - 1].code
} else {
null
}
saveSelections(binding) saveSelections(binding)
@ -109,36 +91,34 @@ class DownloadPlaylistDialog : DialogFragment() {
} }
private fun saveSelections(binding: DialogDownloadPlaylistBinding) { private fun saveSelections(binding: DialogDownloadPlaylistBinding) {
binding.audioSpinner.selectedItemPosition.let { index -> binding.audioSpinner.getSelectionIfNotFirst().let { item ->
val item = binding.audioSpinner.items[index].takeIf { index != 0 }
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, item.orEmpty()) PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, item.orEmpty())
} }
binding.videoSpinner.selectedItemPosition.let { index -> binding.videoSpinner.getSelectionIfNotFirst().let { item ->
val item = binding.videoSpinner.items[index].takeIf { index != 0 }
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_VIDEO_QUALITY, item.orEmpty()) PreferenceHelper.putString(PLAYLIST_DOWNLOAD_VIDEO_QUALITY, item.orEmpty())
} }
binding.audioLanguageSpinner.selectedItemPosition.let { index -> binding.audioLanguageSpinner.selectedItemPosition.let { index ->
val item = binding.audioLanguageSpinner.items[index].takeIf { index != 0 } val language = availableLanguages.getOrNull(index - 1)
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, item.orEmpty()) PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, language?.code.orEmpty())
} }
binding.subtitleSpinner.selectedItemPosition.let { index -> binding.subtitleSpinner.selectedItemPosition.let { index ->
val item = binding.subtitleSpinner.items[index].takeIf { index != 0 } val language = availableLanguages.getOrNull(index - 1)
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, item.orEmpty()) PreferenceHelper.putString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, language?.code.orEmpty())
} }
} }
private fun restoreSelections(binding: DialogDownloadPlaylistBinding) { private fun restoreSelections(binding: DialogDownloadPlaylistBinding) {
val videoQuality = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_VIDEO_QUALITY, "") val videoQuality = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_VIDEO_QUALITY, "")
binding.videoSpinner.selectedItemPosition = binding.videoSpinner.items.indexOf(videoQuality).takeIf { it != -1 } ?: 0 binding.videoSpinner.setSelection(videoQuality)
val audioQuality = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, "") val audioQuality = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, "")
binding.audioSpinner.selectedItemPosition = binding.audioSpinner.items.indexOf(audioQuality).takeIf { it != -1 } ?: 0 binding.audioSpinner.setSelection(audioQuality)
val audioLanguage = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, "") val audioLanguage = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, "")
binding.audioLanguageSpinner.selectedItemPosition = binding.audioLanguageSpinner.items.indexOf(audioLanguage).takeIf { it != -1 } ?: 0 binding.audioLanguageSpinner.setSelection(audioLanguage)
val captionLanguage = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, "") val captionLanguage = PreferenceHelper.getString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, "")
binding.subtitleSpinner.selectedItemPosition = binding.subtitleSpinner.items.indexOf(captionLanguage).takeIf { it != -1 } ?: 0 binding.subtitleSpinner.setSelection(captionLanguage)
} }
companion object { companion object {

View File

@ -86,7 +86,7 @@ class SubmitDeArrowDialog: DialogFragment() {
val userID = PreferenceHelper.getSponsorBlockUserID() val userID = PreferenceHelper.getSponsorBlockUserID()
val userAgent = TextUtils.getUserAgent(context) val userAgent = TextUtils.getUserAgent(context)
val title = binding.dearrowTitle.text val title = binding.dearrowTitle.selectedItem
.takeIf { it.isNotEmpty() && binding.titleCheckbox.isChecked } .takeIf { it.isNotEmpty() && binding.titleCheckbox.isChecked }
?.let { DeArrowSubmitTitle(it) } ?.let { DeArrowSubmitTitle(it) }
val thumbnail = binding.thumbnailTime.text.toString().parseDurationString() val thumbnail = binding.thumbnailTime.text.toString().parseDurationString()

View File

@ -38,15 +38,7 @@ class DropdownMenu(
get() = adapter.getPosition(binding.autoCompleteTextView.text.toString()) get() = adapter.getPosition(binding.autoCompleteTextView.text.toString())
set(index) = binding.autoCompleteTextView.setText(adapter.getItem(index), false) set(index) = binding.autoCompleteTextView.setText(adapter.getItem(index), false)
val text get() = binding.autoCompleteTextView.text.toString() val selectedItem get() = binding.autoCompleteTextView.text.toString()
override fun setEnabled(enabled: Boolean) {
binding.textInputLayout.isEnabled = enabled
}
override fun isEnabled(): Boolean {
return binding.textInputLayout.isEnabled
}
var typingEnabled: Boolean var typingEnabled: Boolean
set(enabled) { set(enabled) {
@ -54,6 +46,21 @@ class DropdownMenu(
} }
get() = binding.autoCompleteTextView.inputType != InputType.TYPE_NULL get() = binding.autoCompleteTextView.inputType != InputType.TYPE_NULL
override fun setEnabled(enabled: Boolean) {
binding.textInputLayout.isEnabled = enabled
}
override fun isEnabled() = binding.textInputLayout.isEnabled
fun setSelection(item: String) {
val itemIndex = items.indexOf(item)
if (itemIndex != -1) selectedItemPosition = itemIndex
}
fun getSelectionIfNotFirst(): String? {
return selectedItem.takeIf { selectedItemPosition != 0 }
}
init { init {
context.obtainStyledAttributes(attributeSet, R.styleable.DropdownMenu, 0, 0).use { context.obtainStyledAttributes(attributeSet, R.styleable.DropdownMenu, 0, 0).use {
binding.textInputLayout.hint = it.getString(R.styleable.DropdownMenu_hint) binding.textInputLayout.hint = it.getString(R.styleable.DropdownMenu_hint)