mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-05-18 09:46:54 +08:00
refactor(config): 更新配置文件处理逻辑
- 添加了 templateMatchSettingsJson 配置文件路径定义 - 使用 templateMatchSettings 替代 uidSettings 进行配置筛选 - 优化了层级设置过滤逻辑,改进了分隔符插入机制 - 重构了配置项的合并与写入流程 - 修复了层级名称匹配和路径过滤的相关问题 - 调整了设置项的排序和展示逻辑
This commit is contained in:
@@ -36,6 +36,7 @@ const json_path_name = {
|
|||||||
RecordText: `${config_root}\\record.json`,
|
RecordText: `${config_root}\\record.json`,
|
||||||
RecordPathText: `${config_root}\\PathRecord.json`,
|
RecordPathText: `${config_root}\\PathRecord.json`,
|
||||||
uidSettingsJson: `${config_root}\\uidSettings.json`,
|
uidSettingsJson: `${config_root}\\uidSettings.json`,
|
||||||
|
templateMatchSettingsJson: `${config_root}\\settings.json`,
|
||||||
cdPath: `${config_root}\\cd-${pathingName}.json`,
|
cdPath: `${config_root}\\cd-${pathingName}.json`,
|
||||||
SevenElement: `${config_root}\\SevenElement.json`,
|
SevenElement: `${config_root}\\SevenElement.json`,
|
||||||
RefreshSettings: `${config_root}\\RefreshSettings.json`,
|
RefreshSettings: `${config_root}\\RefreshSettings.json`,
|
||||||
@@ -467,23 +468,48 @@ async function loadUidSettingsMap(uidSettingsMap) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
let templateMatchSettings = JSON.parse(file.readTextSync(json_path_name.templateMatchSettingsJson));
|
||||||
// 筛选出名称为'config_run'的设置项
|
// 筛选出名称为'config_run'的设置项
|
||||||
uidSettings.filter(
|
templateMatchSettings.filter(
|
||||||
item => item.name === 'config_run'
|
item => item.name === 'config_run'
|
||||||
).forEach(item => {
|
).forEach(item => {
|
||||||
// 刷新settings自动设置执行
|
// 刷新settings自动设置执行
|
||||||
item.default = "执行"
|
item.default = "执行"
|
||||||
})
|
})
|
||||||
uidSettings.filter(
|
templateMatchSettings.filter(
|
||||||
item => item.name === 'config_uid'
|
item => item.name === 'config_uid'
|
||||||
).forEach(item => {
|
).forEach(item => {
|
||||||
// 刷新settings自动设置执行
|
// 刷新settings自动设置执行
|
||||||
item.label = "当前配置uid:\{" + Record.uid + "\}\n(仅仅显示配置uid无其他作用)"
|
item.label = "当前配置uid:\{" + Record.uid + "\}\n(仅仅显示配置uid无其他作用)"
|
||||||
})
|
})
|
||||||
let filterSettings = []
|
let filterSettings = []
|
||||||
const filterUidSettings = uidSettings.filter(item => item.name.startsWith(levelName))
|
const filterUidSettings = uidSettings.filter(item => item?.name?.startsWith(levelName))
|
||||||
filterSettings = filterUidSettings
|
let tempFilterUidSettings = []
|
||||||
uidSettings = Array.from(new Set(uidSettings).difference(new Set(filterUidSettings)))
|
|
||||||
|
let last_parent_level = undefined
|
||||||
|
for (let i = 0; i < filterUidSettings.length; i++) {
|
||||||
|
let item = filterUidSettings[i]
|
||||||
|
// log.warn(`item:{0}`,item)
|
||||||
|
if (item?.name?.startsWith(levelName)) {
|
||||||
|
if (i === 0) {
|
||||||
|
tempFilterUidSettings.push({type: "separator"})
|
||||||
|
tempFilterUidSettings.push({type: "separator"})
|
||||||
|
}
|
||||||
|
|
||||||
|
tempFilterUidSettings.push({type: "separator"})
|
||||||
|
|
||||||
|
let parent_level = item?.name?.replace(levelName + "_", "")?.split("_")[0] || undefined
|
||||||
|
if (i !== 0 && parent_level && parent_level !== last_parent_level) {
|
||||||
|
tempFilterUidSettings.push({type: "separator"})
|
||||||
|
}
|
||||||
|
tempFilterUidSettings.push(item)
|
||||||
|
last_parent_level = parent_level
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// log.debug("用户配置: {0}", tempFilterUidSettings)
|
||||||
|
filterSettings = tempFilterUidSettings
|
||||||
|
// filterSettings = filterUidSettings
|
||||||
|
// templateMatchSettings = Array.from(new Set(templateMatchSettings).difference(new Set(filterUidSettings)))
|
||||||
try {
|
try {
|
||||||
loadingLevel = parseInt(settings.loading_level)
|
loadingLevel = parseInt(settings.loading_level)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -493,65 +519,79 @@ async function loadUidSettingsMap(uidSettingsMap) {
|
|||||||
loadingLevel = loadingLevel < 1 ? 2 : loadingLevel
|
loadingLevel = loadingLevel < 1 ? 2 : loadingLevel
|
||||||
}
|
}
|
||||||
//todo: 高阶层级过滤
|
//todo: 高阶层级过滤
|
||||||
/**
|
if (false) {
|
||||||
* 实例:pathing\地方特产\
|
/**
|
||||||
* 地方特产
|
* 实例:pathing\地方特产\
|
||||||
* 实例:pathing\地方特产\枫丹\
|
* 地方特产
|
||||||
* 地方特产->枫丹
|
* 实例:pathing\地方特产\枫丹\
|
||||||
* 实例:pathing\地方特产\枫丹\幽光星星\
|
* 地方特产->枫丹
|
||||||
* 地方特产->枫丹->幽光星星
|
* 实例:pathing\地方特产\枫丹\幽光星星\
|
||||||
* 实例:pathing\地方特产\枫丹\幽光星星\幽光星星@jbcaaa\
|
* 地方特产->枫丹->幽光星星
|
||||||
* 地方特产->枫丹->幽光星星->幽光星星@jbcaaa
|
* 实例:pathing\地方特产\枫丹\幽光星星\幽光星星@jbcaaa\
|
||||||
*/
|
* 地方特产->枫丹->幽光星星->幽光星星@jbcaaa
|
||||||
let keys = new Set([])
|
*/
|
||||||
|
let keys = new Set([])
|
||||||
|
|
||||||
const highLevelFiltering = settings.high_level_filtering || undefined
|
const highLevelFiltering = settings.high_level_filtering || undefined
|
||||||
if (highLevelFiltering) {
|
if (highLevelFiltering) {
|
||||||
const set = new Set(highLevelFiltering.split("->"));
|
const set = new Set(highLevelFiltering.split("->"));
|
||||||
keys = keys.union(set)
|
keys = keys.union(set)
|
||||||
|
}
|
||||||
|
|
||||||
|
// function countMatchingElements(mainSet, subset) {
|
||||||
|
// const mainSetObj = new Set(mainSet);
|
||||||
|
// return subset.filter(item => mainSetObj.has(item)).length;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const key = keys[keys.size - 1]
|
||||||
|
// PATH_JSON_LIST.filter(item => item.level > 0)
|
||||||
|
// 预先建立 levelName 到路径信息的映射
|
||||||
|
const levelNameMap = new Map();
|
||||||
|
PATH_JSON_LIST.forEach(item => {
|
||||||
|
if (item.levelName) {
|
||||||
|
levelNameMap.set(item.levelName, item);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//中间一段路径名称
|
||||||
|
const dir_key = Array.from(keys).join("\\")
|
||||||
|
filterSettings = filterSettings.filter(item => {
|
||||||
|
if (!item?.name?.startsWith(levelName)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// const settings_level = PATH_JSON_LIST.filter(list_item => list_item.levelName === item.name).find();
|
||||||
|
const settings_level = levelNameMap.get(item.name);
|
||||||
|
if (settings_level) {
|
||||||
|
//只加载指定目录
|
||||||
|
return (settings_level.path.includes(dir_key))
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// function countMatchingElements(mainSet, subset) {
|
|
||||||
// const mainSetObj = new Set(mainSet);
|
|
||||||
// return subset.filter(item => mainSetObj.has(item)).length;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// const key = keys[keys.size - 1]
|
|
||||||
// PATH_JSON_LIST.filter(item => item.level > 0)
|
|
||||||
// 预先建立 levelName 到路径信息的映射
|
|
||||||
const levelNameMap = new Map();
|
|
||||||
PATH_JSON_LIST.forEach(item => {
|
|
||||||
if (item.levelName) {
|
|
||||||
levelNameMap.set(item.levelName, item);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//中间一段路径名称
|
|
||||||
const dir_key = keys.join("\\")
|
|
||||||
filterSettings = filterUidSettings.filter(item => {
|
|
||||||
// const settings_level = PATH_JSON_LIST.filter(list_item => list_item.levelName === item.name).find();
|
|
||||||
const settings_level = levelNameMap.get(item.name);
|
|
||||||
if (settings_level) {
|
|
||||||
//只加载指定目录
|
|
||||||
return (settings_level.path.includes(dir_key))
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
})
|
|
||||||
const theLayer = settings.the_layer || false
|
const theLayer = settings.the_layer || false
|
||||||
const levelSettings = filterSettings.filter(item => {
|
const levelSettings = filterSettings.filter(item => {
|
||||||
const level_all = item.name.replaceAll(levelName, "");
|
if (!item?.name?.startsWith(levelName)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
const level_all = item.name.replaceAll(levelName + "_", "");
|
||||||
// 获取级别
|
// 获取级别
|
||||||
const level = level_all.split("_").filter(item => item?.trim() !== "").map(parseInt)[0]
|
const level = level_all.split("_").map(parseInt)[0]
|
||||||
if (theLayer) {
|
if (theLayer) {
|
||||||
//只加载指定级别的设置
|
//只加载指定级别的设置
|
||||||
return (loadingLevel === level + 1)
|
return (loadingLevel === level + 1)
|
||||||
}
|
}
|
||||||
// 检查级别是否大于等于加载层级
|
// 检查级别是否小于等于加载层级
|
||||||
return (loadingLevel > level)
|
return (loadingLevel > level)
|
||||||
})
|
})
|
||||||
uidSettings.push(levelSettings)
|
templateMatchSettings = [...templateMatchSettings, ...levelSettings]
|
||||||
|
while (templateMatchSettings.length > 0 &&
|
||||||
|
templateMatchSettings[templateMatchSettings.length - 1]?.type === "separator") {
|
||||||
|
templateMatchSettings.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
// uidSettings.push(levelSettings)
|
||||||
// 将更新后的设置写入配置文件
|
// 将更新后的设置写入配置文件
|
||||||
file.writeTextSync(manifest.settings_ui, JSON.stringify(uidSettings))
|
file.writeTextSync(manifest.settings_ui, JSON.stringify(templateMatchSettings))
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// 记录错误日志
|
// 记录错误日志
|
||||||
log.error("加载用户配置失败: {error}", e.message)
|
log.error("加载用户配置失败: {error}", e.message)
|
||||||
|
|||||||
Reference in New Issue
Block a user