diff --git a/app/src/main/java/io/legado/app/data/entities/Book.kt b/app/src/main/java/io/legado/app/data/entities/Book.kt index 0d3ef747c..bc25cf242 100644 --- a/app/src/main/java/io/legado/app/data/entities/Book.kt +++ b/app/src/main/java/io/legado/app/data/entities/Book.kt @@ -14,6 +14,7 @@ import kotlinx.android.parcel.IgnoredOnParcel import kotlinx.android.parcel.Parcelize import java.nio.charset.Charset import kotlin.math.max +import kotlin.math.min @Parcelize @TypeConverters(Book.Converters::class) @@ -53,55 +54,55 @@ data class Book( var originOrder: Int = 0, //书源排序 var variable: String? = null, // 自定义书籍变量信息(用于书源规则检索书籍信息) var readConfig: ReadConfig? = null -): Parcelable, BaseBook { - +) : Parcelable, BaseBook { + fun isLocalBook(): Boolean { return origin == BookType.local } - + fun isLocalTxt(): Boolean { return isLocalBook() && originName.endsWith(".txt", true) } - + fun isEpub(): Boolean { return originName.endsWith(".epub", true) } - + fun isOnLineTxt(): Boolean { return !isLocalBook() && type == 0 } - + override fun equals(other: Any?): Boolean { if (other is Book) { return other.bookUrl == bookUrl } return false } - + override fun hashCode(): Int { return bookUrl.hashCode() } - + @delegate:Transient @delegate:Ignore @IgnoredOnParcel override val variableMap by lazy { GSON.fromJsonObject>(variable) ?: HashMap() } - + override fun putVariable(key: String, value: String) { variableMap[key] = value variable = GSON.toJson(variableMap) } - + @Ignore @IgnoredOnParcel override var infoHtml: String? = null - + @Ignore @IgnoredOnParcel override var tocHtml: String? = null - + fun getRealAuthor() = author.replace(AppPattern.authorRegex, "") fun getUnreadChapterNum() = max(totalChapterNum - durChapterIndex - 1, 0) @@ -146,7 +147,10 @@ data class Book( } fun getFolderName(): String { - return name.replace(AppPattern.fileNameRegex, "") + MD5Utils.md5Encode16(bookUrl) + //防止书名过长,只取9位 + var folderName = name.replace(AppPattern.fileNameRegex, "") + folderName = folderName.substring(0, min(9, folderName.length)) + return folderName + MD5Utils.md5Encode16(bookUrl) } fun toSearchBook() = SearchBook( @@ -168,7 +172,7 @@ data class Book( this.infoHtml = this@Book.infoHtml this.tocHtml = this@Book.tocHtml } - + fun changeTo(newBook: Book) { newBook.group = group newBook.order = order diff --git a/app/src/main/java/io/legado/app/model/localBook/AnalyzeTxtFile.kt b/app/src/main/java/io/legado/app/model/localBook/AnalyzeTxtFile.kt index 77689d8a5..76776b090 100644 --- a/app/src/main/java/io/legado/app/model/localBook/AnalyzeTxtFile.kt +++ b/app/src/main/java/io/legado/app/model/localBook/AnalyzeTxtFile.kt @@ -239,7 +239,7 @@ class AnalyzeTxtFile { } companion object { - private const val folderName = "bookTxt" + private const val BLANK: Byte = 0x0a //默认从文件中获取数据的长度 @@ -247,12 +247,6 @@ class AnalyzeTxtFile { //没有标题的时候,每个章节的最大长度 private const val MAX_LENGTH_WITH_NO_CHAPTER = 10 * 1024 - val cacheFolder: File by lazy { - val rootFile = App.INSTANCE.getExternalFilesDir(null) - ?: App.INSTANCE.externalCacheDir - ?: App.INSTANCE.cacheDir - FileUtils.createFolderIfNotExist(rootFile, folderName) - } fun getContent(book: Book, bookChapter: BookChapter): String { val bookFile = getBookFile(book) @@ -269,7 +263,7 @@ class AnalyzeTxtFile { private fun getBookFile(book: Book): File { if (book.bookUrl.isContentPath()) { val uri = Uri.parse(book.bookUrl) - val bookFile = FileUtils.getFile(cacheFolder, book.originName) + val bookFile = FileUtils.getFile(LocalBook.cacheFolder, book.originName) if (!bookFile.exists()) { bookFile.createNewFile() DocumentUtils.readBytes(App.INSTANCE, uri)?.let { diff --git a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt index 9545cf7cb..5d01504ef 100644 --- a/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt +++ b/app/src/main/java/io/legado/app/model/localBook/LocalBook.kt @@ -11,6 +11,13 @@ import java.io.File object LocalBook { + private const val folderName = "bookTxt" + val cacheFolder: File by lazy { + val rootFile = App.INSTANCE.getExternalFilesDir(null) + ?: App.INSTANCE.externalCacheDir + ?: App.INSTANCE.cacheDir + FileUtils.createFolderIfNotExist(rootFile, folderName) + } fun getChapterList(book: Book): ArrayList { return if (book.isEpub()) { @@ -34,7 +41,7 @@ object LocalBook { path = uri.toString() val doc = DocumentFile.fromSingleUri(App.INSTANCE, uri) doc?.let { - val bookFile = FileUtils.getFile(AnalyzeTxtFile.cacheFolder, it.name!!) + val bookFile = FileUtils.getFile(cacheFolder, it.name!!) if (!bookFile.exists()) { bookFile.createNewFile() doc.readBytes(App.INSTANCE)?.let { bytes -> @@ -82,7 +89,7 @@ object LocalBook { fun deleteBook(book: Book, deleteOriginal: Boolean) { kotlin.runCatching { if (book.isLocalTxt()) { - val bookFile = FileUtils.getFile(AnalyzeTxtFile.cacheFolder, book.originName) + val bookFile = FileUtils.getFile(cacheFolder, book.originName) bookFile.delete() } diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index c13da3cd7..3265d86f6 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -51,7 +51,7 @@ class BookInfoActivity : ChangeCoverDialog.CallBack { private val requestCodeChapterList = 568 - private val requestCodeSourceEdit = 562 + private val requestCodeInfoEdit = 562 private val requestCodeRead = 432 override val viewModel: BookInfoViewModel @@ -82,7 +82,7 @@ class BookInfoActivity : if (viewModel.inBookshelf) { viewModel.bookData.value?.let { startActivityForResult( - requestCodeSourceEdit, + requestCodeInfoEdit, Pair("bookUrl", it.bookUrl) ) } @@ -368,7 +368,7 @@ class BookInfoActivity : override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) when (requestCode) { - requestCodeSourceEdit -> + requestCodeInfoEdit -> if (resultCode == Activity.RESULT_OK) { viewModel.upEditBook() } diff --git a/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditViewModel.kt b/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditViewModel.kt index a0604035e..03a761706 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditViewModel.kt @@ -25,7 +25,7 @@ class BookInfoEditViewModel(application: Application) : BaseViewModel(applicatio if (ReadBook.book?.bookUrl == book.bookUrl) { ReadBook.book = book } - App.db.bookDao().insert(book) + App.db.bookDao().update(book) }.onSuccess { success?.invoke() }