修自定义配置
null、导入、mixin ignore
This commit is contained in:
@@ -21,16 +21,25 @@ object Uploader {
|
||||
val entries = UploadStore.load()
|
||||
.filter { it.enabled }
|
||||
.filter { onlyProfileIds == null || it.profile.id in onlyProfileIds }
|
||||
.filter { entry ->
|
||||
val definedHere =
|
||||
entry.profile.id in result.step.explicitUploadIds ||
|
||||
(onlyProfileIds != null && entry.profile.id in onlyProfileIds)
|
||||
if (definedHere) {
|
||||
true
|
||||
} else {
|
||||
val upload = (entry.profile as? UploadProfileCustom)?.mixin?.upload
|
||||
upload == null || !upload.ignores(result.profile.id, result.step.uploadType)
|
||||
}
|
||||
}
|
||||
if (entries.isEmpty()) return
|
||||
|
||||
VpnLog.info("${result.step.name} 开始上传(${entries.size} 个配置,串行)")
|
||||
VpnLog.info("${result.step.name} 开始上传(${entries.size} 个配置)")
|
||||
for ((_, profile) in entries) {
|
||||
try {
|
||||
val uploaded = uploadChunked(profile, result.url, result.file, result.step.uploadType)
|
||||
if (uploaded) {
|
||||
VpnLog.success("[${profile.id}] ${result.step.name} 上传完成")
|
||||
} else {
|
||||
VpnLog.info("[${profile.id}] ${result.step.name} 没有对应的上传地址,跳过")
|
||||
}
|
||||
} catch (c: CancellationException) {
|
||||
throw c
|
||||
@@ -166,7 +175,8 @@ enum class UploadProfileType(val displayName: String) {
|
||||
|
||||
/** mixin:在自定义上传配置里顺带定义抓包配置。 */
|
||||
data class UploadMixin(
|
||||
val profiles: List<UploadMixinProfile>,
|
||||
val profiles: List<UploadMixinProfile> = emptyList(),
|
||||
val upload: UploadMixinUpload? = null,
|
||||
)
|
||||
|
||||
data class UploadMixinProfile(
|
||||
@@ -176,7 +186,7 @@ data class UploadMixinProfile(
|
||||
|
||||
/**
|
||||
* name: 步骤显示名(同一 profile 内同名步骤会合并)
|
||||
* hosts: 域名列表,可以填 `cn` 这样的预设别名
|
||||
* hosts: 域名列表,可以填 `cn` / `jp` / `en` / `tw` / `kr` 这样的预设别名
|
||||
* target: `suite` / `mysekai` / `birthday` 快捷方式,或直接填请求路径正则
|
||||
*/
|
||||
data class UploadMixinStep(
|
||||
@@ -185,6 +195,32 @@ data class UploadMixinStep(
|
||||
val target: String,
|
||||
)
|
||||
|
||||
/**
|
||||
* `upload.ignore`:这个上传配置对哪些"不是自己 mixin 定义"的步骤不生效。
|
||||
* 自己 mixin 定义出来的步骤永远会上传(见 [ignores] 的调用处)。
|
||||
*/
|
||||
data class UploadMixinUpload(
|
||||
/** ignore: "*" */
|
||||
val ignoreAll: Boolean = false,
|
||||
val ignore: List<UploadIgnoreProfile> = emptyList(),
|
||||
) {
|
||||
fun ignores(region: String, stepType: String?): Boolean {
|
||||
if (ignoreAll) return true
|
||||
return ignore.any { item ->
|
||||
item.region.equals(region, ignoreCase = true) &&
|
||||
(item.steps.isEmpty() ||
|
||||
(stepType != null && item.steps.any { it.equals(stepType, ignoreCase = true) }))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class UploadIgnoreProfile(
|
||||
/** Region:cn / jp / en / tw / kr */
|
||||
val region: String,
|
||||
/** 空表示整个配置 */
|
||||
val steps: List<String> = emptyList(),
|
||||
)
|
||||
|
||||
sealed interface UploadProfile {
|
||||
val id: String
|
||||
val type: UploadProfileType
|
||||
@@ -266,10 +302,10 @@ class UploadProfileReasona(override val id: String, val uploadCode: String) : Up
|
||||
get() {
|
||||
val payload = parseJwt() ?: return emptyMap()
|
||||
val map = mutableMapOf<String, String>()
|
||||
if (payload.has("qqnum")) {
|
||||
if (payload.has("qqnum") && !payload.isNull("qqnum")) {
|
||||
map["QQ 号"] = payload.optString("qqnum")
|
||||
}
|
||||
if (payload.has("sync_8823")) {
|
||||
if (payload.has("sync_8823") && !payload.isNull("sync_8823")) {
|
||||
map["同步给 8823"] = payload.optBoolean("sync_8823").toString()
|
||||
}
|
||||
return map
|
||||
|
||||
Reference in New Issue
Block a user