Просмотр исходного кода

登录ui支持js代码构建
感谢@Luoyacheng,https://github.com/Luoyacheng/legado

HapeLee 1 год назад
Родитель
Сommit
331a609919
1 измененных файлов с 22 добавлено и 3 удалено
  1. 22 3
      app/src/main/java/io/legato/kazusa/data/entities/BaseSource.kt

+ 22 - 3
app/src/main/java/io/legato/kazusa/data/entities/BaseSource.kt

@@ -65,7 +65,25 @@ interface BaseSource : JsExtensions {
     }
 
     fun loginUi(): List<RowUi>? {
-        return GSON.fromJsonArray<RowUi>(loginUi).onFailure {
+        val json = loginUi?.let {
+            val loginJS = getLoginJs() ?: ""
+            try {
+                when {
+                    it.startsWith("@js:") -> evalJS(loginJS + it.substring(4)){
+                        put("result", getLoginInfoMap())
+                    }.toString()
+                    it.startsWith("<js>") -> evalJS(loginJS + it.substring(4,it.lastIndexOf("<"))){
+                        put("result", getLoginInfoMap())
+                    }.toString()
+                    else -> it
+                }
+            } catch (e: Throwable) {
+                log(e)
+                e.printOnDebug()
+                null
+            }
+        }
+        return GSON.fromJsonArray<RowUi>(json).onFailure {
             it.printOnDebug()
         }.getOrNull()
     }
@@ -176,8 +194,9 @@ interface BaseSource : JsExtensions {
         }
     }
 
-    fun getLoginInfoMap(): Map<String, String>? {
-        return GSON.fromJsonObject<Map<String, String>>(getLoginInfo()).getOrNull()
+    fun getLoginInfoMap(): Map<String, String> {
+        val json = getLoginInfo() ?: return emptyMap()
+        return GSON.fromJsonObject<Map<String, String>>(json).getOrNull() ?: emptyMap()
     }
 
     /**