From d7e2df9c9bbd2e8d665b8384ec8a61b7c88159f3 Mon Sep 17 00:00:00 2001 From: gedoor Date: Fri, 15 Oct 2021 14:07:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/api/controller/BookSourceController.kt | 5 +++-- .../java/io/legado/app/help/BookSourceAnalyzer.kt | 12 ++++++++++++ .../io/legado/app/help/storage/ImportOldData.kt | 15 +++++---------- .../java/io/legado/app/service/WebTileService.kt | 12 ++++++------ .../ui/association/ImportBookSourceViewModel.kt | 9 ++------- .../java/io/legado/app/utils/GsonExtensions.kt | 4 ++++ 6 files changed, 32 insertions(+), 25 deletions(-) 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 588ef4396..344b81c9e 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 @@ -43,9 +43,10 @@ object BookSourceController { } fun saveSources(postData: String?): ReturnData { + postData ?: return ReturnData().setErrorMsg("数据为空") val okSources = arrayListOf() - val bookSources = GSON.fromJsonArray(postData) - if (bookSources != null) { + val bookSources = BookSourceAnalyzer.jsonToBookSources(postData) + if (bookSources.isNotEmpty()) { bookSources.forEach { bookSource -> if (bookSource.bookSourceName.isNotBlank() && bookSource.bookSourceUrl.isNotBlank() diff --git a/app/src/main/java/io/legado/app/help/BookSourceAnalyzer.kt b/app/src/main/java/io/legado/app/help/BookSourceAnalyzer.kt index e68576ac3..91f75fa10 100644 --- a/app/src/main/java/io/legado/app/help/BookSourceAnalyzer.kt +++ b/app/src/main/java/io/legado/app/help/BookSourceAnalyzer.kt @@ -14,6 +14,18 @@ object BookSourceAnalyzer { private val headerPattern = Pattern.compile("@Header:\\{.+?\\}", Pattern.CASE_INSENSITIVE) private val jsPattern = Pattern.compile("\\{\\{.+?\\}\\}", Pattern.CASE_INSENSITIVE) + fun jsonToBookSources(json: String): List { + val bookSources = mutableListOf() + val items: List> = jsonPath.parse(json).read("$") + for (item in items) { + val jsonItem = jsonPath.parse(item) + jsonToBookSource(jsonItem.jsonString())?.let { + bookSources.add(it) + } + } + return bookSources + } + fun jsonToBookSource(json: String): BookSource? { val source = BookSource() val sourceAny = try { diff --git a/app/src/main/java/io/legado/app/help/storage/ImportOldData.kt b/app/src/main/java/io/legado/app/help/storage/ImportOldData.kt index 112cc9481..6f57f12a5 100644 --- a/app/src/main/java/io/legado/app/help/storage/ImportOldData.kt +++ b/app/src/main/java/io/legado/app/help/storage/ImportOldData.kt @@ -4,9 +4,11 @@ import android.content.Context import android.net.Uri import androidx.documentfile.provider.DocumentFile import io.legado.app.data.appDb -import io.legado.app.data.entities.BookSource import io.legado.app.help.BookSourceAnalyzer -import io.legado.app.utils.* +import io.legado.app.utils.DocumentUtils +import io.legado.app.utils.FileUtils +import io.legado.app.utils.isContentScheme +import io.legado.app.utils.toastOnUi import java.io.File object ImportOldData { @@ -90,14 +92,7 @@ object ImportOldData { } fun importOldSource(json: String): Int { - val bookSources = mutableListOf() - val items: List> = jsonPath.parse(json).read("$") - for (item in items) { - val jsonItem = jsonPath.parse(item) - BookSourceAnalyzer.jsonToBookSource(jsonItem.jsonString())?.let { - bookSources.add(it) - } - } + val bookSources = BookSourceAnalyzer.jsonToBookSources(json) appDb.bookSourceDao.insert(*bookSources.toTypedArray()) return bookSources.size } diff --git a/app/src/main/java/io/legado/app/service/WebTileService.kt b/app/src/main/java/io/legado/app/service/WebTileService.kt index 3f9882add..44513962e 100644 --- a/app/src/main/java/io/legado/app/service/WebTileService.kt +++ b/app/src/main/java/io/legado/app/service/WebTileService.kt @@ -17,13 +17,13 @@ class WebTileService : TileService() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { try { when (intent?.action) { - IntentAction.start -> { - qsTile.state = Tile.STATE_ACTIVE - qsTile.updateTile() + IntentAction.start -> qsTile?.run { + state = Tile.STATE_ACTIVE + updateTile() } - IntentAction.stop -> { - qsTile.state = Tile.STATE_INACTIVE - qsTile.updateTile() + IntentAction.stop -> qsTile?.run { + state = Tile.STATE_INACTIVE + updateTile() } } } catch (e: Exception) { 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 967791ae6..2fbcf2c81 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 @@ -104,13 +104,8 @@ class ImportBookSourceViewModel(app: Application) : BaseViewModel(app) { } } mText.isJsonArray() -> { - val items: List> = jsonPath.parse(mText).read("$") - for (item in items) { - val jsonItem = jsonPath.parse(item) - BookSourceAnalyzer.jsonToBookSource(jsonItem.jsonString())?.let { - allSources.add(it) - } - } + val items = BookSourceAnalyzer.jsonToBookSources(mText) + allSources.addAll(items) } mText.isAbsUrl() -> { importSourceUrl(mText) 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 db32ca60a..a73233235 100644 --- a/app/src/main/java/io/legado/app/utils/GsonExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/GsonExtensions.kt @@ -25,12 +25,16 @@ inline fun genericType(): Type = object : TypeToken() {}.type inline fun Gson.fromJsonObject(json: String?): T? {//可转成任意类型 return kotlin.runCatching { fromJson(json, genericType()) as? T + }.onFailure { + it.printOnDebug() }.getOrNull() } inline fun Gson.fromJsonArray(json: String?): List? { return kotlin.runCatching { fromJson(json, ParameterizedTypeImpl(T::class.java)) as? List + }.onFailure { + it.printOnDebug() }.getOrNull() }