فهرست منبع

fix(epubFile): 修复特定情况下章节内容分割错误的bug

<h2><a id="secoo1">标题1</a></h2>
  ...
<h2><a id="secoo2">标题2</a></h2>
...

closes #2755
Xwite 3 سال پیش
والد
کامیت
34f8ce9eb3
1فایلهای تغییر یافته به همراه13 افزوده شده و 6 حذف شده
  1. 13 6
      app/src/main/java/io/legado/app/model/localBook/EpubFile.kt

+ 13 - 6
app/src/main/java/io/legado/app/model/localBook/EpubFile.kt

@@ -190,17 +190,24 @@ class EpubFile(var book: Book) {
     }
 
     private fun getBody(res: Resource, startFragmentId: String?, endFragmentId: String?): Element {
-        val doc = Jsoup.parse(String(res.data, mCharset))
-        val body = doc.body()
+        val originHtml = String(res.data, mCharset)
+        var html = originHtml
+        var doc = Jsoup.parse(html)
+        var body = doc.body()
         if (!startFragmentId.isNullOrBlank()) {
-            body.getElementById(startFragmentId)?.previousElementSiblings()?.remove()
+            body.getElementById(startFragmentId)?.outerHtml()?.let {
+                html = html.substringAfter(it)
+            }
         }
         if (!endFragmentId.isNullOrBlank() && endFragmentId != startFragmentId) {
-            body.getElementById(endFragmentId)?.run {
-                nextElementSiblings().remove()
-                remove()
+            body.getElementById(endFragmentId)?.outerHtml()?.let {
+                html = html.substringBefore(it)
             }
         }
+        if (html == originHtml) {
+            doc = Jsoup.parse(html)
+            body = doc.body()
+        }
         /*选择去除正文中的H标签,部分书籍标题与阅读标题重复待优化*/
         val tag = Book.hTag
         if (book.getDelTag(tag)) {