mirror of
https://github.com/gedoor/legado.git
synced 2024-07-06 23:47:49 +08:00
本地书籍无权限则保存到自己选定的文件夹
This commit is contained in:
parent
020adf45ef
commit
65f7f919ba
@ -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…
Reference in New Issue
Block a user