pull/1463/head^2
gedoor 4 years ago
parent 423f61b490
commit df0a3239cc
  1. 21
      app/src/main/java/io/legado/app/help/BookHelp.kt
  2. 59
      app/src/main/java/io/legado/app/model/localBook/EpubFile.kt

@ -57,8 +57,7 @@ object BookHelp {
}
}
suspend fun saveContent(
bookSource: BookSource,
fun saveContent(
book: Book,
bookChapter: BookChapter,
content: String
@ -71,6 +70,15 @@ object BookHelp {
book.getFolderName(),
bookChapter.getFileName(),
).writeText(content)
}
suspend fun saveContent(
bookSource: BookSource,
book: Book,
bookChapter: BookChapter,
content: String
) {
saveContent(book, bookChapter, content)
//保存图片
content.split("\n").forEach {
val matcher = AppPattern.imgPattern.matcher(it)
@ -183,15 +191,10 @@ object BookHelp {
fun getContent(book: Book, bookChapter: BookChapter): String? {
if (book.isLocalTxt() || book.isUmd()) {
return LocalBook.getContent(book, bookChapter)
} else if (book.isEpub()) {
} else if (book.isEpub() && !hasContent(book, bookChapter)) {
val string = LocalBook.getContent(book, bookChapter)
string?.let {
FileUtils.createFileIfNotExist(
downloadDir,
cacheFolderName,
book.getFolderName(),
bookChapter.getFileName(),
).writeText(it)
saveContent(book, bookChapter, it)
}
return string
} else {

@ -9,9 +9,11 @@ import io.legado.app.data.entities.BookChapter
import io.legado.app.help.BookHelp
import io.legado.app.utils.*
import me.ag2s.epublib.domain.EpubBook
import me.ag2s.epublib.domain.Resource
import me.ag2s.epublib.domain.TOCReference
import me.ag2s.epublib.epub.EpubReader
import org.jsoup.Jsoup
import org.jsoup.nodes.Element
import org.jsoup.select.Elements
import splitties.init.appCtx
import timber.log.Timber
@ -145,34 +147,13 @@ class EpubFile(var book: Book) {
/*注:这里较大增加了内容加载的时间,所以首次获取内容后可存储到本地cache,减少重复加载*/
for (res in epubBook.contents) {
if (res.href == chapter.url) {
elements.add(getBody(res, startFragmentId, endFragmentId))
isChapter = true
} else if (res.href == nextUrl) {
break
}
if (isChapter) {
val body = Jsoup.parse(String(res.data, mCharset)).body()
if (!startFragmentId.isNullOrBlank()) {
body.getElementById(startFragmentId)?.previousElementSiblings()?.remove()
}
if (!endFragmentId.isNullOrBlank() && endFragmentId != startFragmentId) {
body.getElementById(endFragmentId)?.nextElementSiblings()?.remove()
}
/*选择去除正文中的H标签,部分书籍标题与阅读标题重复待优化*/
val tag = Book.hTag
if (book.getDelTag(tag)) {
body.getElementsByTag("h1").remove()
body.getElementsByTag("h2").remove()
body.getElementsByTag("h3").remove()
body.getElementsByTag("h4").remove()
body.getElementsByTag("h5").remove()
body.getElementsByTag("h6").remove()
//body.getElementsMatchingOwnText(chapter.title)?.remove()
} else if (isChapter) {
if (nextUrl.isNullOrBlank() || res.href == nextUrl) {
break
}
val children = body.children()
children.select("script").remove()
children.select("style").remove()
elements.add(body)
elements.add(getBody(res, startFragmentId, endFragmentId))
}
}
var html = elements.outerHtml()
@ -185,6 +166,32 @@ class EpubFile(var book: Book) {
return null
}
private fun getBody(res: Resource, startFragmentId: String?, endFragmentId: String?): Element {
val body = Jsoup.parse(String(res.data, mCharset)).body()
if (!startFragmentId.isNullOrBlank()) {
body.getElementById(startFragmentId)?.previousElementSiblings()?.remove()
}
if (!endFragmentId.isNullOrBlank() && endFragmentId != startFragmentId) {
body.getElementById(endFragmentId)?.nextElementSiblings()?.remove()
}
/*选择去除正文中的H标签,部分书籍标题与阅读标题重复待优化*/
val tag = Book.hTag
if (book.getDelTag(tag)) {
body.getElementsByTag("h1").remove()
body.getElementsByTag("h2").remove()
body.getElementsByTag("h3").remove()
body.getElementsByTag("h4").remove()
body.getElementsByTag("h5").remove()
body.getElementsByTag("h6").remove()
//body.getElementsMatchingOwnText(chapter.title)?.remove()
}
val children = body.children()
children.select("script").remove()
children.select("style").remove()
return body
}
private fun getImage(href: String): InputStream? {
val abHref = href.replace("../", "")
return epubBook?.resources?.getByHref(abHref)?.inputStream

Loading…
Cancel
Save