feat: dedupe MATCH
This commit is contained in:
@ -377,9 +377,32 @@ func (m *Manager) mergeSubscriptions(subs []*model.Subscription) (map[string]int
|
||||
combined = deepMerge(combined, data)
|
||||
}
|
||||
|
||||
combined["rules"] = dedupeMatchRule(combined["rules"])
|
||||
|
||||
return combined, proxies, true
|
||||
}
|
||||
|
||||
// dedupeMatchRule drops every "MATCH,..." catch-all rule contributed by the
|
||||
// merged subscriptions — each one covers all their own proxies, so once
|
||||
// concatenated they'd shadow all subsequent subscriptions' rules — and
|
||||
// appends a single "MATCH,all proxies" catch-all in their place.
|
||||
func dedupeMatchRule(rulesRaw interface{}) interface{} {
|
||||
rules, ok := rulesRaw.([]interface{})
|
||||
if !ok {
|
||||
return rulesRaw
|
||||
}
|
||||
|
||||
filtered := make([]interface{}, 0, len(rules)+1)
|
||||
for _, item := range rules {
|
||||
if line, ok := item.(string); ok && strings.HasPrefix(line, "MATCH,") {
|
||||
continue
|
||||
}
|
||||
filtered = append(filtered, item)
|
||||
}
|
||||
|
||||
return append(filtered, "MATCH,all proxies")
|
||||
}
|
||||
|
||||
func openInEditor(path string) bool {
|
||||
return editor.OpenFileInEditor(path)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user