Merge pull request #7135 from Bnyro/master

refactor: simplify download options storing and restoring logic
This commit is contained in:
Bnyro 2025-02-27 13:44:23 +01:00 committed by GitHub
commit 3901187b80
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
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 playlistType: PlaylistType
private val availableLanguages = LocaleHelper.getAvailableLocales()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -41,7 +43,6 @@ class DownloadPlaylistDialog : DialogFragment() {
}
val possibleAudioQualities = resources.getStringArray(R.array.audioQualityBitrates)
.toList()
val availableLanguages = LocaleHelper.getAvailableLocales()
binding.videoSpinner.items = listOf(getString(R.string.no_video)) + possibleVideoQualities
binding.audioSpinner.items = listOf(getString(R.string.no_audio)) + possibleAudioQualities
@ -57,31 +58,12 @@ class DownloadPlaylistDialog : DialogFragment() {
.setView(binding.root)
.setPositiveButton(R.string.download) { _, _ ->
with(binding) {
val maxVideoQuality = if (videoSpinner.selectedItemPosition >= 1) {
possibleVideoQualities[videoSpinner.selectedItemPosition - 1]
.getWhileDigit()
} else {
null
}
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
}
val maxVideoQuality = possibleVideoQualities.getOrNull(videoSpinner.selectedItemPosition - 1)
.getWhileDigit()
val maxAudioQuality = possibleAudioQualities.getOrNull(audioSpinner.selectedItemPosition - 1)
.getWhileDigit()
val captionLanguage = availableLanguages.getOrNull(subtitleSpinner.selectedItemPosition - 1)?.code
val audioLanguage = availableLanguages.getOrNull(audioLanguageSpinner.selectedItemPosition - 1)?.code
saveSelections(binding)
@ -109,36 +91,34 @@ class DownloadPlaylistDialog : DialogFragment() {
}
private fun saveSelections(binding: DialogDownloadPlaylistBinding) {
binding.audioSpinner.selectedItemPosition.let { index ->
val item = binding.audioSpinner.items[index].takeIf { index != 0 }
binding.audioSpinner.getSelectionIfNotFirst().let { item ->
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_QUALITY, item.orEmpty())
}
binding.videoSpinner.selectedItemPosition.let { index ->
val item = binding.videoSpinner.items[index].takeIf { index != 0 }
binding.videoSpinner.getSelectionIfNotFirst().let { item ->
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())
val language = availableLanguages.getOrNull(index - 1)
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_AUDIO_LANGUAGE, language?.code.orEmpty())
}
binding.subtitleSpinner.selectedItemPosition.let { index ->
val item = binding.subtitleSpinner.items[index].takeIf { index != 0 }
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, item.orEmpty())
val language = availableLanguages.getOrNull(index - 1)
PreferenceHelper.putString(PLAYLIST_DOWNLOAD_CAPTION_LANGUAGE, language?.code.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
binding.videoSpinner.setSelection(videoQuality)
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, "")
binding.audioLanguageSpinner.selectedItemPosition = binding.audioLanguageSpinner.items.indexOf(audioLanguage).takeIf { it != -1 } ?: 0
binding.audioLanguageSpinner.setSelection(audioLanguage)
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 {

View File

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

View File

@ -38,15 +38,7 @@ class DropdownMenu(
get() = adapter.getPosition(binding.autoCompleteTextView.text.toString())
set(index) = binding.autoCompleteTextView.setText(adapter.getItem(index), false)
val text get() = binding.autoCompleteTextView.text.toString()
override fun setEnabled(enabled: Boolean) {
binding.textInputLayout.isEnabled = enabled
}
override fun isEnabled(): Boolean {
return binding.textInputLayout.isEnabled
}
val selectedItem get() = binding.autoCompleteTextView.text.toString()
var typingEnabled: Boolean
set(enabled) {
@ -54,6 +46,21 @@ class DropdownMenu(
}
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 {
context.obtainStyledAttributes(attributeSet, R.styleable.DropdownMenu, 0, 0).use {
binding.textInputLayout.hint = it.getString(R.styleable.DropdownMenu_hint)