优化
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package io.legado.app.help
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import io.legado.app.constant.AppLog
|
||||
import io.legado.app.constant.AppPattern
|
||||
import io.legado.app.constant.EventBus
|
||||
@@ -15,8 +17,11 @@ import kotlinx.coroutines.Dispatchers.IO
|
||||
import org.apache.commons.text.similarity.JaccardSimilarity
|
||||
import splitties.init.appCtx
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
import java.util.concurrent.CopyOnWriteArraySet
|
||||
import java.util.regex.Pattern
|
||||
import java.util.zip.ZipFile
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
@@ -158,6 +163,26 @@ object BookHelp {
|
||||
return suffix
|
||||
}
|
||||
|
||||
@Throws(IOException::class)
|
||||
fun getEpubFile(book: Book): ZipFile {
|
||||
val uri = Uri.parse(book.bookUrl)
|
||||
if (uri.isContentScheme()) {
|
||||
val path = FileUtils.getPath(downloadDir, cacheFolderName, book.originName)
|
||||
val file = File(path)
|
||||
val doc = DocumentFile.fromSingleUri(appCtx, uri)
|
||||
?: throw IOException("文件不存在")
|
||||
if (!file.exists() || doc.lastModified() > book.latestChapterTime) {
|
||||
LocalBook.getBookInputStream(book).use { inputStream ->
|
||||
FileOutputStream(file).use { outputStream ->
|
||||
inputStream.copyTo(outputStream)
|
||||
}
|
||||
}
|
||||
}
|
||||
return ZipFile(file)
|
||||
}
|
||||
return ZipFile(uri.path)
|
||||
}
|
||||
|
||||
fun getChapterFiles(book: Book): List<String> {
|
||||
val fileNameList = arrayListOf<String>()
|
||||
if (book.isLocalTxt()) {
|
||||
|
||||
@@ -2,10 +2,10 @@ package io.legado.app.model.localBook
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.net.Uri
|
||||
import android.text.TextUtils
|
||||
import io.legado.app.data.entities.Book
|
||||
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
|
||||
@@ -15,13 +15,11 @@ import org.jsoup.Jsoup
|
||||
import org.jsoup.nodes.Element
|
||||
import org.jsoup.select.Elements
|
||||
import splitties.init.appCtx
|
||||
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
import java.io.IOException
|
||||
import java.io.InputStream
|
||||
import java.nio.charset.Charset
|
||||
import java.util.zip.ZipFile
|
||||
|
||||
class EpubFile(var book: Book) {
|
||||
|
||||
@@ -104,19 +102,13 @@ class EpubFile(var book: Book) {
|
||||
* 重写epub文件解析代码,直接读出压缩包文件生成Resources给epublib,这样的好处是可以逐一修改某些文件的格式错误
|
||||
*/
|
||||
private fun readEpub(): EpubBook? {
|
||||
try {
|
||||
val uri = Uri.parse(book.bookUrl)
|
||||
return if (uri.isContentScheme()) {
|
||||
//高版本的手机内存一般足够大,直接加载到内存中最快
|
||||
EpubReader().readEpub(LocalBook.getBookInputStream(book), "utf-8")
|
||||
} else {
|
||||
//低版本的使用懒加载
|
||||
EpubReader().readEpubLazy(ZipFile(uri.path), "utf-8")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printOnDebug()
|
||||
}
|
||||
return null
|
||||
return kotlin.runCatching {
|
||||
//ContentScheme拷贝到私有文件夹采用懒加载防止OOM
|
||||
val zipFile = BookHelp.getEpubFile(book)
|
||||
EpubReader().readEpubLazy(zipFile, "utf-8")
|
||||
}.onFailure {
|
||||
it.printOnDebug()
|
||||
}.getOrNull()
|
||||
}
|
||||
|
||||
private fun getContent(chapter: BookChapter): String? {
|
||||
|
||||
Reference in New Issue
Block a user