|  |  |  | @ -11,6 +11,7 @@ import io.legado.app.R | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.base.BaseDialogFragment | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.constant.AppLog | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.data.entities.BaseSource | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.data.entities.rule.RowUi | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.databinding.DialogLoginBinding | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.databinding.ItemFilletTextBinding | 
			
		
	
		
			
				
					|  |  |  |  | import io.legado.app.databinding.ItemSourceEditBinding | 
			
		
	
	
		
			
				
					|  |  |  | @ -71,6 +72,7 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) { | 
			
		
	
		
			
				
					|  |  |  |  |                             // JavaScript | 
			
		
	
		
			
				
					|  |  |  |  |                             rowUi.action?.let { | 
			
		
	
		
			
				
					|  |  |  |  |                                 kotlin.runCatching { | 
			
		
	
		
			
				
					|  |  |  |  |                                     saveLoginData(source, loginUi) | 
			
		
	
		
			
				
					|  |  |  |  |                                     source.evalJS(it) | 
			
		
	
		
			
				
					|  |  |  |  |                                 }.onFailure { | 
			
		
	
		
			
				
					|  |  |  |  |                                     AppLog.put("LoginUI Button ${rowUi.name} JavaScript error", it) | 
			
		
	
	
		
			
				
					|  |  |  | @ -86,17 +88,7 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) { | 
			
		
	
		
			
				
					|  |  |  |  |         binding.toolBar.setOnMenuItemClickListener { item -> | 
			
		
	
		
			
				
					|  |  |  |  |             when (item.itemId) { | 
			
		
	
		
			
				
					|  |  |  |  |                 R.id.menu_ok -> { | 
			
		
	
		
			
				
					|  |  |  |  |                     val loginData = hashMapOf<String, String>() | 
			
		
	
		
			
				
					|  |  |  |  |                     loginUi?.forEachIndexed { index, rowUi -> | 
			
		
	
		
			
				
					|  |  |  |  |                         when (rowUi.type) { | 
			
		
	
		
			
				
					|  |  |  |  |                             "text", "password" -> { | 
			
		
	
		
			
				
					|  |  |  |  |                                 val rowView = binding.root.findViewById<View>(index) | 
			
		
	
		
			
				
					|  |  |  |  |                                 ItemSourceEditBinding.bind(rowView).editText.text?.let { | 
			
		
	
		
			
				
					|  |  |  |  |                                     loginData[rowUi.name] = it.toString() | 
			
		
	
		
			
				
					|  |  |  |  |                                 } | 
			
		
	
		
			
				
					|  |  |  |  |                             } | 
			
		
	
		
			
				
					|  |  |  |  |                         } | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                     val loginData = getLoginData(loginUi) | 
			
		
	
		
			
				
					|  |  |  |  |                     login(source, loginData) | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 R.id.menu_show_login_header -> alert { | 
			
		
	
	
		
			
				
					|  |  |  | @ -112,6 +104,30 @@ class SourceLoginDialog : BaseDialogFragment(R.layout.dialog_login, true) { | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     private fun getLoginData(loginUi: List<RowUi>): HashMap<String, String>) { | 
			
		
	
		
			
				
					|  |  |  |  |         val loginData = hashMapOf<String, String>() | 
			
		
	
		
			
				
					|  |  |  |  |         loginUi.forEachIndexed { index, rowUi -> | 
			
		
	
		
			
				
					|  |  |  |  |             when (rowUi.type) { | 
			
		
	
		
			
				
					|  |  |  |  |                 "text", "password" -> { | 
			
		
	
		
			
				
					|  |  |  |  |                     val rowView = binding.root.findViewById<View>(index) | 
			
		
	
		
			
				
					|  |  |  |  |                     ItemSourceEditBinding.bind(rowView).editText.text?.let { | 
			
		
	
		
			
				
					|  |  |  |  |                         loginData[rowUi.name] = it.toString() | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         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()) { | 
			
		
	
	
		
			
				
					|  |  |  | 
 |