diff --git a/app/src/main/java/io/legado/app/api/controller/BookSourceController.kt b/app/src/main/java/io/legado/app/api/controller/BookSourceController.kt index 1d6a9d345..f6742bc31 100644 --- a/app/src/main/java/io/legado/app/api/controller/BookSourceController.kt +++ b/app/src/main/java/io/legado/app/api/controller/BookSourceController.kt @@ -8,6 +8,7 @@ import io.legado.app.data.entities.BookSource import io.legado.app.help.config.SourceConfig import io.legado.app.utils.GSON import io.legado.app.utils.fromJsonArray +import io.legado.app.utils.fromJsonObject object BookSourceController { @@ -23,7 +24,7 @@ object BookSourceController { fun saveSource(postData: String?): ReturnData { val returnData = ReturnData() postData ?: return returnData.setErrorMsg("数据不能为空") - val bookSource = BookSource.fromJson(postData).getOrNull() + val bookSource = GSON.fromJsonObject(postData).getOrNull() if (bookSource != null) { if (TextUtils.isEmpty(bookSource.bookSourceName) || TextUtils.isEmpty(bookSource.bookSourceUrl)) { returnData.setErrorMsg("源名称和URL不能为空") @@ -40,7 +41,7 @@ object BookSourceController { fun saveSources(postData: String?): ReturnData { postData ?: return ReturnData().setErrorMsg("数据为空") val okSources = arrayListOf() - val bookSources = BookSource.fromJsonArray(postData).getOrNull() + val bookSources = GSON.fromJsonArray(postData).getOrNull() if (bookSources.isNullOrEmpty()) { return ReturnData().setErrorMsg("转换源失败") } diff --git a/app/src/main/java/io/legado/app/api/controller/RssSourceController.kt b/app/src/main/java/io/legado/app/api/controller/RssSourceController.kt index 6df9c5b28..b60b8ae0f 100644 --- a/app/src/main/java/io/legado/app/api/controller/RssSourceController.kt +++ b/app/src/main/java/io/legado/app/api/controller/RssSourceController.kt @@ -5,6 +5,9 @@ import android.text.TextUtils import io.legado.app.api.ReturnData import io.legado.app.data.appDb import io.legado.app.data.entities.RssSource +import io.legado.app.utils.GSON +import io.legado.app.utils.fromJsonArray +import io.legado.app.utils.fromJsonObject object RssSourceController { @@ -20,7 +23,7 @@ object RssSourceController { fun saveSource(postData: String?): ReturnData { val returnData = ReturnData() postData ?: return returnData.setErrorMsg("数据不能为空") - RssSource.fromJson(postData).onFailure { + GSON.fromJsonObject(postData).onFailure { returnData.setErrorMsg("转换源失败${it.localizedMessage}") }.onSuccess { source -> if (TextUtils.isEmpty(source.sourceName) || TextUtils.isEmpty(source.sourceUrl)) { @@ -36,7 +39,7 @@ object RssSourceController { fun saveSources(postData: String?): ReturnData { postData ?: return ReturnData().setErrorMsg("数据不能为空") val okSources = arrayListOf() - val source = RssSource.fromJsonArray(postData).getOrNull() + val source = GSON.fromJsonArray(postData).getOrNull() if (source.isNullOrEmpty()) { return ReturnData().setErrorMsg("转换源失败") } @@ -63,7 +66,7 @@ object RssSourceController { fun deleteSources(postData: String?): ReturnData { postData ?: return ReturnData().setErrorMsg("没有传递数据") - RssSource.fromJsonArray(postData).onFailure { + GSON.fromJsonArray(postData).onFailure { return ReturnData().setErrorMsg("格式不对") }.onSuccess { it.forEach { source -> diff --git a/app/src/main/java/io/legado/app/data/entities/BookSource.kt b/app/src/main/java/io/legado/app/data/entities/BookSource.kt index 0abab30ac..ca1232f7f 100644 --- a/app/src/main/java/io/legado/app/data/entities/BookSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/BookSource.kt @@ -7,11 +7,9 @@ import io.legado.app.constant.AppPattern import io.legado.app.constant.BookSourceType import io.legado.app.data.entities.rule.* import io.legado.app.utils.GSON -import io.legado.app.utils.fromJsonArray import io.legado.app.utils.fromJsonObject import io.legado.app.utils.splitNotBlank import kotlinx.parcelize.Parcelize -import java.io.InputStream @Suppress("unused") @Parcelize @@ -220,22 +218,6 @@ data class BookSource( private fun equal(a: String?, b: String?) = a == b || (a.isNullOrEmpty() && b.isNullOrEmpty()) - companion object { - - fun fromJson(json: String): Result { - return GSON.fromJsonObject(json) - } - - fun fromJsonArray(json: String): Result> { - return GSON.fromJsonArray(json) - } - - fun fromJsonArray(inputStream: InputStream): Result> { - return GSON.fromJsonArray(inputStream) - } - - } - class Converters { @TypeConverter diff --git a/app/src/main/java/io/legado/app/data/entities/RssSource.kt b/app/src/main/java/io/legado/app/data/entities/RssSource.kt index 95184d7e6..6c87f1213 100644 --- a/app/src/main/java/io/legado/app/data/entities/RssSource.kt +++ b/app/src/main/java/io/legado/app/data/entities/RssSource.kt @@ -2,9 +2,12 @@ package io.legado.app.data.entities import android.os.Parcelable import android.text.TextUtils -import androidx.room.* +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.Index +import androidx.room.PrimaryKey import io.legado.app.constant.AppPattern -import io.legado.app.utils.* +import io.legado.app.utils.splitNotBlank import kotlinx.parcelize.Parcelize @Parcelize @@ -168,17 +171,4 @@ data class RssSource( } } - @Suppress("MemberVisibilityCanBePrivate") - companion object { - - fun fromJson(json: String): Result { - return GSON.fromJsonObject(json) - } - - fun fromJsonArray(jsonArray: String): Result> { - return GSON.fromJsonArray(jsonArray) - } - - } - } diff --git a/app/src/main/java/io/legado/app/help/DefaultData.kt b/app/src/main/java/io/legado/app/help/DefaultData.kt index 1d3079668..cc94b65b8 100644 --- a/app/src/main/java/io/legado/app/help/DefaultData.kt +++ b/app/src/main/java/io/legado/app/help/DefaultData.kt @@ -79,7 +79,7 @@ object DefaultData { appCtx.assets.open("defaultData${File.separator}rssSources.json") .readBytes() ) - RssSource.fromJsonArray(json).getOrDefault(emptyList()) + GSON.fromJsonArray(json).getOrDefault(emptyList()) } val coverRule: BookCover.CoverRule by lazy { diff --git a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt index c0388579b..3e148a97c 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt @@ -191,7 +191,7 @@ class ImportBookSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie override fun onCodeSave(code: String, requestId: String?) { requestId?.toInt()?.let { - BookSource.fromJson(code).getOrNull()?.let { source -> + GSON.fromJsonObject(code).getOrNull()?.let { source -> viewModel.allSources[it] = source adapter.setItem(it, source) } diff --git a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceViewModel.kt index 620c25254..ebc58ce36 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceViewModel.kt @@ -99,16 +99,16 @@ class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) { val json = JsonPath.parse(mText) json.read>("$.sourceUrls") }.onSuccess { - it.forEach { - importSourceUrl(it) + it.forEach { url -> + importSourceUrl(url) } }.onFailure { - BookSource.fromJson(mText).getOrThrow().let { + GSON.fromJsonObject(mText).getOrThrow().let { allSources.add(it) } } } - mText.isJsonArray() -> BookSource.fromJsonArray(mText).getOrThrow().let { items -> + mText.isJsonArray() -> GSON.fromJsonArray(mText).getOrThrow().let { items -> allSources.addAll(items) } mText.isAbsUrl() -> { @@ -117,7 +117,7 @@ class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) { mText.isUri() -> { val uri = Uri.parse(mText) uri.inputStream(context).getOrThrow().let { - allSources.addAll(BookSource.fromJsonArray(it).getOrThrow()) + allSources.addAll(GSON.fromJsonArray(it).getOrThrow()) } } else -> throw NoStackTraceException(context.getString(R.string.wrong_format)) @@ -139,7 +139,7 @@ class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) { url(url) } }.byteStream().let { - allSources.addAll(BookSource.fromJsonArray(it).getOrThrow()) + allSources.addAll(GSON.fromJsonArray(it).getOrThrow()) } } diff --git a/app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt b/app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt index eff9a6d18..8bd3650e5 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt @@ -190,7 +190,7 @@ class ImportRssSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_view override fun onCodeSave(code: String, requestId: String?) { requestId?.toInt()?.let { - RssSource.fromJson(code).getOrNull()?.let { source -> + GSON.fromJsonObject(code).getOrNull()?.let { source -> viewModel.allSources[it] = source adapter.setItem(it, source) } diff --git a/app/src/main/java/io/legado/app/ui/association/ImportRssSourceViewModel.kt b/app/src/main/java/io/legado/app/ui/association/ImportRssSourceViewModel.kt index 51e421ab1..11b7695b3 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportRssSourceViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportRssSourceViewModel.kt @@ -98,13 +98,13 @@ class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) { importSourceUrl(it) } } else { - RssSource.fromJsonArray(mText).getOrThrow().let { + GSON.fromJsonArray(mText).getOrThrow().let { allSources.addAll(it) } } } mText.isJsonArray() -> { - RssSource.fromJsonArray(mText).getOrThrow().let { + GSON.fromJsonArray(mText).getOrThrow().let { allSources.addAll(it) } } @@ -132,7 +132,7 @@ class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) { val items: List> = jsonPath.parse(body).read("$") for (item in items) { val jsonItem = jsonPath.parse(item) - RssSource.fromJson(jsonItem.jsonString()).getOrThrow().let { source -> + GSON.fromJsonObject(jsonItem.jsonString()).getOrThrow().let { source -> allSources.add(source) } } diff --git a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt index d0b268e75..8a5db5a83 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditViewModel.kt @@ -93,12 +93,12 @@ class BookSourceEditViewModel(application: Application) : BaseViewModel(applicat text.isJsonArray() -> { val items: List> = jsonPath.parse(text).read("$") val jsonItem = jsonPath.parse(items[0]) - BookSource.fromJson(jsonItem.jsonString()).getOrElse { + GSON.fromJsonObject(jsonItem.jsonString()).getOrElse { ImportOldData.fromOldBookSource(jsonItem) } } text.isJsonObject() -> { - BookSource.fromJson(text).getOrElse { + GSON.fromJsonObject(text).getOrElse { val jsonItem = jsonPath.parse(text) ImportOldData.fromOldBookSource(jsonItem) } diff --git a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditViewModel.kt index 74a3696fc..98632b9b1 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditViewModel.kt @@ -9,11 +9,8 @@ import io.legado.app.data.entities.RssSource import io.legado.app.exception.NoStackTraceException import io.legado.app.help.RuleComplete import io.legado.app.help.http.CookieStore -import io.legado.app.utils.getClipText -import io.legado.app.utils.printOnDebug -import io.legado.app.utils.stackTraceStr +import io.legado.app.utils.* -import io.legado.app.utils.toastOnUi import kotlinx.coroutines.Dispatchers @@ -57,7 +54,7 @@ class RssSourceEditViewModel(application: Application) : BaseViewModel(applicati execute(context = Dispatchers.Main) { var source: RssSource? = null context.getClipText()?.let { json -> - source = RssSource.fromJson(json).getOrThrow() + source = GSON.fromJsonObject(json).getOrThrow() } source }.onError { @@ -74,7 +71,7 @@ class RssSourceEditViewModel(application: Application) : BaseViewModel(applicati fun importSource(text: String, finally: (source: RssSource) -> Unit) { execute { val text1 = text.trim() - RssSource.fromJson(text1).getOrThrow().let { + GSON.fromJsonObject(text1).getOrThrow().let { finally.invoke(it) } }.onError {