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

@ -9,9 +9,11 @@ import io.legado.app.data.entities.BookChapter
import io.legado.app.help.BookHelp import io.legado.app.help.BookHelp
import io.legado.app.utils.* import io.legado.app.utils.*
import me.ag2s.epublib.domain.EpubBook import me.ag2s.epublib.domain.EpubBook
import me.ag2s.epublib.domain.Resource
import me.ag2s.epublib.domain.TOCReference import me.ag2s.epublib.domain.TOCReference
import me.ag2s.epublib.epub.EpubReader import me.ag2s.epublib.epub.EpubReader
import org.jsoup.Jsoup import org.jsoup.Jsoup
import org.jsoup.nodes.Element
import org.jsoup.select.Elements import org.jsoup.select.Elements
import splitties.init.appCtx import splitties.init.appCtx
import timber.log.Timber import timber.log.Timber
@ -145,34 +147,13 @@ class EpubFile(var book: Book) {
/*注:这里较大增加了内容加载的时间,所以首次获取内容后可存储到本地cache,减少重复加载*/ /*注:这里较大增加了内容加载的时间,所以首次获取内容后可存储到本地cache,减少重复加载*/
for (res in epubBook.contents) { for (res in epubBook.contents) {
if (res.href == chapter.url) { if (res.href == chapter.url) {
elements.add(getBody(res, startFragmentId, endFragmentId))
isChapter = true isChapter = true
} else if (res.href == nextUrl) { } else if (isChapter) {
break if (nextUrl.isNullOrBlank() || 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()
} }
elements.add(getBody(res, startFragmentId, endFragmentId))
val children = body.children()
children.select("script").remove()
children.select("style").remove()
elements.add(body)
} }
} }
var html = elements.outerHtml() var html = elements.outerHtml()
@ -185,6 +166,32 @@ class EpubFile(var book: Book) {
return null 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? { private fun getImage(href: String): InputStream? {
val abHref = href.replace("../", "") val abHref = href.replace("../", "")
return epubBook?.resources?.getByHref(abHref)?.inputStream return epubBook?.resources?.getByHref(abHref)?.inputStream

Loading…
Cancel
Save