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 129135a9b..faf5bd9a5 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 @@ -6,8 +6,8 @@ import androidx.room.Entity import androidx.room.Ignore import androidx.room.Index import androidx.room.PrimaryKey -import com.google.gson.Gson import io.legado.app.constant.AppConst.NOT_AVAILABLE +import io.legado.app.utils.GSON import io.legado.app.utils.fromJson import kotlinx.android.parcel.IgnoredOnParcel import kotlinx.android.parcel.Parcelize @@ -15,36 +15,36 @@ import kotlinx.android.parcel.Parcelize @Parcelize @Entity(tableName = "books", indices = [(Index(value = ["descUrl"], unique = true))]) data class Book( - @PrimaryKey - var descUrl: String = "", // 详情页Url(本地书源存储完整文件路径) - var tocUrl: String = "", // 目录页Url (toc=table of Contents) - var origin: String = "", // 书源规则id(默认-1,表示本地书籍) - var name: String? = null, // 书籍名称(书源获取) - var customName: String? = null, // 书籍名称(用户修改) - var author: String? = null, // 作者名称(书源获取) - var customAuthor: String? = null, // 作者名称(用户修改) - var tag: String? = null, // 分类信息(书源获取) - var customTag: String? = null, // 分类信息(用户修改) - var coverUrl: String? = null, // 封面Url(书源获取) - var customCoverUrl: String? = null, // 封面Url(用户修改) - var description: String? = null, // 简介内容(书源获取) - var customDescription: String? = null, // 简介内容(用户修改) - var charset: String? = null, // 自定义字符集名称(仅适用于本地书籍) - var type: Int = 0, // 0: 文本读物, 1: 有声读物 - var group: Int = 0, // 自定义分组索引号 - var latestChapterTitle: String? = null, // 最新章节标题 - var latestChapterTime: Long = 0, // 最新章节标题更新时间 - var lastCheckTime: Long = 0, // 最近一次更新书籍信息的时间 - var lastCheckCount: Int = 0, // 最近一次发现新章节的数量 - var totalChapterNum: Int = 0, // 书籍目录总数 - var durChapterTitle: String? = null, // 当前章节名称 - var durChapterIndex: Int = 0, // 当前章节索引 - var durChapterPos: Int = 0, // 当前阅读的进度(首行字符的索引位置) - var durChapterTime: Long = 0, // 最近一次阅读书籍的时间(打开正文的时间) - var canUpdate: Boolean = true, // 刷新书架时更新书籍信息 - var order: Int = 0, // 手动排序 - var useReplaceRule: Boolean = true, // 正文使用净化替换规则 - var variable: String? = null // 自定义书籍变量信息(用于书源规则检索书籍信息) + @PrimaryKey + var descUrl: String = "", // 详情页Url(本地书源存储完整文件路径) + var tocUrl: String = "", // 目录页Url (toc=table of Contents) + var origin: String = "", // 书源规则id(默认-1,表示本地书籍) + var name: String? = null, // 书籍名称(书源获取) + var customName: String? = null, // 书籍名称(用户修改) + var author: String? = null, // 作者名称(书源获取) + var customAuthor: String? = null, // 作者名称(用户修改) + var tag: String? = null, // 分类信息(书源获取) + var customTag: String? = null, // 分类信息(用户修改) + var coverUrl: String? = null, // 封面Url(书源获取) + var customCoverUrl: String? = null, // 封面Url(用户修改) + var description: String? = null, // 简介内容(书源获取) + var customDescription: String? = null, // 简介内容(用户修改) + var charset: String? = null, // 自定义字符集名称(仅适用于本地书籍) + var type: Int = 0, // 0: 文本读物, 1: 有声读物 + var group: Int = 0, // 自定义分组索引号 + var latestChapterTitle: String? = null, // 最新章节标题 + var latestChapterTime: Long = 0, // 最新章节标题更新时间 + var lastCheckTime: Long = 0, // 最近一次更新书籍信息的时间 + var lastCheckCount: Int = 0, // 最近一次发现新章节的数量 + var totalChapterNum: Int = 0, // 书籍目录总数 + var durChapterTitle: String? = null, // 当前章节名称 + var durChapterIndex: Int = 0, // 当前章节索引 + var durChapterPos: Int = 0, // 当前阅读的进度(首行字符的索引位置) + var durChapterTime: Long = 0, // 最近一次阅读书籍的时间(打开正文的时间) + var canUpdate: Boolean = true, // 刷新书架时更新书籍信息 + var order: Int = 0, // 手动排序 + var useReplaceRule: Boolean = true, // 正文使用净化替换规则 + var variable: String? = null // 自定义书籍变量信息(用于书源规则检索书籍信息) ) : Parcelable, BaseBook { @IgnoredOnParcel @Ignore @@ -69,7 +69,7 @@ data class Book( variableMap = if (isEmpty(variable)) { HashMap() } else { - Gson().fromJson>(variable!!) + GSON.fromJson>(variable!!) } } } @@ -77,6 +77,6 @@ data class Book( override fun putVariable(key: String, value: String) { initVariableMap() variableMap?.put(key, value) - variable = Gson().toJson(variableMap) + variable = GSON.toJson(variableMap) } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceAdapter.kt b/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceAdapter.kt index 7e0a40998..76e7f7945 100644 --- a/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/main/booksource/BookSourceAdapter.kt @@ -86,7 +86,7 @@ class BookSourceAdapter : PagedListAdapter(context, R.layout.item_search) { @@ -15,13 +14,11 @@ class SearchAdapter(context: Context) : SimpleRecyclerAdapter(contex } override fun convert(holder: ItemViewHolder, item: SearchBook, payloads: MutableList) { - holder.itemView.bookName.text = "我欲封天" } internal class TestItemDelegate(context: Context) : ItemViewDelegate(context, R.layout.item_search) { override fun convert(holder: ItemViewHolder, item: SearchBook, payloads: MutableList) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } } diff --git a/app/src/main/java/io/legado/app/utils/GsonExtensions.kt b/app/src/main/java/io/legado/app/utils/GsonExtensions.kt index 9e9a85e00..2cb4b1a17 100644 --- a/app/src/main/java/io/legado/app/utils/GsonExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/GsonExtensions.kt @@ -5,20 +5,18 @@ import com.google.gson.GsonBuilder import com.google.gson.JsonParser import org.jetbrains.anko.attempt -val GSON: Gson = GsonBuilder().create() +val GSON: Gson by lazy { GsonBuilder().create() } inline fun Gson.fromJson(json: String): T = fromJson(json, T::class.java) -inline fun Gson.arrayFromJson(json: String): ArrayList? = run { - return@run attempt { - val result = ArrayList() - val parser = JsonParser() - val jArray = parser.parse(json).asJsonArray - jArray?.let { - for (obj in it) { +inline fun Gson.fromJsonArray(json: String): ArrayList? { + return attempt { + with(JsonParser().parse(json).asJsonArray) { + val result = ArrayList() + for (obj in this) { attempt { fromJson(obj, T::class.java) }.value?.run { result.add(this) } } + result } - result }.value } \ No newline at end of file