Răsfoiți Sursa

feat: 一些书源兼容性

HapeLee 1 lună în urmă
părinte
comite
cf1004d9ec

+ 5 - 3
app/src/main/java/io/legado/app/model/SourceCallBack.kt

@@ -44,6 +44,7 @@ object SourceCallBack {
         book: Book,
         chapter: BookChapter?,
         bookType: Int = 0,
+        result: String? = null,
         noCall: (() -> Unit)? = null
     ) {
         if (source == null || !source.eventListener) {
@@ -62,7 +63,7 @@ object SourceCallBack {
                     source.evalJS(jsStr) {
                         put("event", event)
                         put("java", java)
-                        put("result", null)
+                        put("result", result)
                         put("book", book)
                         put("chapter", chapter)
                     }.toString()
@@ -86,7 +87,8 @@ object SourceCallBack {
         event: String,
         source: BookSource?,
         book: Book?,
-        chapter: BookChapter? = null
+        chapter: BookChapter? = null,
+        result: String? = null
     ) {
         if (source == null || book == null || !source.eventListener) return
         val jsStr = source.getContentRule().callBackJs
@@ -96,7 +98,7 @@ object SourceCallBack {
                 runScriptWithContext(coroutineContext) {
                     source.evalJS(jsStr) {
                         put("event", event)
-                        put("result", null)
+                        put("result", result)
                         put("book", book)
                         put("chapter", chapter)
                     }

+ 14 - 1
app/src/main/java/io/legado/app/ui/book/info/BookInfoRouteScreen.kt

@@ -2,7 +2,6 @@ package io.legado.app.ui.book.info
 
 import android.app.Activity
 import android.content.Intent
-import android.net.Uri
 import androidx.activity.compose.rememberLauncherForActivityResult
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.appcompat.app.AppCompatActivity
@@ -253,6 +252,7 @@ private fun runSourceCallback(
         effect.source,
         effect.book,
         null,
+        result = effect.action.resultText,
     ) {
         when (val action = effect.action) {
             is BookInfoCallbackAction.Search -> {
@@ -280,6 +280,19 @@ private fun runSourceCallback(
     }
 }
 
+/**
+ * 书源 callBackJs 使用的 result 变量,取值与旧版 BookInfoActivity 各点击入口一致:
+ * 作者/书名/标签点击传关键字,分享与复制传对应文本,其余为空。
+ */
+private val BookInfoCallbackAction.resultText: String?
+    get() = when (this) {
+        is BookInfoCallbackAction.Search -> keyword
+        is BookInfoCallbackAction.ShareText -> text
+        is BookInfoCallbackAction.CopyText -> text
+        BookInfoCallbackAction.ClearCache -> null
+        BookInfoCallbackAction.None -> null
+    }
+
 private fun runIntroJs(activity: AppCompatActivity, effect: BookInfoEffect.RunIntroJs) {
     val source = effect.source ?: return
     activity.lifecycleScope.launch(IO) {

+ 1 - 0
app/src/main/java/io/legado/app/ui/main/MainNavGraph.kt

@@ -921,6 +921,7 @@ fun MainActivity.mainEntryProvider(
                     it,
                     AudioPlay.durChapter,
                     BookType.audio,
+                    result = AudioPlayService.url,
                 ) {
                     sendToClip(AudioPlayService.url)
                 }