mirror of
https://github.com/gkd-kit/gkd.git
synced 2024-11-16 11:42:22 +08:00
feat: support app/group type (#632)
Some checks failed
Build-Apk / build (push) Has been cancelled
Some checks failed
Build-Apk / build (push) Has been cancelled
This commit is contained in:
parent
a1b59a086e
commit
75797a89cc
|
@ -814,9 +814,8 @@ data class RawSubscription(
|
||||||
return subscription
|
return subscription
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseRawApp(source: String, json5: Boolean = true): RawApp {
|
fun parseApp(jsonObject: JsonObject): RawApp {
|
||||||
val text = if (json5) json5ToJson(source) else source
|
val a = jsonToAppRaw(jsonObject, 0)
|
||||||
val a = jsonToAppRaw(json.parseToJsonElement(text).jsonObject, 0)
|
|
||||||
a.groups.findDuplicatedItem { v -> v.key }?.let { v ->
|
a.groups.findDuplicatedItem { v -> v.key }?.let { v ->
|
||||||
error("duplicated app group: key=${v.key}")
|
error("duplicated app group: key=${v.key}")
|
||||||
}
|
}
|
||||||
|
@ -828,15 +827,24 @@ data class RawSubscription(
|
||||||
return a
|
return a
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseRawGroup(source: String, json5: Boolean = true): RawAppGroup {
|
fun parseRawApp(source: String, json5: Boolean = true): RawApp {
|
||||||
val text = if (json5) json5ToJson(source) else source
|
val text = if (json5) json5ToJson(source) else source
|
||||||
val g = jsonToGroupRaw(json.parseToJsonElement(text).jsonObject, 0)
|
return parseApp(json.parseToJsonElement(text).jsonObject)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun parseGroup(jsonObject: JsonObject): RawAppGroup {
|
||||||
|
val g = jsonToGroupRaw(jsonObject, 0)
|
||||||
g.rules.findDuplicatedItem { v -> v.key }?.let { v ->
|
g.rules.findDuplicatedItem { v -> v.key }?.let { v ->
|
||||||
error("duplicated app rule: key=${v.key}")
|
error("duplicated app rule: key=${v.key}")
|
||||||
}
|
}
|
||||||
return g
|
return g
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun parseRawGroup(source: String, json5: Boolean = true): RawAppGroup {
|
||||||
|
val text = if (json5) json5ToJson(source) else source
|
||||||
|
return parseGroup(json.parseToJsonElement(text).jsonObject)
|
||||||
|
}
|
||||||
|
|
||||||
fun parseRawGlobalGroup(source: String, json5: Boolean = true): RawGlobalGroup {
|
fun parseRawGlobalGroup(source: String, json5: Boolean = true): RawGlobalGroup {
|
||||||
val text = if (json5) json5ToJson(source) else source
|
val text = if (json5) json5ToJson(source) else source
|
||||||
val g = jsonToGlobalGroups(json.parseToJsonElement(text).jsonObject, 0)
|
val g = jsonToGlobalGroups(json.parseToJsonElement(text).jsonObject, 0)
|
||||||
|
|
|
@ -60,6 +60,8 @@ import com.blankj.utilcode.util.LogUtils
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.serialization.json.JsonArray
|
||||||
|
import kotlinx.serialization.json.jsonObject
|
||||||
import li.songe.gkd.data.ExcludeData
|
import li.songe.gkd.data.ExcludeData
|
||||||
import li.songe.gkd.data.RawSubscription
|
import li.songe.gkd.data.RawSubscription
|
||||||
import li.songe.gkd.data.SubsConfig
|
import li.songe.gkd.data.SubsConfig
|
||||||
|
@ -74,6 +76,7 @@ import li.songe.gkd.util.appInfoCacheFlow
|
||||||
import li.songe.gkd.util.encodeToJson5String
|
import li.songe.gkd.util.encodeToJson5String
|
||||||
import li.songe.gkd.util.getGroupRawEnable
|
import li.songe.gkd.util.getGroupRawEnable
|
||||||
import li.songe.gkd.util.json
|
import li.songe.gkd.util.json
|
||||||
|
import li.songe.gkd.util.json5ToJson
|
||||||
import li.songe.gkd.util.launchAsFn
|
import li.songe.gkd.util.launchAsFn
|
||||||
import li.songe.gkd.util.launchTry
|
import li.songe.gkd.util.launchTry
|
||||||
import li.songe.gkd.util.navigate
|
import li.songe.gkd.util.navigate
|
||||||
|
@ -407,29 +410,40 @@ fun AppItemPage(
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
TextButton(onClick = {
|
TextButton(onClick = vm.viewModelScope.launchAsFn(Dispatchers.Default) {
|
||||||
if (oldSource == source) {
|
if (oldSource == source) {
|
||||||
toast("规则无变动")
|
toast("规则组无变动")
|
||||||
setEditGroupRaw(null)
|
setEditGroupRaw(null)
|
||||||
return@TextButton
|
return@launchAsFn
|
||||||
}
|
}
|
||||||
val newGroupRaw = try {
|
val element = try {
|
||||||
RawSubscription.parseRawGroup(source)
|
json.parseToJsonElement(json5ToJson(source)).jsonObject
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
LogUtils.d(e)
|
LogUtils.d(e)
|
||||||
toast("非法规则:${e.message}")
|
error("非法JSON:${e.message}")
|
||||||
return@TextButton
|
}
|
||||||
|
val newGroupRaw = try {
|
||||||
|
if (element["groups"] is JsonArray) {
|
||||||
|
RawSubscription.parseApp(element).groups.let {
|
||||||
|
it.find { g -> g.key == editGroupRaw.key } ?: it.firstOrNull()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
} ?: RawSubscription.parseGroup(element)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
LogUtils.d(e)
|
||||||
|
error("非法规则:${e.message}")
|
||||||
}
|
}
|
||||||
if (newGroupRaw.key != editGroupRaw.key) {
|
if (newGroupRaw.key != editGroupRaw.key) {
|
||||||
toast("不能更改规则组的key")
|
toast("不能更改规则组的key")
|
||||||
return@TextButton
|
return@launchAsFn
|
||||||
}
|
}
|
||||||
if (newGroupRaw.errorDesc != null) {
|
if (newGroupRaw.errorDesc != null) {
|
||||||
toast(newGroupRaw.errorDesc!!)
|
toast(newGroupRaw.errorDesc!!)
|
||||||
return@TextButton
|
return@launchAsFn
|
||||||
}
|
}
|
||||||
setEditGroupRaw(null)
|
setEditGroupRaw(null)
|
||||||
subsRaw ?: return@TextButton
|
subsRaw ?: return@launchAsFn
|
||||||
val newSubsRaw = subsRaw.copy(apps = subsRaw.apps.toMutableList().apply {
|
val newSubsRaw = subsRaw.copy(apps = subsRaw.apps.toMutableList().apply {
|
||||||
set(
|
set(
|
||||||
indexOfFirst { a -> a.id == appRaw.id },
|
indexOfFirst { a -> a.id == appRaw.id },
|
||||||
|
@ -440,11 +454,9 @@ fun AppItemPage(
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
vm.viewModelScope.launchTry(Dispatchers.IO) {
|
updateSubscription(newSubsRaw)
|
||||||
updateSubscription(newSubsRaw)
|
DbSet.subsItemDao.update(subsItem.copy(mtime = System.currentTimeMillis()))
|
||||||
DbSet.subsItemDao.update(subsItem.copy(mtime = System.currentTimeMillis()))
|
toast("更新成功")
|
||||||
toast("更新成功")
|
|
||||||
}
|
|
||||||
}, enabled = source.isNotEmpty()) {
|
}, enabled = source.isNotEmpty()) {
|
||||||
Text(text = "更新")
|
Text(text = "更新")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user