diff --git a/docs/custom-api.md b/docs/custom-api.md index 1930f40..d42d1fc 100644 --- a/docs/custom-api.md +++ b/docs/custom-api.md @@ -397,6 +397,7 @@ The following helper functions provided by Glance are available: - `sortByFloat(key string, order string, arr []JSON): []JSON`: Sorts an array of JSON objects by a float key in either ascending or descending order. - `sortByTime(key string, layout string, order string, arr []JSON): []JSON`: Sorts an array of JSON objects by a time key in either ascending or descending order. The format must be provided in Go's [date format](https://pkg.go.dev/time#pkg-constants). - `concat(strings ...string) string`: Concatenates multiple strings together. +- `unique(key string, arr []JSON) []JSON`: Returns a unique array of JSON objects based on the given key. The following helper functions provided by Go's `text/template` are available: diff --git a/internal/glance/cli.go b/internal/glance/cli.go index 9cbb607..7527750 100644 --- a/internal/glance/cli.go +++ b/internal/glance/cli.go @@ -91,7 +91,6 @@ func cliSensorsPrint() int { fmt.Printf(" - %v\n", w) } } - return 1 } diff --git a/internal/glance/widget-custom-api.go b/internal/glance/widget-custom-api.go index a7e836e..dbad2a3 100644 --- a/internal/glance/widget-custom-api.go +++ b/internal/glance/widget-custom-api.go @@ -547,6 +547,18 @@ var customAPITemplateFuncs = func() template.FuncMap { "concat": func(items ...string) string { return strings.Join(items, "") }, + "unique": func(key string, results []decoratedGJSONResult) []decoratedGJSONResult { + seen := make(map[string]struct{}) + out := make([]decoratedGJSONResult, 0, len(results)) + for _, result := range results { + val := result.String(key) + if _, ok := seen[val]; !ok { + seen[val] = struct{}{} + out = append(out, result) + } + } + return out + }, } for key, value := range globalTemplateFunctions {