diff --git a/app/src/main/java/io/legado/app/ui/association/BaseAssociationViewModel.kt b/app/src/main/java/io/legado/app/ui/association/BaseAssociationViewModel.kt index 0ad391e61..81a61ba07 100644 --- a/app/src/main/java/io/legado/app/ui/association/BaseAssociationViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/BaseAssociationViewModel.kt @@ -4,9 +4,8 @@ import android.app.Application import android.net.Uri import androidx.lifecycle.MutableLiveData import io.legado.app.base.BaseViewModel -import io.legado.app.utils.contains import io.legado.app.utils.inputStream -import io.legado.app.utils.readText +import io.legado.app.utils.jsonPath abstract class BaseAssociationViewModel(application: Application) : BaseViewModel(application) { @@ -14,28 +13,34 @@ abstract class BaseAssociationViewModel(application: Application) : BaseViewMode val errorLive = MutableLiveData() fun importJson(uri: Uri) { - when { - uri.inputStream(context).getOrNull().contains("bookSourceUrl") -> - successLive.postValue(Pair("bookSource", uri.toString())) - else -> importJson(uri.readText(context)) + val map = uri.inputStream(context).getOrThrow().use { + jsonPath.parse(it).read>("$[0]") + } ?: uri.inputStream(context).getOrThrow().use { + jsonPath.parse(it).read("$") } - } - private fun importJson(json: String) { - //暂时根据文件内容判断属于什么 when { - json.contains("sourceUrl") -> - successLive.postValue(Pair("rssSource", json)) - json.contains("pattern") -> - successLive.postValue(Pair("replaceRule", json)) - json.contains("themeName") -> - successLive.postValue(Pair("theme", json)) - json.contains("urlRule") && json.contains("showRule") -> - successLive.postValue(Pair("dictRule", json)) - json.contains("name") && json.contains("rule") -> - successLive.postValue(Pair("txtRule", json)) - json.contains("name") && json.contains("url") -> - successLive.postValue(Pair("httpTts", json)) + map.containsKey("bookSourceUrl") -> + successLive.postValue("bookSource" to uri.toString()) + + map.containsKey("sourceUrl") -> + successLive.postValue("rssSource" to uri.toString()) + + map.containsKey("pattern") -> + successLive.postValue("replaceRule" to uri.toString()) + + map.containsKey("themeName") -> + successLive.postValue("theme" to uri.toString()) + + map.containsKey("showRule") -> + successLive.postValue("dictRule" to uri.toString()) + + map.containsKey("name") && map.containsKey("rule") -> + successLive.postValue("txtRule" to uri.toString()) + + map.containsKey("name") && map.containsKey("url") -> + successLive.postValue("httpTts" to uri.toString()) + else -> errorLive.postValue("格式不对") } } diff --git a/app/src/main/java/io/legado/app/ui/association/ImportDictRuleViewModel.kt b/app/src/main/java/io/legado/app/ui/association/ImportDictRuleViewModel.kt index 5dfd9fc74..45d68f1bc 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportDictRuleViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportDictRuleViewModel.kt @@ -1,6 +1,7 @@ package io.legado.app.ui.association import android.app.Application +import androidx.core.net.toUri import androidx.lifecycle.MutableLiveData import io.legado.app.R import io.legado.app.base.BaseViewModel @@ -19,6 +20,9 @@ import io.legado.app.utils.fromJsonObject import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isJsonArray import io.legado.app.utils.isJsonObject +import io.legado.app.utils.isUri +import io.legado.app.utils.readText +import splitties.init.appCtx class ImportDictRuleViewModel(app: Application) : BaseViewModel(app) { @@ -82,12 +86,19 @@ class ImportDictRuleViewModel(app: Application) : BaseViewModel(app) { allSources.add(it) } } + text.isJsonArray() -> GSON.fromJsonArray(text).getOrThrow().let { items -> allSources.addAll(items) } + text.isAbsUrl() -> { importSourceUrl(text) } + + text.isUri() -> { + importSourceAwait(text.toUri().readText(appCtx)) + } + else -> throw NoStackTraceException(context.getString(R.string.wrong_format)) } } diff --git a/app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleViewModel.kt b/app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleViewModel.kt index e8a149f5c..9f7380680 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleViewModel.kt @@ -1,6 +1,7 @@ package io.legado.app.ui.association import android.app.Application +import androidx.core.net.toUri import androidx.lifecycle.MutableLiveData import io.legado.app.base.BaseViewModel import io.legado.app.constant.AppConst @@ -17,7 +18,10 @@ import io.legado.app.help.http.text import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isJsonArray import io.legado.app.utils.isJsonObject +import io.legado.app.utils.isUri +import io.legado.app.utils.readText import io.legado.app.utils.splitNotBlank +import splitties.init.appCtx class ImportReplaceRuleViewModel(app: Application) : BaseViewModel(app) { var isAddGroup = false @@ -102,6 +106,10 @@ class ImportReplaceRuleViewModel(app: Application) : BaseViewModel(app) { allRules.add(rule) } + text.isUri() -> { + importAwait(text.toUri().readText(appCtx)) + } + else -> throw NoStackTraceException("格式不对") } } 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 e62b2fd14..5899cd3d8 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 @@ -1,6 +1,7 @@ package io.legado.app.ui.association import android.app.Application +import androidx.core.net.toUri import androidx.lifecycle.MutableLiveData import com.jayway.jsonpath.JsonPath import io.legado.app.R @@ -22,8 +23,11 @@ import io.legado.app.utils.fromJsonObject import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isJsonArray import io.legado.app.utils.isJsonObject +import io.legado.app.utils.isUri import io.legado.app.utils.jsonPath +import io.legado.app.utils.readText import io.legado.app.utils.splitNotBlank +import splitties.init.appCtx class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) { var isAddGroup = false @@ -135,6 +139,10 @@ class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) { importSourceUrl(mText) } + mText.isUri() -> { + importSource(mText.toUri().readText(appCtx)) + } + else -> throw NoStackTraceException(context.getString(R.string.wrong_format)) } }.onError { diff --git a/app/src/main/java/io/legado/app/ui/association/ImportThemeViewModel.kt b/app/src/main/java/io/legado/app/ui/association/ImportThemeViewModel.kt index 06d802a52..4f4afd8e7 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportThemeViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportThemeViewModel.kt @@ -1,6 +1,7 @@ package io.legado.app.ui.association import android.app.Application +import androidx.core.net.toUri import androidx.lifecycle.MutableLiveData import io.legado.app.R import io.legado.app.base.BaseViewModel @@ -12,7 +13,15 @@ import io.legado.app.help.http.decompressed import io.legado.app.help.http.newCallResponseBody import io.legado.app.help.http.okHttpClient import io.legado.app.help.http.text -import io.legado.app.utils.* +import io.legado.app.utils.GSON +import io.legado.app.utils.fromJsonArray +import io.legado.app.utils.fromJsonObject +import io.legado.app.utils.isAbsUrl +import io.legado.app.utils.isJsonArray +import io.legado.app.utils.isJsonObject +import io.legado.app.utils.isUri +import io.legado.app.utils.readText +import splitties.init.appCtx class ImportThemeViewModel(app: Application) : BaseViewModel(app) { @@ -74,13 +83,20 @@ class ImportThemeViewModel(app: Application) : BaseViewModel(app) { allSources.add(it) } } + text.isJsonArray() -> GSON.fromJsonArray(text).getOrThrow() .let { items -> allSources.addAll(items) } + text.isAbsUrl() -> { importSourceUrl(text) } + + text.isUri() -> { + importSourceAwait(text.toUri().readText(appCtx)) + } + else -> throw NoStackTraceException(context.getString(R.string.wrong_format)) } } diff --git a/app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleViewModel.kt b/app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleViewModel.kt index c83cb8f4e..0921cb00d 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleViewModel.kt @@ -1,6 +1,7 @@ package io.legado.app.ui.association import android.app.Application +import androidx.core.net.toUri import androidx.lifecycle.MutableLiveData import io.legado.app.R import io.legado.app.base.BaseViewModel @@ -19,6 +20,9 @@ import io.legado.app.utils.fromJsonObject import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isJsonArray import io.legado.app.utils.isJsonObject +import io.legado.app.utils.isUri +import io.legado.app.utils.readText +import splitties.init.appCtx class ImportTxtTocRuleViewModel(app: Application) : BaseViewModel(app) { @@ -82,13 +86,20 @@ class ImportTxtTocRuleViewModel(app: Application) : BaseViewModel(app) { allSources.add(it) } } + text.isJsonArray() -> GSON.fromJsonArray(text).getOrThrow() .let { items -> allSources.addAll(items) } + text.isAbsUrl() -> { importSourceUrl(text) } + + text.isUri() -> { + importSourceAwait(text.toUri().readText(appCtx)) + } + else -> throw NoStackTraceException(context.getString(R.string.wrong_format)) } }