SourceLoginDialog.kt 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package eu.kanade.tachiyomi.widget.preference
  2. import android.os.Bundle
  3. import android.view.View
  4. import eu.kanade.tachiyomi.R
  5. import eu.kanade.tachiyomi.source.Source
  6. import eu.kanade.tachiyomi.source.SourceManager
  7. import eu.kanade.tachiyomi.source.online.LoginSource
  8. import eu.kanade.tachiyomi.util.toast
  9. import kotlinx.android.synthetic.main.pref_account_login.view.*
  10. import rx.android.schedulers.AndroidSchedulers
  11. import rx.schedulers.Schedulers
  12. import uy.kohesive.injekt.injectLazy
  13. class SourceLoginDialog : LoginDialogPreference() {
  14. companion object {
  15. fun newInstance(source: Source): LoginDialogPreference {
  16. val fragment = SourceLoginDialog()
  17. val bundle = Bundle(1)
  18. bundle.putLong("key", source.id)
  19. fragment.arguments = bundle
  20. return fragment
  21. }
  22. }
  23. val sourceManager: SourceManager by injectLazy()
  24. lateinit var source: LoginSource
  25. override fun onCreate(savedInstanceState: Bundle?) {
  26. super.onCreate(savedInstanceState)
  27. val sourceId = arguments.getLong("key")
  28. source = sourceManager.get(sourceId) as LoginSource
  29. }
  30. override fun setCredentialsOnView(view: View) = with(view) {
  31. dialog_title.text = getString(R.string.login_title, source.toString())
  32. username.setText(preferences.sourceUsername(source))
  33. password.setText(preferences.sourcePassword(source))
  34. }
  35. override fun checkLogin() {
  36. requestSubscription?.unsubscribe()
  37. v?.apply {
  38. if (username.text.isEmpty() || password.text.isEmpty())
  39. return
  40. login.progress = 1
  41. requestSubscription = source.login(username.text.toString(), password.text.toString())
  42. .subscribeOn(Schedulers.io())
  43. .observeOn(AndroidSchedulers.mainThread())
  44. .subscribe({ logged ->
  45. if (logged) {
  46. preferences.setSourceCredentials(source,
  47. username.text.toString(),
  48. password.text.toString())
  49. dialog.dismiss()
  50. context.toast(R.string.login_success)
  51. } else {
  52. preferences.setSourceCredentials(source, "", "")
  53. login.progress = -1
  54. }
  55. }, { error ->
  56. login.progress = -1
  57. login.setText(R.string.unknown_error)
  58. error.message?.let { context.toast(it) }
  59. })
  60. }
  61. }
  62. }