Skip to content

Commit

Permalink
feat: support app/group type (gkd-kit#632)
Browse files Browse the repository at this point in the history
  • Loading branch information
lisonge committed Jun 6, 2024
1 parent a1b59a0 commit 75797a8
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 19 deletions.
18 changes: 13 additions & 5 deletions app/src/main/kotlin/li/songe/gkd/data/RawSubscription.kt
Original file line number Diff line number Diff line change
Expand Up @@ -814,9 +814,8 @@ data class RawSubscription(
return subscription
}

fun parseRawApp(source: String, json5: Boolean = true): RawApp {
val text = if (json5) json5ToJson(source) else source
val a = jsonToAppRaw(json.parseToJsonElement(text).jsonObject, 0)
fun parseApp(jsonObject: JsonObject): RawApp {
val a = jsonToAppRaw(jsonObject, 0)
a.groups.findDuplicatedItem { v -> v.key }?.let { v ->
error("duplicated app group: key=${v.key}")
}
Expand All @@ -828,15 +827,24 @@ data class RawSubscription(
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 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 ->
error("duplicated app rule: key=${v.key}")
}
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 {
val text = if (json5) json5ToJson(source) else source
val g = jsonToGlobalGroups(json.parseToJsonElement(text).jsonObject, 0)
Expand Down
40 changes: 26 additions & 14 deletions app/src/main/kotlin/li/songe/gkd/ui/AppItemPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ import com.blankj.utilcode.util.LogUtils
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
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.RawSubscription
import li.songe.gkd.data.SubsConfig
Expand All @@ -74,6 +76,7 @@ import li.songe.gkd.util.appInfoCacheFlow
import li.songe.gkd.util.encodeToJson5String
import li.songe.gkd.util.getGroupRawEnable
import li.songe.gkd.util.json
import li.songe.gkd.util.json5ToJson
import li.songe.gkd.util.launchAsFn
import li.songe.gkd.util.launchTry
import li.songe.gkd.util.navigate
Expand Down Expand Up @@ -407,29 +410,40 @@ fun AppItemPage(
}
},
confirmButton = {
TextButton(onClick = {
TextButton(onClick = vm.viewModelScope.launchAsFn(Dispatchers.Default) {
if (oldSource == source) {
toast("规则无变动")
toast("规则组无变动")
setEditGroupRaw(null)
return@TextButton
return@launchAsFn
}
val element = try {
json.parseToJsonElement(json5ToJson(source)).jsonObject
} catch (e: Exception) {
LogUtils.d(e)
error("非法JSON:${e.message}")
}
val newGroupRaw = try {
RawSubscription.parseRawGroup(source)
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)
toast("非法规则:${e.message}")
return@TextButton
error("非法规则:${e.message}")
}
if (newGroupRaw.key != editGroupRaw.key) {
toast("不能更改规则组的key")
return@TextButton
return@launchAsFn
}
if (newGroupRaw.errorDesc != null) {
toast(newGroupRaw.errorDesc!!)
return@TextButton
return@launchAsFn
}
setEditGroupRaw(null)
subsRaw ?: return@TextButton
subsRaw ?: return@launchAsFn
val newSubsRaw = subsRaw.copy(apps = subsRaw.apps.toMutableList().apply {
set(
indexOfFirst { a -> a.id == appRaw.id },
Expand All @@ -440,11 +454,9 @@ fun AppItemPage(
})
)
})
vm.viewModelScope.launchTry(Dispatchers.IO) {
updateSubscription(newSubsRaw)
DbSet.subsItemDao.update(subsItem.copy(mtime = System.currentTimeMillis()))
toast("更新成功")
}
updateSubscription(newSubsRaw)
DbSet.subsItemDao.update(subsItem.copy(mtime = System.currentTimeMillis()))
toast("更新成功")
}, enabled = source.isNotEmpty()) {
Text(text = "更新")
}
Expand Down

0 comments on commit 75797a8

Please sign in to comment.