fix: 本地导入没有包含在数组内的单个书源时无法解析

This commit is contained in:
Xwite
2023-03-18 09:08:21 +08:00
parent 22b56b542c
commit 6793aadbe1
@@ -2,6 +2,7 @@ package io.legado.app.help.source
import androidx.annotation.Keep import androidx.annotation.Keep
import com.jayway.jsonpath.JsonPath import com.jayway.jsonpath.JsonPath
import io.legado.app.R
import io.legado.app.constant.AppConst import io.legado.app.constant.AppConst
import io.legado.app.constant.AppLog import io.legado.app.constant.AppLog
import io.legado.app.constant.BookSourceType import io.legado.app.constant.BookSourceType
@@ -11,6 +12,8 @@ import io.legado.app.exception.NoStackTraceException
import io.legado.app.utils.* import io.legado.app.utils.*
import java.io.InputStream import java.io.InputStream
import java.util.regex.Pattern import java.util.regex.Pattern
import splitties.init.appCtx
@Suppress("RegExpRedundantEscape") @Suppress("RegExpRedundantEscape")
object SourceAnalyzer { object SourceAnalyzer {
@@ -36,7 +39,7 @@ object SourceAnalyzer {
} }
} }
else -> { else -> {
throw NoStackTraceException("格式不对") throw NoStackTraceException(appCtx.getString(R.string.wrong_format))
} }
} }
bookSources bookSources
@@ -46,21 +49,24 @@ object SourceAnalyzer {
fun jsonToBookSources(inputStream: InputStream): Result<MutableList<BookSource>> { fun jsonToBookSources(inputStream: InputStream): Result<MutableList<BookSource>> {
return kotlin.runCatching { return kotlin.runCatching {
val bookSources = mutableListOf<BookSource>() val bookSources = mutableListOf<BookSource>()
// kotlin.runCatching { val documentContext = jsonPath.parse(inputStream)
val items: List<Map<String, Any>> = jsonPath.parse(inputStream).read("$") kotlin.runCatching {
val items: List<Map<String, Any> = documentContext.read("$")
for (item in items) { for (item in items) {
val jsonItem = jsonPath.parse(item) val jsonItem = jsonPath.parse(item)
jsonToBookSource(jsonItem.jsonString()).getOrThrow().let { jsonToBookSource(jsonItem.jsonString()).getOrThrow().let {
bookSources.add(it) bookSources.add(it)
} }
} }
// }.onFailure { }.onFailure {
// val item: Map<String, Any> = jsonPath.parse(inputStream).read("$") val item: Map<String, Any> = documentContext.read("$")
// val jsonItem = jsonPath.parse(item) val jsonItem = jsonPath.parse(item)
// jsonToBookSource(jsonItem.jsonString()).getOrThrow().let { jsonToBookSource(jsonItem.jsonString()).getOrThrow().let {
// bookSources.add(it) bookSources.add(it)
// } }
// } }.onFailure {
throw NoStackTraceException(appCtx.getString(R.string.wrong_format))
}
bookSources bookSources
} }
} }
@@ -69,14 +75,14 @@ object SourceAnalyzer {
val source = BookSource() val source = BookSource()
val sourceAny = GSON.fromJsonObject<BookSourceAny>(json.trim()) val sourceAny = GSON.fromJsonObject<BookSourceAny>(json.trim())
.onFailure { .onFailure {
AppLog.put("转化书源出错", it) AppLog.put(appCtx.getString(R.string.wrong_format), it)
}.getOrNull() }.getOrNull()
return kotlin.runCatching { return kotlin.runCatching {
if (sourceAny?.ruleToc == null) { if (sourceAny?.ruleToc == null) {
source.apply { source.apply {
val jsonItem = jsonPath.parse(json.trim()) val jsonItem = jsonPath.parse(json.trim())
bookSourceUrl = jsonItem.readString("bookSourceUrl") bookSourceUrl = jsonItem.readString("bookSourceUrl")
?: throw NoStackTraceException("格式不对") ?: throw NoStackTraceException(appCtx.getString(R.string.wrong_format))
bookSourceName = jsonItem.readString("bookSourceName") ?: "" bookSourceName = jsonItem.readString("bookSourceName") ?: ""
bookSourceGroup = jsonItem.readString("bookSourceGroup") bookSourceGroup = jsonItem.readString("bookSourceGroup")
loginUrl = jsonItem.readString("loginUrl") loginUrl = jsonItem.readString("loginUrl")