本地书籍无权限则保存到自己选定的文件夹

pull/1487/head
gedoor 3 years ago
parent 020adf45ef
commit 65f7f919ba
  1. 27
      app/src/main/java/io/legado/app/model/localBook/TextFile.kt

@ -24,18 +24,12 @@ import java.util.regex.Pattern
class TextFile(private val book: Book) {
private val tocRules = arrayListOf<TxtTocRule>()
private lateinit var charset: Charset
private var charset: Charset = book.fileCharset()
@Throws(FileNotFoundException::class)
fun getChapterList(): ArrayList<BookChapter> {
return getBookFD(book).let { fd ->
try {
val buffer = ByteArray(BUFFER_SIZE)
Os.read(fd, buffer, 0, BUFFER_SIZE)
if (book.charset == null) {
book.charset = EncodingDetect.getEncode(buffer)
}
charset = book.fileCharset()
val rulePattern = if (book.tocUrl.isNotEmpty()) {
Pattern.compile(book.tocUrl, Pattern.MULTILINE)
} else {
@ -59,11 +53,20 @@ class TextFile(private val book: Book) {
val toc = arrayListOf<BookChapter>()
var tocRule: TxtTocRule? = null
val buffer = ByteArray(BUFFER_SIZE)
val rulePattern = pattern ?: let {
Os.lseek(bookFd, 0, SEEK_SET)
var blockContent = ""
if (book.charset == null) {
val length = Os.read(bookFd, buffer, 0, BUFFER_SIZE)
val content = String(buffer, 0, length, charset)
tocRule = getTocRule(content)
book.charset = EncodingDetect.getEncode(buffer)
blockContent = String(buffer, 0, length, charset)
charset = book.fileCharset()
}
val rulePattern = pattern ?: let {
if (blockContent.isEmpty()) {
Os.lseek(bookFd, 0, SEEK_SET)
val length = Os.read(bookFd, buffer, 0, BUFFER_SIZE)
blockContent = String(buffer, 0, length, charset)
}
tocRule = getTocRule(blockContent)
tocRule?.let {
Pattern.compile(it.rule, Pattern.MULTILINE)
}
@ -84,7 +87,7 @@ class TextFile(private val book: Book) {
//如果存在Chapter
if (rulePattern != null) {
//将数据转换成String, 不能超过length
var blockContent = String(buffer, 0, length, charset)
blockContent = String(buffer, 0, length, charset)
val lastN = blockContent.lastIndexOf("\n")
if (lastN > 0) {
blockContent = blockContent.substring(0, lastN)

Loading…
Cancel
Save