Skip to content

在 Maa 界面选项中引入 scan_select 选项类型,支持基于目录和 glob 的文件扫描配置。 #1247

@xlxyvergil

Description

@xlxyvergil

功能描述 / Feature Description

在 Maa 界面选项中引入 scan_select 选项类型,支持基于目录和 glob 的文件扫描配置。 为 scan_select 提供一个下拉菜单形式的 UI 控件,带有“刷新”按钮,可从磁盘重新加载可选项,并支持嵌套子选项。 扩展选项处理逻辑以支持 scan_select 的选择,将选定的值应用到 pipeline_override 中,并递归处理相关子选项。
scan_select 用于在加载 interface.json 时扫描目录文件,并把扫描结果自动写入当前选项的 cases,适用于“配置文件选择”等动态枚举场景。

字段定义如下:

字段 类型 必填 说明
type "scan_select" 选项类型
label string 前端显示名称
description string 描述信息
scan_dir string 扫描目录。相对路径基于 interface.json 所在目录解析,并做越界限制(不允许跳出该目录)
scan_filter string glob pattern,用于筛选文件,如 **/*.json
pipeline_override object 任务执行时使用的覆盖配置,必须在任意层级的 attach 中至少包含一次当前选项名键(如 attach.bbc_team_config
cases OptionCase[] 否(配置阶段应省略或空数组) 加载时自动生成,name/label 均为相对 scan_dir 的路径+文件名
default_case string 默认选项名称

示例:

加载前:

{
  "option": {
    "bbc_team_config": {
      "type": "scan_select",
      "label": "BBC 队伍配置",
      "description": "选择 BBC 队伍配置文件",
      "scan_dir": "./resource/BBchannel/settings",
      "scan_filter": "**/*.json",
      "pipeline_override": {
        "队伍配置": {
          "attach": {
            "bbc_team_config": ""
          }
        }
      }
    }
  }
}

加载完成且用户选择 1.json

该结果仅在内存中保留,不会实际修改 interface.json

{
  "option": {
    "bbc_team_config": {
      "type": "scan_select",
      "label": "BBC 队伍配置",
      "description": "选择 BBC 队伍配置文件",
      "scan_dir": "./resource/BBchannel/settings",
      "scan_filter": "**/*.json",
      "pipeline_override": {
        "队伍配置": {
          "attach": {
            "bbc_team_config": "1.json"
          }
        }
      },
      "cases": [
        {
          "name": "1.json",
          "label": "1.json"
        },
        {
          "name": "bbb/c.json",
          "label": "bbb/c.json"
        }
      ]
    }
  }
}

scan_select 会递归遍历 pipeline_override,并对所有命中的 attach.option_name 赋值。
例如在 队伍配置1队伍配置2 下都存在 attach.bbc_team_config 时,两处都会被写入同一个用户选择结果。

MaaFramework 版本 / Version

No response

其他信息 / Additional Information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions