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 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<String>()
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<Map<String, *>>("$[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("格式不对")
}
}
@@ -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<DictRule>(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))
}
}
@@ -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("格式不对")
}
}
@@ -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 {
@@ -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<ThemeConfig.Config>(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))
}
}
@@ -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<TxtTocRule>(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))
}
}