Przeglądaj źródła

feat(LoginUI): bind loginData to `result`

Xwite 4 lat temu
rodzic
commit
10471bed0b

+ 5 - 13
app/src/main/java/io/legado/app/ui/login/SourceLoginDialog.kt

@@ -72,8 +72,9 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
                             // JavaScript
                             rowUi.action?.let {
                                 kotlin.runCatching {
-                                    saveLoginData(source, loginUi)
-                                    source.evalJS(it)
+                                    source.evalJS(it) {
+                                        put("result", getLoginData(loginUi))
+                                    }
                                 }.onFailure {
                                     AppLog.put("LoginUI Button ${rowUi.name} JavaScript error", it)
                                 }
@@ -104,9 +105,9 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
         }
     }
 
-    private fun getLoginData(loginUi: List<RowUi>): HashMap<String, String> {
+    private fun getLoginData(loginUi: List<RowUi>?): HashMap<String, String> {
         val loginData = hashMapOf<String, String>()
-        loginUi.forEachIndexed { index, rowUi ->
+        loginUi?.forEachIndexed { index, rowUi ->
             when (rowUi.type) {
                 "text", "password" -> {
                     val rowView = binding.root.findViewById<View>(index)
@@ -119,15 +120,6 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) {
         return loginData
     }
 
-    private fun saveLoginData(source: BaseSource, loginUi: List<RowUi>) {
-        val loginData = getLoginData(loginUi)
-        if (loginData.isEmpty()) {
-            source.removeLoginInfo()
-        } else {
-            source.putLoginInfo(GSON.toJson(loginData))
-        }
-    }
-
     private fun login(source: BaseSource, loginData: HashMap<String, String>) {
         launch(IO) {
             if (loginData.isEmpty()) {