package service import ( "context" "strings" "github.com/prism/proxy/internal/country" ) func (a *App) ProxyDisplayNames(ctx context.Context) (map[string]string, error) { nodes, err := a.Store.ListProxyNodes(ctx, "", nil) if err != nil { return nil, err } groups, err := a.Store.ListProxyGroups(ctx) if err != nil { return nil, err } m := map[string]string{ "DIRECT": "DIRECT", "REJECT": "REJECT", } for _, n := range nodes { m[n.RuntimeName] = n.Name } for _, g := range groups { m[g.RuntimeName] = g.Name } seen := map[string]bool{} for _, n := range nodes { if n.Country == "" || seen[n.Country] { continue } seen[n.Country] = true rn := country.GroupRuntime(n.Country) m[rn] = country.Name(n.Country) + "(国家池)" } return m, nil } func (a *App) PolicyGroupRuntimes(ctx context.Context) (map[string]bool, error) { groups, err := a.Store.ListProxyGroups(ctx) if err != nil { return nil, err } out := map[string]bool{ "GLOBAL": true, "PROXY": true, } for _, g := range groups { if g.Enabled { out[g.RuntimeName] = true } } return out, nil } func DisplayName(names map[string]string, key string) string { if key == "" { return "" } if name, ok := names[key]; ok && name != "" { return name } if strings.HasPrefix(key, "country_") { code := strings.TrimPrefix(key, "country_") return country.Name(code) + "(国家池)" } return key }