Browse Source

OpenSubtitles: fix the login form not working in some cases

merge-requests/2174/head
Nicolas Pomepuy 1 year ago
committed by Duncan McNamara
parent
commit
f5a75f248e
  1. 8
      application/vlc-android/src/org/videolan/vlc/gui/dialogs/SubtitleDownloaderDialogFragment.kt
  2. 18
      application/vlc-android/src/org/videolan/vlc/viewmodels/SubtitlesModel.kt

8
application/vlc-android/src/org/videolan/vlc/gui/dialogs/SubtitleDownloaderDialogFragment.kt

@ -58,8 +58,6 @@ class SubtitleDownloaderDialogFragment : VLCBottomSheetDialogFragment() {
private lateinit var names: String
private lateinit var viewModel: SubtitlesModel
private lateinit var toast: Toast
private var lastUsername: String = ""
private var lastPassword: String = ""
private var state: SubDownloadDialogState = SubDownloadDialogState.Download
set(value) {
@ -145,12 +143,8 @@ class SubtitleDownloaderDialogFragment : VLCBottomSheetDialogFragment() {
binding.loginButton.setOnClickListener {
if (viewModel.observableUser.get()?.logged == true) {
viewModel.logout(settings)
viewModel.clearCredentials()
} else {
if (lastPassword == binding.password.text.toString() && lastUsername == binding.username.text.toString()) {
return@setOnClickListener
}
lastPassword = binding.password.text.toString()
lastUsername = binding.username.text.toString()
viewModel.login(
settings,
binding.username.text.toString(),

18
application/vlc-android/src/org/videolan/vlc/viewmodels/SubtitlesModel.kt

@ -86,6 +86,10 @@ class SubtitlesModel(context: Context, private val mediaUri: Uri, private val na
val observableError = ObservableField<Boolean>()
val observableResultDescription = ObservableField<Spanned>()
val observableResultDescriptionTalkback = ObservableField<String>()
private var lastUsername: String = ""
private var lastPassword: String = ""
val oldLanguagesMigration by lazy {
val newLangCodes = context.resources.getStringArray(R.array.language_values)
val oldLangCodes = context.resources.getStringArray(R.array.old_language_values)
@ -298,6 +302,9 @@ class SubtitlesModel(context: Context, private val mediaUri: Uri, private val na
}
fun login(settings: SharedPreferences, username: String, password: String) {
if (lastPassword == username && lastUsername == password) {
return
}
viewModelScope.launch {
withContext(Dispatchers.IO) {
try {
@ -313,11 +320,16 @@ class SubtitlesModel(context: Context, private val mediaUri: Uri, private val na
return@withContext
}
}
val code = call.code()
if (code == 401) {
lastPassword = password
lastUsername = username
}
observableUser.set(
OpenSubtitlesUser(
false,
null,
errorMessage = if (call.code() == 401) getContext().getString(R.string.login_error) else getContext().getString(
errorMessage = if (code == 401) getContext().getString(R.string.login_error) else getContext().getString(
R.string.unknown_error
)
)
@ -369,6 +381,10 @@ class SubtitlesModel(context: Context, private val mediaUri: Uri, private val na
}
fun saveLastUsedLanguage(lastUsedLanguages: List<String>) = Settings.getInstance(getContext()).putSingle(LAST_USED_LANGUAGES, lastUsedLanguages)
fun clearCredentials() {
lastPassword = ""
lastUsername = ""
}
class Factory(private val context: Context, private val mediaUri: Uri, private val name: String) : ViewModelProvider.NewInstanceFactory() {
override fun <T : ViewModel> create(modelClass: Class<T>): T {

Loading…
Cancel
Save