This commit is contained in:
Horis
2025-11-21 15:25:19 +08:00
parent 4c01eeea8d
commit f1fde19691
6 changed files with 81 additions and 22 deletions
@@ -4,9 +4,8 @@ import android.app.Application
import android.net.Uri import android.net.Uri
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.utils.contains
import io.legado.app.utils.inputStream 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) { abstract class BaseAssociationViewModel(application: Application) : BaseViewModel(application) {
@@ -14,28 +13,34 @@ abstract class BaseAssociationViewModel(application: Application) : BaseViewMode
val errorLive = MutableLiveData<String>() val errorLive = MutableLiveData<String>()
fun importJson(uri: Uri) { fun importJson(uri: Uri) {
when { val map = uri.inputStream(context).getOrThrow().use {
uri.inputStream(context).getOrNull().contains("bookSourceUrl") -> jsonPath.parse(it).read<Map<String, *>>("$[0]")
successLive.postValue(Pair("bookSource", uri.toString())) } ?: uri.inputStream(context).getOrThrow().use {
else -> importJson(uri.readText(context)) jsonPath.parse(it).read("$")
} }
}
private fun importJson(json: String) {
//暂时根据文件内容判断属于什么
when { when {
json.contains("sourceUrl") -> map.containsKey("bookSourceUrl") ->
successLive.postValue(Pair("rssSource", json)) successLive.postValue("bookSource" to uri.toString())
json.contains("pattern") ->
successLive.postValue(Pair("replaceRule", json)) map.containsKey("sourceUrl") ->
json.contains("themeName") -> successLive.postValue("rssSource" to uri.toString())
successLive.postValue(Pair("theme", json))
json.contains("urlRule") && json.contains("showRule") -> map.containsKey("pattern") ->
successLive.postValue(Pair("dictRule", json)) successLive.postValue("replaceRule" to uri.toString())
json.contains("name") && json.contains("rule") ->
successLive.postValue(Pair("txtRule", json)) map.containsKey("themeName") ->
json.contains("name") && json.contains("url") -> successLive.postValue("theme" to uri.toString())
successLive.postValue(Pair("httpTts", json))
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("格式不对") else -> errorLive.postValue("格式不对")
} }
} }
@@ -1,6 +1,7 @@
package io.legado.app.ui.association package io.legado.app.ui.association
import android.app.Application import android.app.Application
import androidx.core.net.toUri
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseViewModel 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.isAbsUrl
import io.legado.app.utils.isJsonArray import io.legado.app.utils.isJsonArray
import io.legado.app.utils.isJsonObject 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) { class ImportDictRuleViewModel(app: Application) : BaseViewModel(app) {
@@ -82,12 +86,19 @@ class ImportDictRuleViewModel(app: Application) : BaseViewModel(app) {
allSources.add(it) allSources.add(it)
} }
} }
text.isJsonArray() -> GSON.fromJsonArray<DictRule>(text).getOrThrow().let { items -> text.isJsonArray() -> GSON.fromJsonArray<DictRule>(text).getOrThrow().let { items ->
allSources.addAll(items) allSources.addAll(items)
} }
text.isAbsUrl() -> { text.isAbsUrl() -> {
importSourceUrl(text) importSourceUrl(text)
} }
text.isUri() -> {
importSourceAwait(text.toUri().readText(appCtx))
}
else -> throw NoStackTraceException(context.getString(R.string.wrong_format)) else -> throw NoStackTraceException(context.getString(R.string.wrong_format))
} }
} }
@@ -1,6 +1,7 @@
package io.legado.app.ui.association package io.legado.app.ui.association
import android.app.Application import android.app.Application
import androidx.core.net.toUri
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.constant.AppConst 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.isAbsUrl
import io.legado.app.utils.isJsonArray import io.legado.app.utils.isJsonArray
import io.legado.app.utils.isJsonObject 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 io.legado.app.utils.splitNotBlank
import splitties.init.appCtx
class ImportReplaceRuleViewModel(app: Application) : BaseViewModel(app) { class ImportReplaceRuleViewModel(app: Application) : BaseViewModel(app) {
var isAddGroup = false var isAddGroup = false
@@ -102,6 +106,10 @@ class ImportReplaceRuleViewModel(app: Application) : BaseViewModel(app) {
allRules.add(rule) allRules.add(rule)
} }
text.isUri() -> {
importAwait(text.toUri().readText(appCtx))
}
else -> throw NoStackTraceException("格式不对") else -> throw NoStackTraceException("格式不对")
} }
} }
@@ -1,6 +1,7 @@
package io.legado.app.ui.association package io.legado.app.ui.association
import android.app.Application import android.app.Application
import androidx.core.net.toUri
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.jayway.jsonpath.JsonPath import com.jayway.jsonpath.JsonPath
import io.legado.app.R 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.isAbsUrl
import io.legado.app.utils.isJsonArray import io.legado.app.utils.isJsonArray
import io.legado.app.utils.isJsonObject import io.legado.app.utils.isJsonObject
import io.legado.app.utils.isUri
import io.legado.app.utils.jsonPath import io.legado.app.utils.jsonPath
import io.legado.app.utils.readText
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
import splitties.init.appCtx
class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) { class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) {
var isAddGroup = false var isAddGroup = false
@@ -135,6 +139,10 @@ class ImportRssSourceViewModel(app: Application) : BaseViewModel(app) {
importSourceUrl(mText) importSourceUrl(mText)
} }
mText.isUri() -> {
importSource(mText.toUri().readText(appCtx))
}
else -> throw NoStackTraceException(context.getString(R.string.wrong_format)) else -> throw NoStackTraceException(context.getString(R.string.wrong_format))
} }
}.onError { }.onError {
@@ -1,6 +1,7 @@
package io.legado.app.ui.association package io.legado.app.ui.association
import android.app.Application import android.app.Application
import androidx.core.net.toUri
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseViewModel 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.newCallResponseBody
import io.legado.app.help.http.okHttpClient import io.legado.app.help.http.okHttpClient
import io.legado.app.help.http.text 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) { class ImportThemeViewModel(app: Application) : BaseViewModel(app) {
@@ -74,13 +83,20 @@ class ImportThemeViewModel(app: Application) : BaseViewModel(app) {
allSources.add(it) allSources.add(it)
} }
} }
text.isJsonArray() -> GSON.fromJsonArray<ThemeConfig.Config>(text).getOrThrow() text.isJsonArray() -> GSON.fromJsonArray<ThemeConfig.Config>(text).getOrThrow()
.let { items -> .let { items ->
allSources.addAll(items) allSources.addAll(items)
} }
text.isAbsUrl() -> { text.isAbsUrl() -> {
importSourceUrl(text) importSourceUrl(text)
} }
text.isUri() -> {
importSourceAwait(text.toUri().readText(appCtx))
}
else -> throw NoStackTraceException(context.getString(R.string.wrong_format)) else -> throw NoStackTraceException(context.getString(R.string.wrong_format))
} }
} }
@@ -1,6 +1,7 @@
package io.legado.app.ui.association package io.legado.app.ui.association
import android.app.Application import android.app.Application
import androidx.core.net.toUri
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.BaseViewModel 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.isAbsUrl
import io.legado.app.utils.isJsonArray import io.legado.app.utils.isJsonArray
import io.legado.app.utils.isJsonObject 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) { class ImportTxtTocRuleViewModel(app: Application) : BaseViewModel(app) {
@@ -82,13 +86,20 @@ class ImportTxtTocRuleViewModel(app: Application) : BaseViewModel(app) {
allSources.add(it) allSources.add(it)
} }
} }
text.isJsonArray() -> GSON.fromJsonArray<TxtTocRule>(text).getOrThrow() text.isJsonArray() -> GSON.fromJsonArray<TxtTocRule>(text).getOrThrow()
.let { items -> .let { items ->
allSources.addAll(items) allSources.addAll(items)
} }
text.isAbsUrl() -> { text.isAbsUrl() -> {
importSourceUrl(text) importSourceUrl(text)
} }
text.isUri() -> {
importSourceAwait(text.toUri().readText(appCtx))
}
else -> throw NoStackTraceException(context.getString(R.string.wrong_format)) else -> throw NoStackTraceException(context.getString(R.string.wrong_format))
} }
} }